From f8f2e8e3bedb94833bbe6cab9c435b33cfbfea14 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Mon, 3 Jan 2022 03:16:31 +0200 Subject: a bit improved key map --- src/Editor.zig | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/Editor.zig') diff --git a/src/Editor.zig b/src/Editor.zig index d721600..4d90760 100644 --- a/src/Editor.zig +++ b/src/Editor.zig @@ -6,8 +6,8 @@ const ArrayList = std.ArrayList; const Buffer = es.Buffer; const Editor = @This(); const Key = es.Key; +const KeyMap = es.KeyMap; const KeyReader = es.KeyReader; -const KeyState = es.key_state.KeyState; const StringBuilder = es.StringBuilder; const StringHashMap = std.StringHashMap; @@ -22,12 +22,15 @@ screencols: usize, statusmsg: ?[]u8, statusmsg_time: i64, -current_state: KeyState, +key_map: KeyMap, key_reader: KeyReader, should_exit: bool, pub fn init(allocator: Allocator) !Editor { + var key_map: ?KeyMap = try KeyMap.defaultMap(allocator); + errdefer if (key_map) |*map| map.deinit(); + var self = Editor{ .allocator = allocator, @@ -40,12 +43,13 @@ pub fn init(allocator: Allocator) !Editor { .statusmsg = null, .statusmsg_time = 0, - .current_state = es.key_state.defaultState, + .key_map = key_map.?, .key_reader = KeyReader.init(allocator), .should_exit = false, }; errdefer self.deinit(); + key_map = null; // Initializes .screenrows and .screencols try self.refreshWindowSize(); @@ -67,6 +71,8 @@ pub fn deinit(self: *Editor) void { self.allocator.free(statusmsg); } + self.key_map.deinit(); + self.key_reader.deinit(); self.* = undefined; @@ -197,7 +203,7 @@ pub fn openFile(self: *Editor) !void { pub fn processKeypress(self: *Editor) !void { const key = try self.key_reader.readKey(); - try self.current_state(self, self.buffer, key); + try self.key_map.keypress(self, self.buffer, key); } pub fn prompt(self: *Editor, allocator: Allocator, prompt_str: []const u8) !?[]u8 { -- cgit v1.2.3