X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=cmd%2Fmicro%2Fcursor.go;h=452268ba12b1f3802623be7fca8c5d33097e81e0;hb=71af765b4e4f368c4bbbcb3947f3497e17271b62;hp=a4a243d12798b5becc886a1e8dba013ecaf2bf43;hpb=812b547679d803a233261c1e5f8a95dfebd9f41e;p=micro.git diff --git a/cmd/micro/cursor.go b/cmd/micro/cursor.go index a4a243d1..452268ba 100644 --- a/cmd/micro/cursor.go +++ b/cmd/micro/cursor.go @@ -28,13 +28,22 @@ type Cursor struct { Num int } -// Goto puts the cursor at the given cursor's location and gives the current cursor its selection too +// Goto puts the cursor at the given cursor's location and gives +// the current cursor its selection too func (c *Cursor) Goto(b Cursor) { c.X, c.Y, c.LastVisualX = b.X, b.Y, b.LastVisualX c.OrigSelection, c.CurSelection = b.OrigSelection, b.CurSelection } -// CopySelection copies the user's selection to either "primary" or "clipboard" +// GotoLoc puts the cursor at the given cursor's location and gives +// the current cursor its selection too +func (c *Cursor) GotoLoc(l Loc) { + c.X, c.Y = l.X, l.Y + c.LastVisualX = c.GetVisualX() +} + +// CopySelection copies the user's selection to either "primary" +// or "clipboard" func (c *Cursor) CopySelection(target string) { if c.HasSelection() { if target != "primary" || c.buf.Settings["useprimary"].(bool) { @@ -151,7 +160,8 @@ func (c *Cursor) SelectWord() { c.Loc = c.CurSelection[1] } -// AddWordToSelection adds the word the cursor is currently on to the selection +// AddWordToSelection adds the word the cursor is currently on +// to the selection func (c *Cursor) AddWordToSelection() { if c.Loc.GreaterThan(c.OrigSelection[0]) && c.Loc.LessThan(c.OrigSelection[1]) { c.CurSelection = c.OrigSelection @@ -183,7 +193,8 @@ func (c *Cursor) AddWordToSelection() { c.Loc = c.CurSelection[1] } -// SelectTo selects from the current cursor location to the given location +// SelectTo selects from the current cursor location to the given +// location func (c *Cursor) SelectTo(loc Loc) { if loc.GreaterThan(c.OrigSelection[0]) { c.SetSelectionStart(c.OrigSelection[0]) @@ -280,7 +291,8 @@ func (c *Cursor) Down() { c.DownN(1) } -// Left moves the cursor left one cell (if possible) or to the last line if it is at the beginning +// Left moves the cursor left one cell (if possible) or to +// the previous line if it is at the beginning func (c *Cursor) Left() { if c.Loc == c.buf.Start() { return @@ -294,7 +306,8 @@ func (c *Cursor) Left() { c.LastVisualX = c.GetVisualX() } -// Right moves the cursor right one cell (if possible) or to the next line if it is at the end +// Right moves the cursor right one cell (if possible) or +// to the next line if it is at the end func (c *Cursor) Right() { if c.Loc == c.buf.End() { return @@ -320,7 +333,21 @@ func (c *Cursor) Start() { c.LastVisualX = c.GetVisualX() } -// GetCharPosInLine gets the char position of a visual x y coordinate (this is necessary because tabs are 1 char but 4 visual spaces) +// StartOfText moves the cursor to the first non-whitespace rune of +// the line it is on +func (c *Cursor) StartOfText() { + c.Start() + for IsWhitespace(c.RuneUnder(c.X)) { + if c.X == Count(c.buf.Line(c.Y)) { + break + } + c.Right() + } +} + +// GetCharPosInLine gets the char position of a visual x y +// coordinate (this is necessary because tabs are 1 char but +// 4 visual spaces) func (c *Cursor) GetCharPosInLine(lineNum, visualPos int) int { // Get the tab size tabSize := int(c.buf.Settings["tabsize"].(float64)) @@ -355,8 +382,9 @@ func (c *Cursor) StoreVisualX() { c.LastVisualX = c.GetVisualX() } -// Relocate makes sure that the cursor is inside the bounds of the buffer -// If it isn't, it moves it to be within the buffer's lines +// Relocate makes sure that the cursor is inside the bounds +// of the buffer If it isn't, it moves it to be within the +// buffer's lines func (c *Cursor) Relocate() { if c.Y < 0 { c.Y = 0