feat: add mouse bindings for jump_back/forward and goto_definition
This commit is contained in:
parent
695b0dbff5
commit
4b2c033c5d
3 changed files with 35 additions and 5 deletions
7
help.md
7
help.md
|
@ -58,7 +58,7 @@ cycle style of editing.
|
|||
- Ctrl-Home, Ctrl-End =>
|
||||
Move to the beginning/end of the file
|
||||
|
||||
- Alt-Left, Alt-Right =>
|
||||
- Alt-Left, Alt-Right, MouseBack, MouseForward =>
|
||||
Jump to previous/next location in the location history
|
||||
|
||||
- Ctrl-f =>
|
||||
|
@ -244,7 +244,10 @@ cycle style of editing.
|
|||
### Language Server Commands
|
||||
|
||||
- F12 =>
|
||||
Goto definition
|
||||
Goto definition of symbol at cursor
|
||||
|
||||
- Alt-MouseLeft =>
|
||||
Goto definition of symbol at click
|
||||
|
||||
### Debugging Commands
|
||||
|
||||
|
|
|
@ -196,6 +196,7 @@ pub const Editor = struct {
|
|||
handlers: EventHandler.List,
|
||||
scroll_dest: usize = 0,
|
||||
fast_scroll: bool = false,
|
||||
jump_mode: bool = false,
|
||||
|
||||
animation_step: usize = 0,
|
||||
animation_frame_rate: i64,
|
||||
|
@ -1540,9 +1541,12 @@ pub const Editor = struct {
|
|||
const primary = self.get_primary();
|
||||
primary.selection = null;
|
||||
self.selection_mode = .char;
|
||||
try self.send_editor_jump_source();
|
||||
const root = self.buf_root() catch return;
|
||||
primary.cursor.move_abs(root, &self.view, @intCast(y), @intCast(x)) catch return;
|
||||
self.clamp_mouse();
|
||||
try self.send_editor_jump_destination();
|
||||
if (self.jump_mode) try self.goto_definition(.{});
|
||||
}
|
||||
|
||||
pub fn primary_double_click(self: *Self, y: c_int, x: c_int) tp.result {
|
||||
|
@ -2709,6 +2713,16 @@ pub const Editor = struct {
|
|||
self.fast_scroll = false;
|
||||
}
|
||||
|
||||
pub fn enable_jump_mode(self: *Self, _: command.Context) tp.result {
|
||||
self.jump_mode = true;
|
||||
tui.current().request_mouse_cursor_pointer(true);
|
||||
}
|
||||
|
||||
pub fn disable_jump_mode(self: *Self, _: command.Context) tp.result {
|
||||
self.jump_mode = false;
|
||||
tui.current().request_mouse_cursor_text(true);
|
||||
}
|
||||
|
||||
fn update_syntax(self: *Self) !void {
|
||||
const frame = tracy.initZone(@src(), .{ .name = "editor update syntax" });
|
||||
defer frame.deinit();
|
||||
|
@ -3348,7 +3362,10 @@ pub const EditorWidget = struct {
|
|||
} else if (try m.match(.{ "A", tp.more })) {
|
||||
self.editor.add_match(m) catch {};
|
||||
} else if (try m.match(.{ "H", tp.extract(&self.hover) })) {
|
||||
tui.current().request_mouse_cursor_text(self.hover);
|
||||
if (self.editor.jump_mode)
|
||||
tui.current().request_mouse_cursor_pointer(self.hover)
|
||||
else
|
||||
tui.current().request_mouse_cursor_text(self.hover);
|
||||
} else if (try m.match(.{ "show_whitespace", tp.extract(&self.editor.show_whitespace) })) {
|
||||
_ = "";
|
||||
} else {
|
||||
|
@ -3365,6 +3382,8 @@ pub const EditorWidget = struct {
|
|||
nc.key.BUTTON3 => &mouse_click_button3,
|
||||
nc.key.BUTTON4 => &mouse_click_button4,
|
||||
nc.key.BUTTON5 => &mouse_click_button5,
|
||||
nc.key.BUTTON8 => &mouse_click_button8, //back
|
||||
nc.key.BUTTON9 => &mouse_click_button9, //forward
|
||||
else => return,
|
||||
})(self, y, x, ypx, xpx);
|
||||
self.last_btn = btn;
|
||||
|
@ -3433,6 +3452,14 @@ pub const EditorWidget = struct {
|
|||
try self.editor.scroll_down_pagedown(.{});
|
||||
}
|
||||
|
||||
fn mouse_click_button8(_: *Self, _: c_int, _: c_int, _: c_int, _: c_int) tp.result {
|
||||
try command.executeName("jump_back", .{});
|
||||
}
|
||||
|
||||
fn mouse_click_button9(_: *Self, _: c_int, _: c_int, _: c_int, _: c_int) tp.result {
|
||||
try command.executeName("jump_forward", .{});
|
||||
}
|
||||
|
||||
pub fn handle_resize(self: *Self, pos: Widget.Box) void {
|
||||
self.plane.move_yx(@intCast(pos.y), @intCast(pos.x)) catch return;
|
||||
self.plane.resize_simple(@intCast(pos.h), @intCast(pos.w)) catch return;
|
||||
|
|
|
@ -72,7 +72,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
if (self.leader) |_| return self.mapFollower(keynormal, egc, modifiers);
|
||||
switch (keypress) {
|
||||
key.LCTRL, key.RCTRL => return self.cmd("enable_fast_scroll", .{}),
|
||||
key.LALT, key.RALT => return self.cmd("enable_fast_scroll", .{}),
|
||||
key.LALT, key.RALT => return self.cmd("enable_jump_mode", .{}),
|
||||
else => {},
|
||||
}
|
||||
return switch (modifiers) {
|
||||
|
@ -237,7 +237,7 @@ fn mapFollower(self: *Self, keypress: u32, _: u32, modifiers: u32) tp.result {
|
|||
fn mapRelease(self: *Self, keypress: u32, _: u32, _: u32) tp.result {
|
||||
return switch (keypress) {
|
||||
key.LCTRL, key.RCTRL => self.cmd("disable_fast_scroll", .{}),
|
||||
key.LALT, key.RALT => self.cmd("disable_fast_scroll", .{}),
|
||||
key.LALT, key.RALT => self.cmd("disable_jump_mode", .{}),
|
||||
else => {},
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue