From 5871583cba93bd1f8b87c9d7dcd5e672ca5c67ff Mon Sep 17 00:00:00 2001 From: Ingo Lohmar Date: Sun, 5 Apr 2026 22:16:22 +0200 Subject: [PATCH 1/3] [BREAKING] drop misleading `move_` from `scroll_{left,right}` This might break existing custom keybindings, so we mark it BREAKING for the release notes. --- src/keybind/builtin/flow.json | 4 ++-- src/tui/editor.zig | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/keybind/builtin/flow.json b/src/keybind/builtin/flow.json index 9ce0934d..4425d51d 100644 --- a/src/keybind/builtin/flow.json +++ b/src/keybind/builtin/flow.json @@ -180,8 +180,8 @@ ["alt+[", "select_prev_sibling", true], ["alt+]", "select_next_sibling", true], ["alt+a", "select_all_siblings"], - ["alt+shift+home", "move_scroll_left"], - ["alt+shift+end", "move_scroll_right"], + ["alt+shift+home", "scroll_left"], + ["alt+shift+end", "scroll_right"], ["alt+shift+up", "add_cursor_up"], ["alt+shift+down", "add_cursor_down"], ["alt+shift+f12", "goto_type_definition"], diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 7748fe53..a1d2a9ff 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -4558,15 +4558,15 @@ pub const Editor = struct { } pub const move_scroll_down_meta: Meta = .{ .description = "Move and scroll down", .arguments = &.{.integer} }; - pub fn move_scroll_left(self: *Self, _: Context) Result { + pub fn scroll_left(self: *Self, _: Context) Result { self.view.move_left(tui.config().scroll_step_horizontal) catch {}; } - pub const move_scroll_left_meta: Meta = .{ .description = "Scroll left" }; + pub const scroll_left_meta: Meta = .{ .description = "Scroll left" }; - pub fn move_scroll_right(self: *Self, _: Context) Result { + pub fn scroll_right(self: *Self, _: Context) Result { self.view.move_right(tui.config().scroll_step_horizontal) catch {}; } - pub const move_scroll_right_meta: Meta = .{ .description = "Scroll right" }; + pub const scroll_right_meta: Meta = .{ .description = "Scroll right" }; pub fn mouse_scroll_left(self: *Self) void { const scroll_step_horizontal = tui.config().scroll_step_horizontal; From 00abd90cd506ce24db58a8af4f5ef7b47dfed427 Mon Sep 17 00:00:00 2001 From: Ingo Lohmar Date: Sun, 5 Apr 2026 22:21:47 +0200 Subject: [PATCH 2/3] add `scroll_{up,down}` commands --- src/tui/editor.zig | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index a1d2a9ff..7ec0366d 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -3007,14 +3007,14 @@ pub const Editor = struct { self.update_animation_step(dest); } - fn scroll_up(self: *Self) void { + fn scroll_up_internal(self: *Self) void { const scroll_step_vertical = tui.config().scroll_step_vertical; var dest_row = self.scroll_dest; dest_row = if (dest_row > scroll_step_vertical) dest_row - scroll_step_vertical else 0; self.update_scroll_dest_abs(dest_row); } - fn scroll_down(self: *Self) void { + fn scroll_down_internal(self: *Self) void { const scroll_step_vertical = tui.config().scroll_step_vertical; var dest_row = self.scroll_dest; dest_row += scroll_step_vertical; @@ -3040,7 +3040,7 @@ pub const Editor = struct { else if (tui.fast_scroll()) self.scroll_pageup() else - self.scroll_up(); + self.scroll_up_internal(); } pub fn mouse_scroll_down(self: *Self) void { @@ -3049,7 +3049,7 @@ pub const Editor = struct { else if (tui.fast_scroll()) self.scroll_pagedown() else - self.scroll_down(); + self.scroll_down_internal(); } pub fn scroll_to(self: *Self, row: usize) void { @@ -4542,6 +4542,16 @@ pub const Editor = struct { } pub const unindent_meta: Meta = .{ .description = "Unindent current line", .arguments = &.{.integer} }; + pub fn scroll_up(self: *Self, _: Context) Result { + self.scroll_up_internal(); + } + pub const scroll_up_meta: Meta = .{ .description = "Scroll up" }; + + pub fn scroll_down(self: *Self, _: Context) Result { + self.scroll_down_internal(); + } + pub const scroll_down_meta: Meta = .{ .description = "Scroll down" }; + pub fn move_scroll_up(self: *Self, ctx: Context) Result { const root = try self.buf_root(); self.with_cursors_const_repeat(root, move_cursor_up, ctx) catch {}; From 5d7323bfe71a35874e795c0041de3f06078e5f80 Mon Sep 17 00:00:00 2001 From: Ingo Lohmar Date: Sun, 5 Apr 2026 23:00:40 +0200 Subject: [PATCH 3/3] args for scroll_{up,down,left,right}; scroll_step_vertical only for mouse --- src/tui/editor.zig | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 7ec0366d..67441531 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -3007,17 +3007,15 @@ pub const Editor = struct { self.update_animation_step(dest); } - fn scroll_up_internal(self: *Self) void { - const scroll_step_vertical = tui.config().scroll_step_vertical; + fn scroll_up_internal(self: *Self, count: usize) void { var dest_row = self.scroll_dest; - dest_row = if (dest_row > scroll_step_vertical) dest_row - scroll_step_vertical else 0; + dest_row -|= count; self.update_scroll_dest_abs(dest_row); } - fn scroll_down_internal(self: *Self) void { - const scroll_step_vertical = tui.config().scroll_step_vertical; + fn scroll_down_internal(self: *Self, count: usize) void { var dest_row = self.scroll_dest; - dest_row += scroll_step_vertical; + dest_row += count; self.update_scroll_dest_abs(dest_row); } @@ -3040,7 +3038,7 @@ pub const Editor = struct { else if (tui.fast_scroll()) self.scroll_pageup() else - self.scroll_up_internal(); + self.scroll_up_internal(tui.config().scroll_step_vertical); } pub fn mouse_scroll_down(self: *Self) void { @@ -3049,7 +3047,7 @@ pub const Editor = struct { else if (tui.fast_scroll()) self.scroll_pagedown() else - self.scroll_down_internal(); + self.scroll_down_internal(tui.config().scroll_step_vertical); } pub fn scroll_to(self: *Self, row: usize) void { @@ -4542,15 +4540,19 @@ pub const Editor = struct { } pub const unindent_meta: Meta = .{ .description = "Unindent current line", .arguments = &.{.integer} }; - pub fn scroll_up(self: *Self, _: Context) Result { - self.scroll_up_internal(); + pub fn scroll_up(self: *Self, ctx: Context) Result { + var count: usize = 1; + _ = ctx.args.match(.{tp.extract(&count)}) catch false; + self.scroll_up_internal(count); } - pub const scroll_up_meta: Meta = .{ .description = "Scroll up" }; + pub const scroll_up_meta: Meta = .{ .description = "Scroll up", .arguments = &.{.integer} }; - pub fn scroll_down(self: *Self, _: Context) Result { - self.scroll_down_internal(); + pub fn scroll_down(self: *Self, ctx: Context) Result { + var count: usize = 1; + _ = ctx.args.match(.{tp.extract(&count)}) catch false; + self.scroll_down_internal(count); } - pub const scroll_down_meta: Meta = .{ .description = "Scroll down" }; + pub const scroll_down_meta: Meta = .{ .description = "Scroll down", .arguments = &.{.integer} }; pub fn move_scroll_up(self: *Self, ctx: Context) Result { const root = try self.buf_root(); @@ -4568,15 +4570,19 @@ pub const Editor = struct { } pub const move_scroll_down_meta: Meta = .{ .description = "Move and scroll down", .arguments = &.{.integer} }; - pub fn scroll_left(self: *Self, _: Context) Result { - self.view.move_left(tui.config().scroll_step_horizontal) catch {}; + pub fn scroll_left(self: *Self, ctx: Context) Result { + var count: usize = 1; + _ = ctx.args.match(.{tp.extract(&count)}) catch false; + self.view.move_left(count) catch {}; } - pub const scroll_left_meta: Meta = .{ .description = "Scroll left" }; + pub const scroll_left_meta: Meta = .{ .description = "Scroll left", .arguments = &.{.integer} }; - pub fn scroll_right(self: *Self, _: Context) Result { - self.view.move_right(tui.config().scroll_step_horizontal) catch {}; + pub fn scroll_right(self: *Self, ctx: Context) Result { + var count: usize = 1; + _ = ctx.args.match(.{tp.extract(&count)}) catch false; + self.view.move_right(count) catch {}; } - pub const scroll_right_meta: Meta = .{ .description = "Scroll right" }; + pub const scroll_right_meta: Meta = .{ .description = "Scroll right", .arguments = &.{.integer} }; pub fn mouse_scroll_left(self: *Self) void { const scroll_step_horizontal = tui.config().scroll_step_horizontal;