Fix horizontal scrolling issue after toggling softwrap on/off

Fixes #645
This commit is contained in:
Dmitry Maluka
2021-03-03 20:51:06 +01:00
parent c960c93a83
commit a1651aec2f
3 changed files with 23 additions and 1 deletions

View File

@@ -189,6 +189,13 @@ type Buffer struct {
cursors []*Cursor
curCursor int
StartCursor Loc
// OptionCallback is called after a buffer option value is changed.
// The display module registers its OptionCallback to ensure the buffer window
// is properly updated when needed. This is a workaround for the fact that
// the buffer module cannot directly call the display's API (it would mean
// a circular dependency between packages).
OptionCallback func(option string, nativeValue interface{})
}
// NewBufferFromFileAtLoc opens a new buffer with a given cursor location

View File

@@ -41,6 +41,10 @@ func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error {
b.Type.Readonly = nativeValue.(bool)
}
if b.OptionCallback != nil {
b.OptionCallback(option, nativeValue)
}
return nil
}

View File

@@ -35,7 +35,8 @@ type BufWindow struct {
func NewBufWindow(x, y, width, height int, buf *buffer.Buffer) *BufWindow {
w := new(BufWindow)
w.View = new(View)
w.X, w.Y, w.Width, w.Height, w.Buf = x, y, width, height, buf
w.X, w.Y, w.Width, w.Height = x, y, width, height
w.SetBuffer(buf)
w.active = true
w.sline = NewStatusLine(w)
@@ -45,6 +46,16 @@ func NewBufWindow(x, y, width, height int, buf *buffer.Buffer) *BufWindow {
func (w *BufWindow) SetBuffer(b *buffer.Buffer) {
w.Buf = b
b.OptionCallback = func(option string, nativeValue interface{}) {
if option == "softwrap" {
if nativeValue.(bool) {
w.StartCol = 0
} else {
w.StartLine.Row = 0
}
w.Relocate()
}
}
}
func (w *BufWindow) GetView() *View {