summaryrefslogtreecommitdiff
path: root/src/Editor.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Editor.zig')
-rw-r--r--src/Editor.zig14
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;
6const Buffer = es.Buffer; 6const Buffer = es.Buffer;
7const Editor = @This(); 7const Editor = @This();
8const Key = es.Key; 8const Key = es.Key;
9const KeyMap = es.KeyMap;
9const KeyReader = es.KeyReader; 10const KeyReader = es.KeyReader;
10const KeyState = es.key_state.KeyState;
11const StringBuilder = es.StringBuilder; 11const StringBuilder = es.StringBuilder;
12const StringHashMap = std.StringHashMap; 12const StringHashMap = std.StringHashMap;
13 13
@@ -22,12 +22,15 @@ screencols: usize,
22statusmsg: ?[]u8, 22statusmsg: ?[]u8,
23statusmsg_time: i64, 23statusmsg_time: i64,
24 24
25current_state: KeyState, 25key_map: KeyMap,
26 26
27key_reader: KeyReader, 27key_reader: KeyReader,
28should_exit: bool, 28should_exit: bool,
29 29
30pub fn init(allocator: Allocator) !Editor { 30pub 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
198pub fn processKeypress(self: *Editor) !void { 204pub 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
203pub fn prompt(self: *Editor, allocator: Allocator, prompt_str: []const u8) !?[]u8 { 209pub fn prompt(self: *Editor, allocator: Allocator, prompt_str: []const u8) !?[]u8 {