refactor: move mode.event_handler back to input mode

This commit is contained in:
CJ van den Berg 2024-10-27 18:53:24 +01:00
parent d06ebd0dd5
commit 525287c7ac
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
22 changed files with 47 additions and 51 deletions

View file

@ -7,10 +7,8 @@ const EventHandler = @import("EventHandler");
const Allocator = @import("std").mem.Allocator; const Allocator = @import("std").mem.Allocator;
const Mode = @import("../root.zig").Mode; pub fn create(_: Allocator) EventHandler {
return EventHandler.static(@This());
pub fn create(_: Allocator) !Mode {
return .{ .handler = EventHandler.static(@This()) };
} }
pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool { pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool {

View file

@ -7,10 +7,8 @@ const EventHandler = @import("EventHandler");
const Allocator = @import("std").mem.Allocator; const Allocator = @import("std").mem.Allocator;
const Mode = @import("../root.zig").Mode; pub fn create(_: Allocator) EventHandler {
return EventHandler.static(@This());
pub fn create(_: Allocator) !Mode {
return .{ .handler = EventHandler.static(@This()) };
} }
pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool { pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool {

View file

@ -7,10 +7,8 @@ const EventHandler = @import("EventHandler");
const Allocator = @import("std").mem.Allocator; const Allocator = @import("std").mem.Allocator;
const Mode = @import("../root.zig").Mode; pub fn create(_: Allocator) EventHandler {
return EventHandler.static(@This());
pub fn create(_: Allocator) !Mode {
return .{ .handler = EventHandler.static(@This()) };
} }
pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool { pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool {

View file

@ -8,10 +8,8 @@ const EventHandler = @import("EventHandler");
const Allocator = @import("std").mem.Allocator; const Allocator = @import("std").mem.Allocator;
const fmt = @import("std").fmt; const fmt = @import("std").fmt;
const Mode = @import("../root.zig").Mode; pub fn create(_: Allocator) EventHandler {
return EventHandler.static(@This());
pub fn create(_: Allocator) error{OutOfMemory}!Mode {
return .{ .handler = EventHandler.static(@This()) };
} }
pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool { pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool {

View file

@ -7,10 +7,8 @@ const EventHandler = @import("EventHandler");
const Allocator = @import("std").mem.Allocator; const Allocator = @import("std").mem.Allocator;
const Mode = @import("../root.zig").Mode; pub fn create(_: Allocator) EventHandler {
return EventHandler.static(@This());
pub fn create(_: Allocator) !Mode {
return .{ .handler = EventHandler.static(@This()) };
} }
pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool { pub fn receive(_: tp.pid_ref, m: tp.message) error{Exit}!bool {

View file

@ -9,14 +9,17 @@ pub const mode = struct {
}; };
pub const Mode = struct { pub const Mode = struct {
handler: EventHandler, input_handler: EventHandler,
event_handler: ?EventHandler = null,
name: []const u8 = "", name: []const u8 = "",
line_numbers: enum { absolute, relative } = .absolute, line_numbers: enum { absolute, relative } = .absolute,
keybind_hints: ?*const KeybindHints = null, keybind_hints: ?*const KeybindHints = null,
cursor_shape: renderer.CursorShape = .block, cursor_shape: renderer.CursorShape = .block,
pub fn deinit(self: *Mode) void { pub fn deinit(self: *Mode) void {
self.handler.deinit(); self.input_handler.deinit();
if (self.event_handler) |eh| eh.deinit();
} }
}; };

View file

@ -29,7 +29,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
.input = try ArrayList(u8).initCapacity(allocator, input_buffer_size), .input = try ArrayList(u8).initCapacity(allocator, input_buffer_size),
}; };
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = root.application_name, .name = root.application_name,
.keybind_hints = &hints, .keybind_hints = &hints,
}; };

View file

@ -30,7 +30,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "INS", .name = "INS",
.line_numbers = if (tui.current().config.vim_insert_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_insert_gutter_line_numbers_relative) .relative else .absolute,
.cursor_shape = .beam, .cursor_shape = .beam,

View file

@ -31,7 +31,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "NOR", .name = "NOR",
.line_numbers = if (tui.current().config.vim_normal_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_normal_gutter_line_numbers_relative) .relative else .absolute,
.keybind_hints = &hints, .keybind_hints = &hints,

View file

@ -31,7 +31,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "SEL", .name = "SEL",
.line_numbers = if (tui.current().config.vim_visual_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_visual_gutter_line_numbers_relative) .relative else .absolute,
.keybind_hints = &hints, .keybind_hints = &hints,

View file

@ -22,7 +22,7 @@ pub fn create(allocator: std.mem.Allocator) !tui.Mode {
.allocator = allocator, .allocator = allocator,
}; };
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = root.application_name, .name = root.application_name,
.keybind_hints = &hints, .keybind_hints = &hints,
}; };

View file

@ -39,7 +39,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "INSERT", .name = "INSERT",
.line_numbers = if (tui.current().config.vim_insert_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_insert_gutter_line_numbers_relative) .relative else .absolute,
.cursor_shape = .beam, .cursor_shape = .beam,

View file

@ -31,7 +31,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "NORMAL", .name = "NORMAL",
.line_numbers = if (tui.current().config.vim_normal_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_normal_gutter_line_numbers_relative) .relative else .absolute,
.keybind_hints = &hints, .keybind_hints = &hints,

View file

@ -31,7 +31,7 @@ pub fn create(allocator: Allocator) !tui.Mode {
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "VISUAL", .name = "VISUAL",
.line_numbers = if (tui.current().config.vim_visual_gutter_line_numbers_relative) .relative else .absolute, .line_numbers = if (tui.current().config.vim_visual_gutter_line_numbers_relative) .relative else .absolute,
.keybind_hints = &hints, .keybind_hints = &hints,

View file

@ -52,9 +52,11 @@ pub fn Create(options: type) type {
if (@hasDecl(options, "restore_state")) if (@hasDecl(options, "restore_state"))
options.restore_state(self) catch {}; options.restore_state(self) catch {};
return .{ return .{
try keybind.mode.mini.file_browser.create(allocator),
.{ .{
.input_handler = keybind.mode.mini.file_browser.create(allocator),
.event_handler = EventHandler.to_owned(self), .event_handler = EventHandler.to_owned(self),
},
.{
.name = options.name(self), .name = options.name(self),
}, },
}; };

View file

@ -48,9 +48,11 @@ pub fn create(allocator: Allocator, _: command.Context) !struct { tui.Mode, tui.
try self.input.appendSlice(text); try self.input.appendSlice(text);
} }
return .{ return .{
try keybind.mode.mini.find.create(allocator),
.{ .{
.input_handler = keybind.mode.mini.find.create(allocator),
.event_handler = EventHandler.to_owned(self), .event_handler = EventHandler.to_owned(self),
},
.{
.name = name, .name = name,
}, },
}; };

View file

@ -42,9 +42,11 @@ pub fn create(allocator: Allocator, _: command.Context) !struct { tui.Mode, tui.
self.input = self.buf[0..text.len]; self.input = self.buf[0..text.len];
}; };
return .{ return .{
try keybind.mode.mini.find_in_files.create(allocator),
.{ .{
.input_handler = keybind.mode.mini.find_in_files.create(allocator),
.event_handler = EventHandler.to_owned(self), .event_handler = EventHandler.to_owned(self),
},
.{
.name = name, .name = name,
}, },
}; };

View file

@ -33,9 +33,11 @@ pub fn create(allocator: Allocator, _: command.Context) !struct { tui.Mode, tui.
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
try keybind.mode.mini.goto.create(allocator),
.{ .{
.input_handler = keybind.mode.mini.goto.create(allocator),
.event_handler = EventHandler.to_owned(self), .event_handler = EventHandler.to_owned(self),
},
.{
.name = name, .name = name,
}, },
}; };

View file

@ -45,9 +45,11 @@ pub fn create(allocator: Allocator, ctx: command.Context) !struct { tui.Mode, tu
}; };
try self.commands.init(self); try self.commands.init(self);
return .{ return .{
try keybind.mode.mini.move_to_char.create(allocator),
.{ .{
.input_handler = keybind.mode.mini.move_to_char.create(allocator),
.event_handler = EventHandler.to_owned(self), .event_handler = EventHandler.to_owned(self),
},
.{
.name = self.name(), .name = self.name(),
}, },
}; };

View file

@ -62,7 +62,7 @@ pub fn create(allocator: std.mem.Allocator) !tui.Mode {
try mv.floating_views.add(self.modal.widget()); try mv.floating_views.add(self.modal.widget());
try mv.floating_views.add(self.menu.container_widget); try mv.floating_views.add(self.menu.container_widget);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = "󰈞 open recent", .name = "󰈞 open recent",
}; };
} }

View file

@ -84,7 +84,7 @@ pub fn Create(options: type) type {
try mv.floating_views.add(self.modal.widget()); try mv.floating_views.add(self.modal.widget());
try mv.floating_views.add(self.menu.container_widget); try mv.floating_views.add(self.menu.container_widget);
return .{ return .{
.handler = EventHandler.to_owned(self), .input_handler = EventHandler.to_owned(self),
.name = options.name, .name = options.name,
}; };
} }

View file

@ -272,8 +272,6 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) !void {
} }
if (try m.match(.{ "system_clipboard", tp.string })) { if (try m.match(.{ "system_clipboard", tp.string })) {
if (self.mini_mode) |mode| if (mode.event_handler) |eh|
return eh.send(tp.self_pid(), m) catch |e| self.logger.err("clipboard handler", e);
if (self.active_event_handler()) |eh| if (self.active_event_handler()) |eh|
eh.send(tp.self_pid(), m) catch |e| self.logger.err("clipboard handler", e); eh.send(tp.self_pid(), m) catch |e| self.logger.err("clipboard handler", e);
return; return;
@ -394,9 +392,8 @@ fn render(self: *Self) void {
} }
fn active_event_handler(self: *Self) ?EventHandler { fn active_event_handler(self: *Self) ?EventHandler {
if (self.mini_mode) |mm| if (mm.event_handler) |eh| return eh; const mode = self.input_mode orelse return null;
if (self.input_mode) |im| return im.handler; return mode.event_handler orelse mode.input_handler;
return null;
} }
fn dispatch_flush_input_event(self: *Self) !void { fn dispatch_flush_input_event(self: *Self) !void {
@ -419,7 +416,7 @@ fn dispatch_input(ctx: *anyopaque, cbor_msg: []const u8) void {
}) })
return; return;
if (self.input_mode) |mode| if (self.input_mode) |mode|
mode.handler.send(from, m) catch |e| self.logger.err("input handler", e); mode.input_handler.send(from, m) catch |e| self.logger.err("input handler", e);
} }
fn dispatch_mouse(ctx: *anyopaque, y: c_int, x: c_int, cbor_msg: []const u8) void { fn dispatch_mouse(ctx: *anyopaque, y: c_int, x: c_int, cbor_msg: []const u8) void {
@ -753,26 +750,22 @@ const cmds = struct {
pub fn exit_mini_mode(self: *Self, _: Ctx) Result { pub fn exit_mini_mode(self: *Self, _: Ctx) Result {
if (self.mini_mode) |_| {} else return; if (self.mini_mode) |_| {} else return;
defer {
self.input_mode = self.input_mode_outer;
self.input_mode_outer = null;
self.mini_mode = null;
}
if (self.input_mode) |*mode| mode.deinit(); if (self.input_mode) |*mode| mode.deinit();
if (self.mini_mode) |*mode| if (mode.event_handler) |*event_handler| event_handler.deinit(); self.input_mode = self.input_mode_outer;
self.input_mode_outer = null;
self.mini_mode = null;
} }
pub const exit_mini_mode_meta = .{ .interactive = false }; pub const exit_mini_mode_meta = .{ .interactive = false };
}; };
pub const MiniMode = struct { pub const MiniMode = struct {
event_handler: ?EventHandler = null,
name: []const u8, name: []const u8,
text: []const u8 = "", text: []const u8 = "",
cursor: ?usize = null, cursor: ?usize = null,
}; };
pub const Mode = keybind.Mode; pub const Mode = keybind.Mode;
pub const KeybindHints = std.static_string_map.StaticStringMap([]const u8); pub const KeybindHints = keybind.KeybindHints;
threadlocal var instance_: ?*Self = null; threadlocal var instance_: ?*Self = null;