From f7772f00c47a2ea2853abd37b4a9c25dcbb78a95 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Fri, 2 Apr 2021 01:31:23 +1100 Subject: [PATCH] do not jump cursor around when fixing merge conflicts --- pkg/gui/files_panel.go | 17 ++++++++++++++++- pkg/gui/filetree/file_manager.go | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index f872b8ab2..f7edb2b25 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -554,7 +554,22 @@ func (gui *Gui) refreshStateFiles() error { if selectedNode != nil { newIdx := gui.findNewSelectedIdx(prevNodes[prevSelectedLineIdx:], gui.State.FileManager.GetAllItems()) if newIdx != -1 && newIdx != prevSelectedLineIdx { - gui.State.Panels.Files.SelectedLineIdx = newIdx + newNode := gui.State.FileManager.GetItemAtIndex(newIdx) + // when not in tree mode, we show merge conflict files at the top, so you + // can work through them one by one without having to sift through a large + // set of files. If you have just fixed the merge conflicts of a file, we + // actually don't want to jump to that file's new position, because that + // file will now be ages away amidst the other files without merge + // conflicts: the user in this case would rather work on the next file + // with merge conflicts, which will have moved up to fill the gap left by + // the last file, meaning the cursor doesn't need to move at all. + leaveCursor := !gui.State.FileManager.InTreeMode() && newNode != nil && + selectedNode.File != nil && selectedNode.File.HasMergeConflicts && + newNode.File != nil && !newNode.File.HasMergeConflicts + + if !leaveCursor { + gui.State.Panels.Files.SelectedLineIdx = newIdx + } } } diff --git a/pkg/gui/filetree/file_manager.go b/pkg/gui/filetree/file_manager.go index 11504430b..f2e828a61 100644 --- a/pkg/gui/filetree/file_manager.go +++ b/pkg/gui/filetree/file_manager.go @@ -23,6 +23,10 @@ func NewFileManager(files []*models.File, log *logrus.Entry, showTree bool) *Fil } } +func (m *FileManager) InTreeMode() bool { + return m.showTree +} + func (m *FileManager) ExpandToPath(path string) { m.collapsedPaths.ExpandToPath(path) }