diff --git a/pkg/gui/controllers/status_controller.go b/pkg/gui/controllers/status_controller.go index 4fcb26a7c..4c4384bfd 100644 --- a/pkg/gui/controllers/status_controller.go +++ b/pkg/gui/controllers/status_controller.go @@ -75,6 +75,11 @@ func (self *StatusController) GetMouseKeybindings(opts types.KeybindingsOpts) [] Key: gocui.MouseLeft, Handler: self.onClickMain, }, + { + ViewName: self.Context().GetViewName(), + Key: gocui.MouseLeft, + Handler: self.onClick, + }, } } @@ -95,15 +100,11 @@ func (self *StatusController) GetOnRenderToMain() func() error { } } -func (self *StatusController) GetOnClick() func() error { - return self.onClick -} - func (self *StatusController) Context() types.Context { return self.c.Contexts().Status } -func (self *StatusController) onClick() error { +func (self *StatusController) onClick(opts gocui.ViewMouseBindingOpts) error { // TODO: move into some abstraction (status is currently not a listViewContext where a lot of this code lives) currentBranch := self.c.Helpers().Refs.GetCheckedOutRef() if currentBranch == nil { @@ -115,21 +116,20 @@ func (self *StatusController) onClick() error { return err } - cx, _ := self.c.Views().Status.Cursor() upstreamStatus := presentation.BranchStatus(currentBranch, types.ItemOperationNone, self.c.Tr, time.Now(), self.c.UserConfig) repoName := self.c.Git().RepoPaths.RepoName() workingTreeState := self.c.Git().Status.WorkingTreeState() switch workingTreeState { case enums.REBASE_MODE_REBASING, enums.REBASE_MODE_MERGING: workingTreeStatus := fmt.Sprintf("(%s)", presentation.FormatWorkingTreeStateLower(self.c.Tr, workingTreeState)) - if cursorInSubstring(cx, upstreamStatus+" ", workingTreeStatus) { + if cursorInSubstring(opts.X, upstreamStatus+" ", workingTreeStatus) { return self.c.Helpers().MergeAndRebase.CreateRebaseOptionsMenu() } - if cursorInSubstring(cx, upstreamStatus+" "+workingTreeStatus+" ", repoName) { + if cursorInSubstring(opts.X, upstreamStatus+" "+workingTreeStatus+" ", repoName) { return self.c.Helpers().Repos.CreateRecentReposMenu() } default: - if cursorInSubstring(cx, upstreamStatus+" ", repoName) { + if cursorInSubstring(opts.X, upstreamStatus+" ", repoName) { return self.c.Helpers().Repos.CreateRecentReposMenu() } } diff --git a/pkg/integration/tests/status/click_repo_name_to_open_repos_menu.go b/pkg/integration/tests/status/click_repo_name_to_open_repos_menu.go new file mode 100644 index 000000000..5e1eab092 --- /dev/null +++ b/pkg/integration/tests/status/click_repo_name_to_open_repos_menu.go @@ -0,0 +1,18 @@ +package status + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ClickRepoNameToOpenReposMenu = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Click on the repo name in the status side panel to open the recent repositories menu", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) {}, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Status().Click(1, 0) + t.ExpectPopup().Menu().Title(Equals("Recent repositories")) + }, +}) diff --git a/pkg/integration/tests/status/click_to_focus.go b/pkg/integration/tests/status/click_to_focus.go new file mode 100644 index 000000000..3f20733a1 --- /dev/null +++ b/pkg/integration/tests/status/click_to_focus.go @@ -0,0 +1,35 @@ +package status + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ClickToFocus = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Click in the status side panel to activate it", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) {}, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files().Focus() + t.Views().Main().Lines( + Contains("No changed files"), + ) + + t.Views().Status().Click(0, 0) + t.Views().Status().IsFocused() + t.Views().Main().ContainsLines( + Contains(` _`), + Contains(` | | (_) |`), + Contains(` | | __ _ _____ _ __ _ _| |_`), + Contains(" | |/ _` |_ / | | |/ _` | | __|"), + Contains(` | | (_| |/ /| |_| | (_| | | |_`), + Contains(` |_|\__,_/___|\__, |\__, |_|\__|`), + Contains(` __/ | __/ |`), + Contains(` |___/ |___/`), + Contains(``), + Contains(`Copyright `), + ) + }, +}) diff --git a/pkg/integration/tests/status/click_working_tree_state_to_open_rebase_options_menu.go b/pkg/integration/tests/status/click_working_tree_state_to_open_rebase_options_menu.go new file mode 100644 index 000000000..42f221c54 --- /dev/null +++ b/pkg/integration/tests/status/click_working_tree_state_to_open_rebase_options_menu.go @@ -0,0 +1,27 @@ +package status + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ClickWorkingTreeStateToOpenRebaseOptionsMenu = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Click on the working tree state in the status side panel to open the rebase options menu", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateNCommits(2) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Press(keys.Universal.Edit) + + t.Views().Status(). + Content(Contains("(rebasing) repo")). + Click(1, 0) + + t.ExpectPopup().Menu().Title(Equals("Rebase options")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 1c94e3bbd..bf6264cde 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -23,6 +23,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/integration/tests/reflog" "github.com/jesseduffield/lazygit/pkg/integration/tests/staging" "github.com/jesseduffield/lazygit/pkg/integration/tests/stash" + "github.com/jesseduffield/lazygit/pkg/integration/tests/status" "github.com/jesseduffield/lazygit/pkg/integration/tests/submodule" "github.com/jesseduffield/lazygit/pkg/integration/tests/sync" "github.com/jesseduffield/lazygit/pkg/integration/tests/tag" @@ -257,6 +258,9 @@ var tests = []*components.IntegrationTest{ stash.StashIncludingUntrackedFiles, stash.StashStaged, stash.StashUnstaged, + status.ClickRepoNameToOpenReposMenu, + status.ClickToFocus, + status.ClickWorkingTreeStateToOpenRebaseOptionsMenu, submodule.Add, submodule.Enter, submodule.EnterNested,