feat: make C-Backspace in open_file delete to previous path segment

This commit is contained in:
CJ van den Berg 2024-08-26 21:55:46 +02:00
parent f1e3165dc3
commit 0c6f7a50b8
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -101,7 +101,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) !void {
'L' => self.cmd("scroll_view_center", .{}), 'L' => self.cmd("scroll_view_center", .{}),
'I' => self.insert_bytes("\t"), 'I' => self.insert_bytes("\t"),
key.SPACE => self.cancel(), key.SPACE => self.cancel(),
key.BACKSPACE => self.file_path.clearRetainingCapacity(), key.BACKSPACE => self.delete_to_previous_path_segment(),
else => {}, else => {},
}, },
mod.ALT => switch (keynormal) { 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)); 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();
}
}