rename to expand_selection

This commit is contained in:
Mitchell Hashimoto
2024-07-19 14:19:21 -07:00
parent cdeeeb9f88
commit 72d8af5d0b
3 changed files with 92 additions and 85 deletions

View File

@@ -3488,23 +3488,23 @@ pub fn performBindingAction(self: *Surface, action: input.Binding.Action) !bool
.quit => try self.app.setQuit(), .quit => try self.app.setQuit(),
.selection_navigation_left, .selection_navigation_right, .selection_navigation_up, .selection_navigation_down => { .expand_selection => |direction| expand_selection: {
alter_navigation: {
self.renderer_state.mutex.lock(); self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock(); defer self.renderer_state.mutex.unlock();
var screen = &self.io.terminal.screen;
const sel = if (screen.selection) |*sel| sel else break :alter_navigation; const screen = &self.io.terminal.screen;
sel.adjust(screen, switch (action) { const sel = if (screen.selection) |*sel| sel else break :expand_selection;
.selection_navigation_left => .left, sel.adjust(screen, switch (direction) {
.selection_navigation_right => .right, .left => .left,
.selection_navigation_up => .up, .right => .right,
.selection_navigation_down => .down, .up => .up,
.selection_navigation_page_up => .page_up, .down => .down,
.selection_navigation_page_down => .page_down, .page_up => .page_up,
.selection_natigation_home => .home, .page_down => .page_down,
.selection_natigation_end => .end, .home => .home,
else => break :alter_navigation, .end => .end,
}); });
// If the selection endpoint is outside of the current viewpoint, // If the selection endpoint is outside of the current viewpoint,
// scroll it in to view. Note we always specifically use sel.end // scroll it in to view. Note we always specifically use sel.end
// because that is what adjust modifies. // because that is what adjust modifies.
@@ -3524,8 +3524,9 @@ pub fn performBindingAction(self: *Surface, action: input.Binding.Action) !bool
screen.scroll(.{ .pin = target }); screen.scroll(.{ .pin = target });
} }
}
// Queue a render so its shown // Queue a render so its shown
screen.dirty.selection = true;
try self.queueRender(); try self.queueRender();
}, },
} }

View File

@@ -1325,6 +1325,48 @@ pub fn default(alloc_gpa: Allocator) Allocator.Error!Config {
.{ .write_scrollback_file = {} }, .{ .write_scrollback_file = {} },
); );
// Expand Selection
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .left }, .mods = .{ .shift = true } },
.{ .expand_selection = .left },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .right }, .mods = .{ .shift = true } },
.{ .expand_selection = .right },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .up }, .mods = .{ .shift = true } },
.{ .expand_selection = .up },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .down }, .mods = .{ .shift = true } },
.{ .expand_selection = .down },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .page_up }, .mods = .{ .shift = true } },
.{ .expand_selection = .page_up },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .page_down }, .mods = .{ .shift = true } },
.{ .expand_selection = .page_down },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .home }, .mods = .{ .shift = true } },
.{ .expand_selection = .home },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .end }, .mods = .{ .shift = true } },
.{ .expand_selection = .end },
);
// Windowing // Windowing
if (comptime !builtin.target.isDarwin()) { if (comptime !builtin.target.isDarwin()) {
try result.keybind.set.put( try result.keybind.set.put(
@@ -1494,48 +1536,6 @@ pub fn default(alloc_gpa: Allocator) Allocator.Error!Config {
.{ .key = .{ .translated = .insert }, .mods = .{ .shift = true } }, .{ .key = .{ .translated = .insert }, .mods = .{ .shift = true } },
.{ .paste_from_selection = {} }, .{ .paste_from_selection = {} },
); );
// Selection Navigation
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .left }, .mods = .{ .shift = true } },
.{ .selection_navigation_left = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .right }, .mods = .{ .shift = true } },
.{ .selection_navigation_right = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .up }, .mods = .{ .shift = true } },
.{ .selection_navigation_up = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .down }, .mods = .{ .shift = true } },
.{ .selection_navigation_down = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .page_up }, .mods = .{ .shift = true } },
.{ .selection_navigation_page_up = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .page_down }, .mods = .{ .shift = true } },
.{ .selection_navigation_page_down = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .home }, .mods = .{ .shift = true } },
.{ .selection_navigation_home = {} },
);
try result.keybind.set.put(
alloc,
.{ .key = .{ .translated = .end }, .mods = .{ .shift = true } },
.{ .selection_navigation_end = {} },
);
} }
{ {
// Cmd+N for goto tab N // Cmd+N for goto tab N

View File

@@ -169,15 +169,6 @@ pub const Action = union(enum) {
/// enter after to get a new prompt. /// enter after to get a new prompt.
reset: void, reset: void,
selection_navigation_left: void,
selection_navigation_right: void,
selection_navigation_up: void,
selection_navigation_down: void,
selection_navigation_page_up: void,
selection_navigation_page_down: void,
selection_natigation_home: void,
selection_natigation_end: void,
/// Copy and paste. /// Copy and paste.
copy_to_clipboard: void, copy_to_clipboard: void,
paste_from_clipboard: void, paste_from_clipboard: void,
@@ -204,6 +195,10 @@ pub const Action = union(enum) {
scroll_page_fractional: f32, scroll_page_fractional: f32,
scroll_page_lines: i16, scroll_page_lines: i16,
/// Expand an existing selection in a given direction. This action
/// does nothing if there is no active selection.
expand_selection: ExpandSelection,
/// Jump the viewport forward or back by prompt. Positive number is the /// Jump the viewport forward or back by prompt. Positive number is the
/// number of prompts to jump forward, negative is backwards. /// number of prompts to jump forward, negative is backwards.
jump_to_prompt: i16, jump_to_prompt: i16,
@@ -286,6 +281,17 @@ pub const Action = union(enum) {
application: []const u8, application: []const u8,
}; };
pub const ExpandSelection = enum {
left,
right,
up,
down,
page_up,
page_down,
home,
end,
};
pub const SplitDirection = enum { pub const SplitDirection = enum {
right, right,
down, down,