Relocate buffer view after setting options that affect it (#3743)
Some checks failed
Build and Test / test (1.19.x, macos-latest) (push) Has been cancelled
Build and Test / test (1.19.x, ubuntu-latest) (push) Has been cancelled
Build and Test / test (1.19.x, windows-latest) (push) Has been cancelled
Build and Test / test (1.23.x, macos-latest) (push) Has been cancelled
Build and Test / test (1.23.x, ubuntu-latest) (push) Has been cancelled
Build and Test / test (1.23.x, windows-latest) (push) Has been cancelled

Whenever the user changes the value of an option that affects the
calculation of display params in updateDisplayInfo(), we should
immediately recalculate those params and relocate the buffer view
accordingly.

For example: after enabling ruler via `set ruler on`, if the cursor is
currently at the rightmost edge of the bufpane and softwrap is disabled,
then the cursor becomes invisible (since it is now outside the view,
since the buffer view width is decreased as a result of adding the ruler
but StartCol is not updated accordingly), it only becomes visible again
after the user types a character (or performs some other action that
triggers updateDisplayInfo() + relocate). Fix it.
This commit is contained in:
Dmytro Maluka 2025-05-11 16:20:23 +02:00 committed by GitHub
parent 44d0368747
commit 98ff79dbca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -61,6 +61,12 @@ func (w *BufWindow) SetBuffer(b *buffer.Buffer) {
c.LastWrappedVisualX = c.GetVisualX(true) c.LastWrappedVisualX = c.GetVisualX(true)
} }
} }
if option == "diffgutter" || option == "ruler" || option == "scrollbar" ||
option == "statusline" {
w.updateDisplayInfo()
w.Relocate()
}
} }
b.GetVisualX = func(loc buffer.Loc) int { b.GetVisualX = func(loc buffer.Loc) int {
return w.VLocFromLoc(loc).VisualX return w.VLocFromLoc(loc).VisualX