diff --git a/internal/buffer/autocomplete.go b/internal/buffer/autocomplete.go index b1c061cd..414e3060 100644 --- a/internal/buffer/autocomplete.go +++ b/internal/buffer/autocomplete.go @@ -69,11 +69,11 @@ func GetWord(b *Buffer) ([]byte, int) { l := b.LineBytes(c.Y) l = util.SliceStart(l, c.X) - if c.X == 0 || util.IsWhitespace(b.RuneAt(c.Loc)) { + if c.X == 0 || util.IsWhitespace(b.RuneAt(c.Loc.Move(-1, b))) { return []byte{}, -1 } - if util.IsNonAlphaNumeric(b.RuneAt(c.Loc)) { + if util.IsNonAlphaNumeric(b.RuneAt(c.Loc.Move(-1, b))) { return []byte{}, c.X } diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index 43be4a81..387b041c 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -511,11 +511,12 @@ func (b *Buffer) RuneAt(loc Loc) rune { for len(line) > 0 { r, _, size := util.DecodeCharacter(line) line = line[size:] - i++ if i == loc.X { return r } + + i++ } } return '\n' diff --git a/internal/buffer/save.go b/internal/buffer/save.go index d037fb92..e912055d 100644 --- a/internal/buffer/save.go +++ b/internal/buffer/save.go @@ -109,7 +109,7 @@ func (b *Buffer) saveToFile(filename string, withSudo bool) error { if b.Settings["eofnewline"].(bool) { end := b.End() - if b.RuneAt(Loc{end.X, end.Y}) != '\n' { + if b.RuneAt(Loc{end.X - 1, end.Y}) != '\n' { b.insert(end, []byte{'\n'}) } }