Cursor improvements

This commit is contained in:
Zachary Yedidia
2018-08-27 17:55:28 -04:00
parent 8cf9aa216a
commit 64ce6eebd2
9 changed files with 64 additions and 15 deletions

View File

@@ -48,7 +48,7 @@ func (c *Cursor) Goto(b Cursor) {
// the current cursor its selection too
func (c *Cursor) GotoLoc(l Loc) {
c.X, c.Y = l.X, l.Y
c.LastVisualX = c.GetVisualX()
c.StoreVisualX()
}
// GetVisualX returns the x value of the cursor in visual spaces
@@ -89,11 +89,13 @@ func (c *Cursor) GetCharPosInLine(b []byte, visualPos int) int {
width += runewidth.RuneWidth(r)
}
i++
if width >= visualPos {
if width == visualPos {
i++
}
break
}
i++
}
return i
@@ -155,6 +157,21 @@ func (c *Cursor) DeleteSelection() {
}
}
// Deselect closes the cursor's current selection
// Start indicates whether the cursor should be placed
// at the start or end of the selection
func (c *Cursor) Deselect(start bool) {
if c.HasSelection() {
if start {
c.Loc = c.CurSelection[0]
} else {
c.Loc = c.CurSelection[1]
}
c.ResetSelection()
c.StoreVisualX()
}
}
// GetSelection returns the cursor's selection
func (c *Cursor) GetSelection() []byte {
if InBounds(c.CurSelection[0], c.Buf) && InBounds(c.CurSelection[1], c.Buf) {
@@ -244,7 +261,7 @@ func (c *Cursor) Left() {
c.Up()
c.End()
}
c.LastVisualX = c.GetVisualX()
c.StoreVisualX()
}
// Right moves the cursor right one cell (if possible) or
@@ -259,7 +276,7 @@ func (c *Cursor) Right() {
c.Down()
c.Start()
}
c.LastVisualX = c.GetVisualX()
c.StoreVisualX()
}
// Relocate makes sure that the cursor is inside the bounds
@@ -278,3 +295,7 @@ func (c *Cursor) Relocate() {
c.X = utf8.RuneCount(c.Buf.LineBytes(c.Y))
}
}
func (c *Cursor) StoreVisualX() {
c.LastVisualX = c.GetVisualX()
}