diff --git a/src/tui/mode/helix.zig b/src/tui/mode/helix.zig new file mode 100644 index 0000000..162a7ef --- /dev/null +++ b/src/tui/mode/helix.zig @@ -0,0 +1,52 @@ +const std = @import("std"); +const command = @import("command"); +const cmd = command.executeName; + +var commands: Commands = undefined; + +pub fn init() !void { + var v: void = {}; + try commands.init(&v); +} + +pub fn deinit() void { + commands.deinit(); +} + +const Commands = command.Collection(cmds_); +const cmds_ = struct { + pub const Target = void; + const Ctx = command.Context; + const Result = command.Result; + + pub fn w(_: *void, _: Ctx) Result { + try cmd("save_file", .{}); + } + pub const w_meta = .{ .description = "w (write file)" }; + + pub fn q(_: *void, _: Ctx) Result { + try cmd("quit", .{}); + } + pub const q_meta = .{ .description = "q (quit)" }; + + pub fn @"q!"(_: *void, _: Ctx) Result { + try cmd("quit_without_saving", .{}); + } + pub const @"q!_meta" = .{ .description = "q! (quit without saving)" }; + + pub fn wq(_: *void, _: Ctx) Result { + try cmd("save_file", command.fmt(.{ "then", .{ "quit", .{} } })); + } + pub const wq_meta = .{ .description = "wq (write file and quit)" }; + + pub fn o(_: *void, _: Ctx) Result { + try cmd("open_file", .{}); + } + pub const o_meta = .{ .description = "o (open file)" }; + + pub fn @"wq!"(_: *void, _: Ctx) Result { + cmd("save_file", .{}) catch {}; + try cmd("quit_without_saving", .{}); + } + pub const @"wq!_meta" = .{ .description = "wq! (write file and quit without saving)" }; +}; diff --git a/src/tui/mode/vim.zig b/src/tui/mode/vim.zig new file mode 100644 index 0000000..34438a4 --- /dev/null +++ b/src/tui/mode/vim.zig @@ -0,0 +1,47 @@ +const std = @import("std"); +const command = @import("command"); +const cmd = command.executeName; + +var commands: Commands = undefined; + +pub fn init() !void { + var v: void = {}; + try commands.init(&v); +} + +pub fn deinit() void { + commands.deinit(); +} + +const Commands = command.Collection(cmds_); +const cmds_ = struct { + pub const Target = void; + const Ctx = command.Context; + const Result = command.Result; + + pub fn w(_: *void, _: Ctx) Result { + try cmd("save_file", .{}); + } + pub const w_meta = .{ .description = "w (write file)" }; + + pub fn q(_: *void, _: Ctx) Result { + try cmd("quit", .{}); + } + pub const q_meta = .{ .description = "q (quit)" }; + + pub fn @"q!"(_: *void, _: Ctx) Result { + try cmd("quit_without_saving", .{}); + } + pub const @"q!_meta" = .{ .description = "q! (quit without saving)" }; + + pub fn wq(_: *void, _: Ctx) Result { + try cmd("save_file", command.fmt(.{ "then", .{ "quit", .{} } })); + } + pub const wq_meta = .{ .description = "wq (write file and quit)" }; + + pub fn @"wq!"(_: *void, _: Ctx) Result { + cmd("save_file", .{}) catch {}; + try cmd("quit_without_saving", .{}); + } + pub const @"wq!_meta" = .{ .description = "wq! (write file and quit without saving)" }; +}; diff --git a/src/tui/tui.zig b/src/tui/tui.zig index 9b1b2ea..88ec008 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -876,6 +876,26 @@ const cmds = struct { try tp.self_pid().send_raw(.{ .buf = msg_cb.items }); } pub const run_async_meta = .{}; + + pub fn enter_vim_mode(_: *Self, _: Ctx) Result { + try @import("mode/vim.zig").init(); + } + pub const enter_vim_mode_meta = .{}; + + pub fn exit_vim_mode(_: *Self, _: Ctx) Result { + @import("mode/vim.zig").deinit(); + } + pub const exit_vim_mode_meta = .{}; + + pub fn enter_helix_mode(_: *Self, _: Ctx) Result { + try @import("mode/helix.zig").init(); + } + pub const enter_helix_mode_meta = .{}; + + pub fn exit_helix_mode(_: *Self, _: Ctx) Result { + @import("mode/helix.zig").deinit(); + } + pub const exit_helix_mode_meta = .{}; }; pub const MiniMode = struct {