From 73d118dcee5b4bdf34c7eb3be332cb96e168aa62 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 29 Jul 2025 10:02:34 +0200 Subject: [PATCH 1/4] refactor: reduce event matching overhead in filestate widget --- src/tui/status/filestate.zig | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/tui/status/filestate.zig b/src/tui/status/filestate.zig index e9a92e0..9493d07 100644 --- a/src/tui/status/filestate.zig +++ b/src/tui/status/filestate.zig @@ -200,24 +200,34 @@ fn render_terminal_title(self: *Self) void { } pub fn receive(self: *Self, _: *Button.State(Self), _: tp.pid_ref, m: tp.message) error{Exit}!bool { + if (try m.match(.{ "E", tp.more })) + return self.process_event(m); + if (try m.match(.{ "PRJ", "open" })) { + if (!self.file) + self.show_project(); + } + return false; +} + +fn process_event(self: *Self, m: tp.message) error{Exit}!bool { var file_path: []const u8 = undefined; var file_type: []const u8 = undefined; var file_icon: []const u8 = undefined; var file_dirty: bool = undefined; var eol_mode: Buffer.EolModeTag = @intFromEnum(Buffer.EolMode.lf); - if (try m.match(.{ "E", "pos", tp.extract(&self.lines), tp.extract(&self.line), tp.extract(&self.column) })) + if (try m.match(.{ tp.any, "pos", tp.extract(&self.lines), tp.extract(&self.line), tp.extract(&self.column) })) return false; - if (try m.match(.{ "E", "dirty", tp.extract(&file_dirty) })) { + if (try m.match(.{ tp.any, "dirty", tp.extract(&file_dirty) })) { self.file_dirty = file_dirty; - } else if (try m.match(.{ "E", "eol_mode", tp.extract(&eol_mode), tp.extract(&self.utf8_sanitized) })) { + } else if (try m.match(.{ tp.any, "eol_mode", tp.extract(&eol_mode), tp.extract(&self.utf8_sanitized) })) { self.eol_mode = @enumFromInt(eol_mode); - } else if (try m.match(.{ "E", "save", tp.extract(&file_path) })) { + } else if (try m.match(.{ tp.any, "save", tp.extract(&file_path) })) { @memcpy(self.name_buf[0..file_path.len], file_path); self.name = self.name_buf[0..file_path.len]; self.file_exists = true; self.file_dirty = false; self.name = project_manager.abbreviate_home(&self.name_buf, self.name); - } else if (try m.match(.{ "E", "open", tp.extract(&file_path), tp.extract(&self.file_exists), tp.extract(&file_type), tp.extract(&file_icon), tp.extract(&self.file_color) })) { + } else if (try m.match(.{ tp.any, "open", tp.extract(&file_path), tp.extract(&self.file_exists), tp.extract(&file_type), tp.extract(&file_icon), tp.extract(&self.file_color) })) { self.eol_mode = .lf; @memcpy(self.name_buf[0..file_path.len], file_path); self.name = self.name_buf[0..file_path.len]; @@ -229,7 +239,7 @@ pub fn receive(self: *Self, _: *Button.State(Self), _: tp.pid_ref, m: tp.message self.file_dirty = false; self.name = project_manager.abbreviate_home(&self.name_buf, self.name); self.file = true; - } else if (try m.match(.{ "E", "close" })) { + } else if (try m.match(.{ tp.any, "close" })) { self.name = ""; self.lines = 0; self.line = 0; @@ -238,9 +248,6 @@ pub fn receive(self: *Self, _: *Button.State(Self), _: tp.pid_ref, m: tp.message self.file = false; self.eol_mode = .lf; self.show_project(); - } else if (try m.match(.{ "PRJ", "open" })) { - if (!self.file) - self.show_project(); } return false; } From a734a008e1749458c6861a90363ca8da6aa869af Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 29 Jul 2025 10:12:15 +0200 Subject: [PATCH 2/4] fix: refresh git branch status on project switch --- src/tui/status/branch.zig | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/tui/status/branch.zig b/src/tui/status/branch.zig index ce368ef..7f6dfc4 100644 --- a/src/tui/status/branch.zig +++ b/src/tui/status/branch.zig @@ -44,6 +44,7 @@ pub fn create( .on_click = on_click, .on_layout = layout, .on_render = render, + .on_receive = receive, .on_event = event_handler, }); } @@ -60,11 +61,21 @@ pub fn ctx_deinit(self: *Self) void { if (self.behind) |p| self.allocator.free(p); } -fn on_click(_: *Self, _: *Button.State(Self)) void { - git.status(0) catch {}; +fn on_click(self: *Self, _: *Button.State(Self)) void { + self.refresh_git_status(); command.executeName("show_git_status", .{}) catch {}; } +fn refresh_git_status(_: *Self) void { + git.status(0) catch {}; +} + +pub fn receive(self: *Self, _: *Button.State(Self), _: tp.pid_ref, m: tp.message) error{Exit}!bool { + if (try m.match(.{ "PRJ", "open" })) + self.refresh_git_status(); + return false; +} + fn receive_git(self: *Self, _: tp.pid_ref, m: tp.message) MessageFilter.Error!bool { return if (try match(m.buf, .{ "git", more })) self.process_git(m) From bfa851e8860e1e4380c0f15a5761eabca57aa68e Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 29 Jul 2025 10:28:40 +0200 Subject: [PATCH 3/4] feat: add back single key keybinds on home screen (flow mode) --- src/keybind/builtin/flow.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/keybind/builtin/flow.json b/src/keybind/builtin/flow.json index 03f7a9f..97c3cdc 100644 --- a/src/keybind/builtin/flow.json +++ b/src/keybind/builtin/flow.json @@ -249,6 +249,14 @@ "inherit": "project", "on_match_failure": "ignore", "press": [ + ["f", "find_file"], + ["e", "find_file"], + ["n", "create_new_file"], + ["o", "open_file"], + ["r", "open_recent_project"], + ["p", "open_command_palette"], + ["t", "change_theme"], + ["a", "add_task"], ["c", "open_config"], ["g", "open_gui_config"], ["k", "open_keybind_config"], @@ -256,6 +264,9 @@ ["ctrl+f ctrl+f ctrl+f ctrl+f ctrl+f", "home_sheeran"], ["ctrl+shift+r", "restart"], ["f6", "open_config"], + ["v", "open_version_info"], + ["ctrl+q", "quit"], + ["q", "quit"], ["up", "home_menu_up"], ["down", "home_menu_down"], ["enter", "home_menu_activate"] From 6f82b4aaf36176f5adeea6e2dfebabe896ccfdce Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 29 Jul 2025 10:29:06 +0200 Subject: [PATCH 4/4] feat: refresh branch status on file state change events --- src/tui/status/branch.zig | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/tui/status/branch.zig b/src/tui/status/branch.zig index 7f6dfc4..9e4ff44 100644 --- a/src/tui/status/branch.zig +++ b/src/tui/status/branch.zig @@ -71,11 +71,22 @@ fn refresh_git_status(_: *Self) void { } pub fn receive(self: *Self, _: *Button.State(Self), _: tp.pid_ref, m: tp.message) error{Exit}!bool { + if (try m.match(.{ "E", tp.more })) + return self.process_event(m); if (try m.match(.{ "PRJ", "open" })) self.refresh_git_status(); return false; } +fn process_event(self: *Self, m: tp.message) error{Exit}!bool { + if (try m.match(.{ tp.any, "dirty", tp.more }) or + try m.match(.{ tp.any, "save", tp.more }) or + try m.match(.{ tp.any, "open", tp.more }) or + try m.match(.{ tp.any, "close" })) + self.refresh_git_status(); + return false; +} + fn receive_git(self: *Self, _: tp.pid_ref, m: tp.message) MessageFilter.Error!bool { return if (try match(m.buf, .{ "git", more })) self.process_git(m)