jesseduffield.lazygit/pkg/gui/controllers
Stefan Haller cbf220c497 Read lines based on scroll position instead of a fixed per-notch delta
When scrolling a lazy-loaded view (a diff in the main view, the command
log, etc.), we top up the view's line buffer by reading more lines from
the still-running task. This was driven by asking the task to read a
fixed number of *additional* lines on every scroll event, which had two
problems:

- It was decoupled from the scroll position. Scrolling down, back up,
  and down again re-read lines that had already been read, so the buffer
  crept towards the end of the input regardless of where the user
  actually scrolled.

- A single wheel notch only bought a single notch worth of runway, so
  fast scrolling constantly outran the reader and had to wait for the
  next read (and re-render) on every notch.

Make ReadLines take an absolute target total instead of a delta: the
task tracks how many lines it has read and only reads the shortfall, so
requests are idempotent. Callers now ask to fill the viewport at the
current scroll position plus a few screenfuls of read-ahead, which gives
scrolling enough runway to stay smooth.

The four call sites all wanted the same "fill this view" computation, so
consolidate them into a single ReadLinesToFillView helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 09:32:35 +02:00
..
helpers Guard the view-render and prompt-dismiss bounces on the generation 2026-07-07 18:10:45 +02:00
attach.go Add OnQuit hook for controllers 2026-04-21 11:25:29 +02:00
base_controller.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
basic_commits_controller.go Move the new-worktree keybinding from worktrees to universal 2026-07-03 18:53:05 +02:00
bisect_controller.go Make RefreshOptions.Then a func() error, queue it via OnUIThread 2026-07-07 18:09:33 +02:00
branches_controller.go Look up the submodule file and branch worktree on the UI thread 2026-07-07 18:10:45 +02:00
command_log_controller.go Remove return value of Focus-related functions 2024-09-06 08:45:48 +02:00
commit_description_controller.go Fold remaining alt bindings into their main fields 2026-05-25 15:32:47 +02:00
commit_message_controller.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
commits_files_controller.go Cancel the commit-file range selection on the UI thread after discard 2026-07-07 18:10:45 +02:00
common.go lots of changes 2023-04-30 13:19:53 +10:00
confirmation_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
context_lines_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
custom_patch_options_menu_action.go Move the pull-patch panel close and focus off the worker 2026-07-07 18:10:45 +02:00
diffing_menu_action.go Remove TrimSpace calls that are no longer needed 2025-11-15 15:38:24 +01:00
edit_config_action.go Extract editConfig into a shared EditConfigAction 2026-06-24 22:03:57 +02:00
files_controller.go Look up the submodule file and branch worktree on the UI thread 2026-07-07 18:10:45 +02:00
filter_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
filtering_menu_action.go Make RefreshOptions.Then a func() error, queue it via OnUIThread 2026-07-07 18:09:33 +02:00
git_flow_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
global_controller.go Add a global keybinding for editing the config file 2026-06-24 22:10:52 +02:00
jump_to_side_window_controller.go Stop requiring jumpToBlock to have exactly five entries 2026-06-23 14:15:18 +02:00
list_controller.go Fold remaining alt bindings into their main fields 2026-05-25 15:32:47 +02:00
list_controller_trait.go Enable nolintlint linter, and fix warnings 2025-06-30 18:30:11 +02:00
local_commits_controller.go Capture commits and set selection on the UI thread for squash/fixup/drop 2026-07-07 18:10:45 +02:00
local_commits_controller_test.go Move isFixupCommit to FixupHelper 2026-01-24 16:04:35 +01:00
main_view_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
menu_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
menu_key.go Use a slice of keys for each binding 2026-05-25 15:18:18 +02:00
merge_conflicts_controller.go Pick both hunks, not the common ancestor, in diff3 conflicts 2026-07-01 09:57:26 +02:00
options_menu_action.go If a menu entry has multiple keybindings, list them in a tooltip 2026-05-25 15:32:47 +02:00
patch_building_controller.go Route merge/rebase result handling to the right refresh entry point 2026-07-07 18:10:45 +02:00
patch_explorer_controller.go Fold remaining alt bindings into their main fields 2026-05-25 15:32:47 +02:00
patch_explorer_controller_test.go Strip the '+' and '-' characters when copying parts of a diff to the clipboard 2025-04-29 11:33:47 +02:00
prompt_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
quit_actions.go Refuse a repo switch while a foreground operation is in flight 2026-07-07 18:09:33 +02:00
reflog_commits_controller.go Fix showing diffs for renamed file when filtering by path 2025-07-27 12:05:41 +02:00
remote_branches_controller.go Move the new-worktree keybinding from worktrees to universal 2026-07-03 18:53:05 +02:00
remotes_controller.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
remotes_controller_test.go feat: add fork remote command 2025-11-16 17:26:00 +01:00
rename_similarity_threshold_controller.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
screen_mode_actions.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
scroll_off_margin.go Replace min/max helpers with built-in min/max 2024-04-07 23:24:10 +08:00
scroll_off_margin_test.go Add tests for scroll-off margin of zero 2023-08-21 08:10:28 +02:00
search_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
search_prompt_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
shell_command_action.go Strip leading/trailing whitespace from prompt input 2025-11-15 15:38:24 +01:00
side_window_controller.go Fold remaining alt bindings into their main fields 2026-05-25 15:32:47 +02:00
snake_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
staging_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
stash_controller.go Move the new-worktree keybinding from worktrees to universal 2026-07-03 18:53:05 +02:00
status_controller.go Extract editConfig into a shared EditConfigAction 2026-06-24 22:03:57 +02:00
sub_commits_controller.go Use async refresh rather than manual OnWorker call 2025-07-02 16:10:04 +02:00
submodules_controller.go Capture the files, reflog, branches and stash refresh inputs 2026-07-07 18:10:45 +02:00
suggestions_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
switch_to_diff_files_controller.go Move post-COMMIT_FILES-refresh work into Then 2026-07-07 18:09:33 +02:00
switch_to_focused_main_view_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
switch_to_sub_commits_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
sync_controller.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
tags_controller.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
toggle_whitespace_action.go Move IgnoreWhitespaceInDiffView to user config 2025-07-09 13:15:03 +02:00
undo_controller.go Capture the commits refresh's inputs on the UI thread 2026-07-07 18:10:45 +02:00
vertical_scroll_controller.go Read lines based on scroll position instead of a fixed per-notch delta 2026-07-09 09:32:35 +02:00
view_selection_controller.go Read lines based on scroll position instead of a fixed per-notch delta 2026-07-09 09:32:35 +02:00
workspace_reset_controller.go Rename Key to Keys in Binding, KeybindingsOpts, and MenuItem 2026-05-25 15:18:18 +02:00
worktrees_controller.go Offer to delete the branch when removing a worktree 2026-07-03 19:04:44 +02:00