feat(vim): add some really basic vim commands to the command palette in vim mode
This commit is contained in:
parent
394874fb20
commit
28e9d60c1a
3 changed files with 93 additions and 0 deletions
|
@ -22,6 +22,7 @@ a: Allocator,
|
||||||
input: ArrayList(u8),
|
input: ArrayList(u8),
|
||||||
last_cmd: []const u8 = "",
|
last_cmd: []const u8 = "",
|
||||||
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
||||||
|
commands: Commands = undefined,
|
||||||
|
|
||||||
pub fn create(a: Allocator) !tui.Mode {
|
pub fn create(a: Allocator) !tui.Mode {
|
||||||
const self: *Self = try a.create(Self);
|
const self: *Self = try a.create(Self);
|
||||||
|
@ -29,6 +30,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
.a = a,
|
.a = a,
|
||||||
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
||||||
};
|
};
|
||||||
|
try self.commands.init(self);
|
||||||
return .{
|
return .{
|
||||||
.handler = EventHandler.to_owned(self),
|
.handler = EventHandler.to_owned(self),
|
||||||
.name = root.application_logo ++ "INSERT",
|
.name = root.application_logo ++ "INSERT",
|
||||||
|
@ -38,6 +40,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
|
self.commands.deinit();
|
||||||
self.input.deinit();
|
self.input.deinit();
|
||||||
self.a.destroy(self);
|
self.a.destroy(self);
|
||||||
}
|
}
|
||||||
|
@ -298,3 +301,31 @@ fn cmd_async(self: *Self, name_: []const u8) tp.result {
|
||||||
self.last_cmd = name_;
|
self.last_cmd = name_;
|
||||||
return tp.self_pid().send(.{ "cmd", name_ });
|
return tp.self_pid().send(.{ "cmd", name_ });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Commands = command.Collection(cmds_);
|
||||||
|
const cmds_ = struct {
|
||||||
|
pub const Target = Self;
|
||||||
|
const Ctx = command.Context;
|
||||||
|
|
||||||
|
pub fn @"w"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
self.cmd("save_file", .{}) catch {};
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -23,6 +23,7 @@ input: ArrayList(u8),
|
||||||
last_cmd: []const u8 = "",
|
last_cmd: []const u8 = "",
|
||||||
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
||||||
count: usize = 0,
|
count: usize = 0,
|
||||||
|
commands: Commands = undefined,
|
||||||
|
|
||||||
pub fn create(a: Allocator) !tui.Mode {
|
pub fn create(a: Allocator) !tui.Mode {
|
||||||
const self: *Self = try a.create(Self);
|
const self: *Self = try a.create(Self);
|
||||||
|
@ -30,6 +31,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
.a = a,
|
.a = a,
|
||||||
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
||||||
};
|
};
|
||||||
|
try self.commands.init(self);
|
||||||
return .{
|
return .{
|
||||||
.handler = EventHandler.to_owned(self),
|
.handler = EventHandler.to_owned(self),
|
||||||
.name = root.application_logo ++ "NORMAL",
|
.name = root.application_logo ++ "NORMAL",
|
||||||
|
@ -40,6 +42,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
|
self.commands.deinit();
|
||||||
self.input.deinit();
|
self.input.deinit();
|
||||||
self.a.destroy(self);
|
self.a.destroy(self);
|
||||||
}
|
}
|
||||||
|
@ -602,3 +605,31 @@ const hints = tui.KeybindHints.initComptime(.{
|
||||||
.{ "undo", "u" },
|
.{ "undo", "u" },
|
||||||
.{ "unindent", "S-tab" },
|
.{ "unindent", "S-tab" },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const Commands = command.Collection(cmds_);
|
||||||
|
const cmds_ = struct {
|
||||||
|
pub const Target = Self;
|
||||||
|
const Ctx = command.Context;
|
||||||
|
|
||||||
|
pub fn @"w"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
self.cmd("save_file", .{}) catch {};
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -23,6 +23,7 @@ input: ArrayList(u8),
|
||||||
last_cmd: []const u8 = "",
|
last_cmd: []const u8 = "",
|
||||||
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
leader: ?struct { keypress: u32, modifiers: u32 } = null,
|
||||||
count: usize = 0,
|
count: usize = 0,
|
||||||
|
commands: Commands = undefined,
|
||||||
|
|
||||||
pub fn create(a: Allocator) !tui.Mode {
|
pub fn create(a: Allocator) !tui.Mode {
|
||||||
const self: *Self = try a.create(Self);
|
const self: *Self = try a.create(Self);
|
||||||
|
@ -30,6 +31,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
.a = a,
|
.a = a,
|
||||||
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
.input = try ArrayList(u8).initCapacity(a, input_buffer_size),
|
||||||
};
|
};
|
||||||
|
try self.commands.init(self);
|
||||||
return .{
|
return .{
|
||||||
.handler = EventHandler.to_owned(self),
|
.handler = EventHandler.to_owned(self),
|
||||||
.name = root.application_logo ++ "VISUAL",
|
.name = root.application_logo ++ "VISUAL",
|
||||||
|
@ -40,6 +42,7 @@ pub fn create(a: Allocator) !tui.Mode {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
|
self.commands.deinit();
|
||||||
self.input.deinit();
|
self.input.deinit();
|
||||||
self.a.destroy(self);
|
self.a.destroy(self);
|
||||||
}
|
}
|
||||||
|
@ -562,3 +565,31 @@ const hints = tui.KeybindHints.initComptime(.{
|
||||||
.{ "undo", "u" },
|
.{ "undo", "u" },
|
||||||
.{ "unindent", "S-tab" },
|
.{ "unindent", "S-tab" },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const Commands = command.Collection(cmds_);
|
||||||
|
const cmds_ = struct {
|
||||||
|
pub const Target = Self;
|
||||||
|
const Ctx = command.Context;
|
||||||
|
|
||||||
|
pub fn @"w"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"q!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq"(self: *Self, _: Ctx) tp.result {
|
||||||
|
try self.cmd("save_file", .{});
|
||||||
|
try self.cmd("quit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn @"wq!"(self: *Self, _: Ctx) tp.result {
|
||||||
|
self.cmd("save_file", .{}) catch {};
|
||||||
|
try self.cmd("quit_without_saving", .{});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue