fix: simplify goto mode bindings
This commit is contained in:
parent
22cc818ad6
commit
2f0da48c6c
2 changed files with 33 additions and 19 deletions
|
@ -242,6 +242,7 @@
|
||||||
"on_match_failure": "insert",
|
"on_match_failure": "insert",
|
||||||
"bindings": [
|
"bindings": [
|
||||||
["ctrl+q", "quit"],
|
["ctrl+q", "quit"],
|
||||||
|
["ctrl+v", "system_paste"],
|
||||||
["ctrl+u", "mini_mode_reset"],
|
["ctrl+u", "mini_mode_reset"],
|
||||||
["ctrl+g", "mini_mode_cancel"],
|
["ctrl+g", "mini_mode_cancel"],
|
||||||
["ctrl+c", "mini_mode_cancel"],
|
["ctrl+c", "mini_mode_cancel"],
|
||||||
|
@ -250,17 +251,7 @@
|
||||||
|
|
||||||
["escape", "mini_mode_cancel"],
|
["escape", "mini_mode_cancel"],
|
||||||
["enter", "exit_mini_mode"],
|
["enter", "exit_mini_mode"],
|
||||||
["backspace", "mini_mode_delete_backwards"],
|
["backspace", "mini_mode_delete_backwards"]
|
||||||
["0", "mini_mode_insert_code_point", 0],
|
|
||||||
["1", "mini_mode_insert_code_point", 1],
|
|
||||||
["2", "mini_mode_insert_code_point", 2],
|
|
||||||
["3", "mini_mode_insert_code_point", 3],
|
|
||||||
["4", "mini_mode_insert_code_point", 4],
|
|
||||||
["5", "mini_mode_insert_code_point", 5],
|
|
||||||
["6", "mini_mode_insert_code_point", 6],
|
|
||||||
["7", "mini_mode_insert_code_point", 7],
|
|
||||||
["8", "mini_mode_insert_code_point", 8],
|
|
||||||
["9", "mini_mode_insert_code_point", 9]
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mini/move_to_char": {
|
"mini/move_to_char": {
|
||||||
|
|
|
@ -34,7 +34,9 @@ pub fn create(allocator: Allocator, _: command.Context) !struct { tui.Mode, tui.
|
||||||
try self.commands.init(self);
|
try self.commands.init(self);
|
||||||
return .{
|
return .{
|
||||||
.{
|
.{
|
||||||
.input_handler = try keybind.mode.mini.goto.create(allocator, .{}),
|
.input_handler = try keybind.mode.mini.goto.create(allocator, .{
|
||||||
|
.insert_command = "mini_mode_insert_bytes",
|
||||||
|
}),
|
||||||
.event_handler = EventHandler.to_owned(self),
|
.event_handler = EventHandler.to_owned(self),
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
|
@ -69,6 +71,23 @@ fn goto(self: *Self) void {
|
||||||
command.executeName("goto_line", command.fmt(.{self.input orelse self.start})) catch {};
|
command.executeName("goto_line", command.fmt(.{self.input orelse self.start})) catch {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn insert_char(self: *Self, char: u8) void {
|
||||||
|
switch (char) {
|
||||||
|
'0' => {
|
||||||
|
if (self.input) |linenum| self.input = linenum * 10;
|
||||||
|
},
|
||||||
|
'1'...'9' => {
|
||||||
|
const digit: usize = @intCast(char - '0');
|
||||||
|
self.input = if (self.input) |x| x * 10 + digit else digit;
|
||||||
|
},
|
||||||
|
else => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn insert_bytes(self: *Self, bytes: []const u8) void {
|
||||||
|
for (bytes) |c| self.insert_char(c);
|
||||||
|
}
|
||||||
|
|
||||||
const cmds = struct {
|
const cmds = struct {
|
||||||
pub const Target = Self;
|
pub const Target = Self;
|
||||||
const Ctx = command.Context;
|
const Ctx = command.Context;
|
||||||
|
@ -103,17 +122,21 @@ const cmds = struct {
|
||||||
if (!try ctx.args.match(.{tp.extract(&keypress)}))
|
if (!try ctx.args.match(.{tp.extract(&keypress)}))
|
||||||
return error.InvalidArgument;
|
return error.InvalidArgument;
|
||||||
switch (keypress) {
|
switch (keypress) {
|
||||||
'0' => {
|
'0'...'9' => self.insert_char(@intCast(keypress)),
|
||||||
if (self.input) |linenum| self.input = linenum * 10;
|
|
||||||
},
|
|
||||||
'1'...'9' => {
|
|
||||||
const digit: usize = @intCast(keypress - '0');
|
|
||||||
self.input = if (self.input) |x| x * 10 + digit else digit;
|
|
||||||
},
|
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
self.update_mini_mode_text();
|
self.update_mini_mode_text();
|
||||||
self.goto();
|
self.goto();
|
||||||
}
|
}
|
||||||
pub const mini_mode_insert_code_point_meta = .{ .interactive = false };
|
pub const mini_mode_insert_code_point_meta = .{ .interactive = false };
|
||||||
|
|
||||||
|
pub fn mini_mode_insert_bytes(self: *Self, ctx: Ctx) Result {
|
||||||
|
var bytes: []const u8 = undefined;
|
||||||
|
if (!try ctx.args.match(.{tp.extract(&bytes)}))
|
||||||
|
return error.InvalidArgument;
|
||||||
|
self.insert_bytes(bytes);
|
||||||
|
self.update_mini_mode_text();
|
||||||
|
self.goto();
|
||||||
|
}
|
||||||
|
pub const mini_mode_insert_bytes_meta = .{ .interactive = false };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue