From edb1fae2ab8904c42580aeed2b08b9a05ece55e4 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Mon, 29 Jan 2024 07:00:34 -0600 Subject: [PATCH] textinput: add more readline bindings Signed-off-by: Tim Culverhouse --- src/widgets/TextInput.zig | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/widgets/TextInput.zig b/src/widgets/TextInput.zig index f21b371..c2b7077 100644 --- a/src/widgets/TextInput.zig +++ b/src/widgets/TextInput.zig @@ -38,19 +38,30 @@ pub fn update(self: *TextInput, event: Event) !void { if (key.matches(Key.backspace, .{})) { if (self.cursor_idx == 0) return; self.deleteBeforeCursor(); - } else if (key.matches(Key.delete, .{})) { + } else if (key.matches(Key.delete, .{}) or key.matches('d', .{ .ctrl = true })) { if (self.cursor_idx == self.grapheme_count) return; self.deleteAtCursor(); - } else if (key.matches(Key.left, .{})) { + } else if (key.matches(Key.left, .{}) or key.matches('b', .{ .ctrl = true })) { if (self.cursor_idx > 0) self.cursor_idx -= 1; - } else if (key.matches(Key.right, .{})) { + } else if (key.matches(Key.right, .{}) or key.matches('f', .{ .ctrl = true })) { if (self.cursor_idx < self.grapheme_count) self.cursor_idx += 1; + } else if (key.matches('a', .{ .ctrl = true })) { + self.cursor_idx = 0; + } else if (key.matches('e', .{ .ctrl = true })) { + self.cursor_idx = self.grapheme_count; + } else if (key.matches('k', .{ .ctrl = true })) { + while (self.cursor_idx < self.grapheme_count) { + self.deleteAtCursor(); + } + } else if (key.matches('u', .{ .ctrl = true })) { + while (self.cursor_idx > 0) { + self.deleteBeforeCursor(); + } } else if (key.text) |text| { try self.buf.insertSlice(self.byteOffsetToCursor(), text); self.cursor_idx += 1; self.grapheme_count += 1; } - // TODO: readline bindings }, } }