mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 23:56:24 -04:00
Each command a side panel handles in the focused main view needed its own delegation channel: a HasKeybindings getter, an IBaseContext Add method, a BaseContext field + getter, a baseController nil default, and an attach.go registration — roughly five touch points per command. With three commands (click, stage, toggle-patch) that was already a lot of boilerplate, and it doesn't scale to the discard / copy commands coming next. Replace the three channels with one: a side panel exposes a single FocusedMainViewActions interface via GetFocusedMainViewActions (nil when its diff offers no actions), and the controllers implement that interface directly. The stage and toggle-patch handlers, already unified to a plain error return, become one PrimaryAction method whose meaning is the panel's business (stage for the files panel, patch toggle for the commit panels); the click handler becomes OnClick. MainViewController is now a thin dispatcher: fetch the actions from the panel beneath, call the method. Adding a command is now one interface method, an implementation in the two or three controllers, and a keybinding — no plumbing. The toggle-patch channel did double duty as the "this panel builds a custom patch" signal for the inclusion gutter (shown only beneath a patch-building panel, not the staging files panel). Collapsing the channels removes that proxy, so make the classification explicit on DiffMainViewContext, whose marker method now returns a DiffMainViewType (none / staging / patch-building) instead of being a bare marker. The gutter shows only beneath a panel whose type is patch-building (commit files, local commits, sub-commits, stash). Behavior-preserving. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| helpers | ||
| attach.go | ||
| base_controller.go | ||
| basic_commits_controller.go | ||
| bisect_controller.go | ||
| branches_controller.go | ||
| command_log_controller.go | ||
| commit_description_controller.go | ||
| commit_message_controller.go | ||
| commits_files_controller.go | ||
| common.go | ||
| confirmation_controller.go | ||
| context_lines_controller.go | ||
| custom_patch_options_menu_action.go | ||
| diffing_menu_action.go | ||
| edit_config_action.go | ||
| files_controller.go | ||
| filter_controller.go | ||
| filtering_menu_action.go | ||
| git_flow_controller.go | ||
| global_controller.go | ||
| jump_to_side_window_controller.go | ||
| list_controller.go | ||
| list_controller_trait.go | ||
| local_commits_controller.go | ||
| local_commits_controller_test.go | ||
| main_view_controller.go | ||
| menu_controller.go | ||
| menu_key.go | ||
| merge_conflicts_controller.go | ||
| options_menu_action.go | ||
| patch_building_controller.go | ||
| patch_building_from_main_view.go | ||
| patch_explorer_controller.go | ||
| patch_explorer_controller_test.go | ||
| prompt_controller.go | ||
| quit_actions.go | ||
| reflog_commits_controller.go | ||
| remote_branches_controller.go | ||
| remotes_controller.go | ||
| remotes_controller_test.go | ||
| rename_similarity_threshold_controller.go | ||
| screen_mode_actions.go | ||
| scroll_off_margin.go | ||
| scroll_off_margin_test.go | ||
| search_controller.go | ||
| search_prompt_controller.go | ||
| shell_command_action.go | ||
| side_window_controller.go | ||
| snake_controller.go | ||
| staging_controller.go | ||
| stash_controller.go | ||
| status_controller.go | ||
| sub_commits_controller.go | ||
| submodules_controller.go | ||
| suggestions_controller.go | ||
| switch_to_diff_files_controller.go | ||
| switch_to_focused_main_view_controller.go | ||
| switch_to_sub_commits_controller.go | ||
| sync_controller.go | ||
| tags_controller.go | ||
| toggle_whitespace_action.go | ||
| undo_controller.go | ||
| vertical_scroll_controller.go | ||
| workspace_reset_controller.go | ||
| worktrees_controller.go | ||