diff --git a/pkg/gui/services/custom_commands/session_state_loader.go b/pkg/gui/services/custom_commands/session_state_loader.go index a0e486f13dd..cbd04bb14ad 100644 --- a/pkg/gui/services/custom_commands/session_state_loader.go +++ b/pkg/gui/services/custom_commands/session_state_loader.go @@ -193,9 +193,16 @@ func (self *SessionStateLoader) call() *SessionState { selectedCommit = selectedSubCommit } + selectedPath := self.c.Contexts().Files.GetSelectedPath() + selectedCommitFilePath := self.c.Contexts().CommitFiles.GetSelectedPath() + + if self.c.Context().IsCurrent(self.c.Contexts().CommitFiles) { + selectedPath = selectedCommitFilePath + } + return &SessionState{ SelectedFile: fileShimFromModelFile(self.c.Contexts().Files.GetSelectedFile()), - SelectedPath: self.c.Contexts().Files.GetSelectedPath(), + SelectedPath: selectedPath, SelectedLocalCommit: selectedLocalCommit, SelectedReflogCommit: selectedReflogCommit, SelectedSubCommit: selectedSubCommit, @@ -206,7 +213,7 @@ func (self *SessionStateLoader) call() *SessionState { SelectedTag: tagShimFromModelRemote(self.c.Contexts().Tags.GetSelected()), SelectedStashEntry: stashEntryShimFromModelRemote(self.c.Contexts().Stash.GetSelected()), SelectedCommitFile: commitFileShimFromModelRemote(self.c.Contexts().CommitFiles.GetSelectedFile()), - SelectedCommitFilePath: self.c.Contexts().CommitFiles.GetSelectedPath(), + SelectedCommitFilePath: selectedCommitFilePath, SelectedWorktree: worktreeShimFromModelRemote(self.c.Contexts().Worktrees.GetSelected()), CheckedOutBranch: branchShimFromModelBranch(self.refsHelper.GetCheckedOutRef()), } diff --git a/pkg/integration/tests/custom_commands/selected_path.go b/pkg/integration/tests/custom_commands/selected_path.go new file mode 100644 index 00000000000..f76fb3fbaf2 --- /dev/null +++ b/pkg/integration/tests/custom_commands/selected_path.go @@ -0,0 +1,44 @@ +package custom_commands + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var SelectedPath = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Use the {{ .SelectedPath }} template variable in different contexts", + ExtraCmdArgs: []string{}, + Skip: false, + SetupRepo: func(shell *Shell) { + shell.CreateDir("folder1") + shell.CreateFileAndAdd("folder1/file1", "") + shell.Commit("commit") + shell.CreateDir("folder2") + shell.CreateFile("folder2/file2", "") + }, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.CustomCommands = []config.CustomCommand{ + { + Key: "X", + Context: "global", + Command: "printf '%s' '{{ .SelectedPath }}' > file.txt", + }, + } + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + Focus(). + NavigateToLine(Contains("file2")) + t.GlobalPress("X") + t.FileSystem().FileContent("file.txt", Equals("folder2/file2")) + + t.Views().Commits(). + Focus(). + PressEnter() + t.Views().CommitFiles(). + IsFocused(). + NavigateToLine(Contains("file1")) + t.GlobalPress("X") + t.FileSystem().FileContent("file.txt", Equals("folder1/file1")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 64123ff05be..fc126a94934 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -125,6 +125,7 @@ var tests = []*components.IntegrationTest{ custom_commands.MultipleContexts, custom_commands.MultiplePrompts, custom_commands.SelectedCommit, + custom_commands.SelectedPath, custom_commands.ShowOutputInPanel, custom_commands.SuggestionsCommand, custom_commands.SuggestionsPreset,