diff options
Diffstat (limited to 'src/Editor.zig')
| -rw-r--r-- | src/Editor.zig | 14 |
1 files changed, 10 insertions, 4 deletions
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; | |||
| 6 | const Buffer = es.Buffer; | 6 | const Buffer = es.Buffer; |
| 7 | const Editor = @This(); | 7 | const Editor = @This(); |
| 8 | const Key = es.Key; | 8 | const Key = es.Key; |
| 9 | const KeyMap = es.KeyMap; | ||
| 9 | const KeyReader = es.KeyReader; | 10 | const KeyReader = es.KeyReader; |
| 10 | const KeyState = es.key_state.KeyState; | ||
| 11 | const StringBuilder = es.StringBuilder; | 11 | const StringBuilder = es.StringBuilder; |
| 12 | const StringHashMap = std.StringHashMap; | 12 | const StringHashMap = std.StringHashMap; |
| 13 | 13 | ||
| @@ -22,12 +22,15 @@ screencols: usize, | |||
| 22 | statusmsg: ?[]u8, | 22 | statusmsg: ?[]u8, |
| 23 | statusmsg_time: i64, | 23 | statusmsg_time: i64, |
| 24 | 24 | ||
| 25 | current_state: KeyState, | 25 | key_map: KeyMap, |
| 26 | 26 | ||
| 27 | key_reader: KeyReader, | 27 | key_reader: KeyReader, |
| 28 | should_exit: bool, | 28 | should_exit: bool, |
| 29 | 29 | ||
| 30 | pub fn init(allocator: Allocator) !Editor { | 30 | pub fn init(allocator: Allocator) !Editor { |
| 31 | var key_map: ?KeyMap = try KeyMap.defaultMap(allocator); | ||
| 32 | errdefer if (key_map) |*map| map.deinit(); | ||
| 33 | |||
| 31 | var self = Editor{ | 34 | var self = Editor{ |
| 32 | .allocator = allocator, | 35 | .allocator = allocator, |
| 33 | 36 | ||
| @@ -40,12 +43,13 @@ pub fn init(allocator: Allocator) !Editor { | |||
| 40 | .statusmsg = null, | 43 | .statusmsg = null, |
| 41 | .statusmsg_time = 0, | 44 | .statusmsg_time = 0, |
| 42 | 45 | ||
| 43 | .current_state = es.key_state.defaultState, | 46 | .key_map = key_map.?, |
| 44 | 47 | ||
| 45 | .key_reader = KeyReader.init(allocator), | 48 | .key_reader = KeyReader.init(allocator), |
| 46 | .should_exit = false, | 49 | .should_exit = false, |
| 47 | }; | 50 | }; |
| 48 | errdefer self.deinit(); | 51 | errdefer self.deinit(); |
| 52 | key_map = null; | ||
| 49 | 53 | ||
| 50 | // Initializes .screenrows and .screencols | 54 | // Initializes .screenrows and .screencols |
| 51 | try self.refreshWindowSize(); | 55 | try self.refreshWindowSize(); |
| @@ -67,6 +71,8 @@ pub fn deinit(self: *Editor) void { | |||
| 67 | self.allocator.free(statusmsg); | 71 | self.allocator.free(statusmsg); |
| 68 | } | 72 | } |
| 69 | 73 | ||
| 74 | self.key_map.deinit(); | ||
| 75 | |||
| 70 | self.key_reader.deinit(); | 76 | self.key_reader.deinit(); |
| 71 | 77 | ||
| 72 | self.* = undefined; | 78 | self.* = undefined; |
| @@ -197,7 +203,7 @@ pub fn openFile(self: *Editor) !void { | |||
| 197 | 203 | ||
| 198 | pub fn processKeypress(self: *Editor) !void { | 204 | pub fn processKeypress(self: *Editor) !void { |
| 199 | const key = try self.key_reader.readKey(); | 205 | const key = try self.key_reader.readKey(); |
| 200 | try self.current_state(self, self.buffer, key); | 206 | try self.key_map.keypress(self, self.buffer, key); |
| 201 | } | 207 | } |
| 202 | 208 | ||
| 203 | pub fn prompt(self: *Editor, allocator: Allocator, prompt_str: []const u8) !?[]u8 { | 209 | pub fn prompt(self: *Editor, allocator: Allocator, prompt_str: []const u8) !?[]u8 { |