1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-05 00:59:19 +02:00

fixup! Move to next stageable line after adding a line to a custom patch

This commit is contained in:
Stefan Haller
2025-07-02 15:09:42 +02:00
parent 27ce820442
commit b8ac8d12e6
3 changed files with 26 additions and 12 deletions

View File

@ -115,15 +115,22 @@ func (self *Patch) HunkContainingLine(idx int) int {
return -1
}
// Returns the patch line index of the next change (i.e. addition or deletion).
func (self *Patch) GetNextChangeIdx(idx int) int {
// Returns the patch line index of the next change (i.e. addition or deletion)
// that matches the same "included" state, given the includedLines. If you don't
// care about included states, pass nil for includedLines and false for included.
func (self *Patch) GetNextChangeIdxOfSameIncludedState(idx int, includedLines []int, included bool) (int, bool) {
idx = lo.Clamp(idx, 0, self.LineCount()-1)
lines := self.Lines()
isMatch := func(i int, line *PatchLine) bool {
sameIncludedState := lo.Contains(includedLines, i) == included
return line.isChange() && sameIncludedState
}
for i, line := range lines[idx:] {
if line.isChange() {
return i + idx
if isMatch(i+idx, line) {
return i + idx, true
}
}
@ -131,13 +138,18 @@ func (self *Patch) GetNextChangeIdx(idx int) int {
// return the index of the last change
for i := len(lines) - 1; i >= 0; i-- {
line := lines[i]
if line.isChange() {
return i
if isMatch(i, line) {
return i, true
}
}
// should not be possible
return 0
return 0, false
}
// Returns the patch line index of the next change (i.e. addition or deletion).
func (self *Patch) GetNextChangeIdx(idx int) int {
result, _ := self.GetNextChangeIdxOfSameIncludedState(idx, nil, false)
return result
}
// Returns the length of the patch in lines

View File

@ -155,7 +155,7 @@ func (self *PatchBuildingController) toggleSelection() error {
state.SetLineSelectMode()
}
state.SelectNextStageableLine()
state.SelectNextStageableLineOfSameIncludedState(self.context().GetIncludedLineIndices(), currentLineIsStaged)
return nil
}

View File

@ -325,8 +325,10 @@ func wrapPatchLines(diff string, view *gocui.View) ([]int, []int) {
return viewLineIndices, patchLineIndices
}
func (s *State) SelectNextStageableLine() {
func (s *State) SelectNextStageableLineOfSameIncludedState(includedLines []int, included bool) {
_, lastLineIdx := s.SelectedPatchRange()
patchLineIdx := s.patch.GetNextChangeIdx(lastLineIdx + 1)
s.SelectLine(s.viewLineIndices[patchLineIdx])
patchLineIdx, found := s.patch.GetNextChangeIdxOfSameIncludedState(lastLineIdx+1, includedLines, included)
if found {
s.SelectLine(s.viewLineIndices[patchLineIdx])
}
}