From 0c6f7a50b8cd5ddd72e2d1d9491f588136af1a98 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Mon, 26 Aug 2024 21:55:46 +0200 Subject: [PATCH] feat: make C-Backspace in open_file delete to previous path segment --- src/tui/mode/mini/open_file.zig | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/tui/mode/mini/open_file.zig b/src/tui/mode/mini/open_file.zig index 613a5fe..706171f 100644 --- a/src/tui/mode/mini/open_file.zig +++ b/src/tui/mode/mini/open_file.zig @@ -101,7 +101,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) !void { 'L' => self.cmd("scroll_view_center", .{}), 'I' => self.insert_bytes("\t"), key.SPACE => self.cancel(), - key.BACKSPACE => self.file_path.clearRetainingCapacity(), + key.BACKSPACE => self.delete_to_previous_path_segment(), else => {}, }, mod.ALT => switch (keynormal) { @@ -206,3 +206,17 @@ fn process_project_manager(self: *Self, m: tp.message) !void { log.logger("open_recent").err("receive", tp.unexpected(m)); } } + +fn delete_to_previous_path_segment(self: *Self) void { + self.complete_trigger_count = 0; + if (self.file_path.items.len == 0) return; + const path = if (self.file_path.items[self.file_path.items.len - 1] == std.fs.path.sep) + self.file_path.items[0 .. self.file_path.items.len - 2] + else + self.file_path.items; + if (std.mem.lastIndexOfScalar(u8, path, std.fs.path.sep)) |pos| { + self.file_path.items.len = pos + 1; + } else { + self.file_path.clearRetainingCapacity(); + } +}