]> git.lizzy.rs Git - micro.git/commitdiff
Support line:col in JumpLine
authorZachary Yedidia <zyedidia@gmail.com>
Thu, 18 Jan 2018 00:09:50 +0000 (19:09 -0500)
committerZachary Yedidia <zyedidia@gmail.com>
Thu, 18 Jan 2018 00:09:50 +0000 (19:09 -0500)
Closes #1000

cmd/micro/actions.go

index 3a8b89dca62534d8345934f815f7d4ec4d527ee2..a9a34aa01a6e458d64aebab47594e4de23bc0d7e 100644 (file)
@@ -1623,21 +1623,38 @@ func (v *View) JumpLine(usePlugin bool) bool {
        }
 
        // Prompt for line number
-       message := fmt.Sprintf("Jump to line (1 - %v) # ", v.Buf.NumLines)
-       linestring, canceled := messenger.Prompt(message, "", "LineNumber", NoCompletion)
+       message := fmt.Sprintf("Jump to line:col (1 - %v) # ", v.Buf.NumLines)
+       input, canceled := messenger.Prompt(message, "", "LineNumber", NoCompletion)
        if canceled {
                return false
        }
-       lineint, err := strconv.Atoi(linestring)
-       lineint = lineint - 1 // fix offset
-       if err != nil {
-               messenger.Error(err) // return errors
-               return false
+       var lineInt int
+       var colInt int
+       var err error
+       if strings.Contains(input, ":") {
+               split := strings.Split(input, ":")
+               lineInt, err = strconv.Atoi(split[0])
+               if err != nil {
+                       messenger.Message("Invalid line number")
+                       return false
+               }
+               colInt, err = strconv.Atoi(split[1])
+               if err != nil {
+                       messenger.Message("Invalid column number")
+                       return false
+               }
+       } else {
+               lineInt, err = strconv.Atoi(input)
+               if err != nil {
+                       messenger.Message("Invalid line number")
+                       return false
+               }
        }
+       lineInt--
        // Move cursor and view if possible.
-       if lineint < v.Buf.NumLines && lineint >= 0 {
-               v.Cursor.X = 0
-               v.Cursor.Y = lineint
+       if lineInt < v.Buf.NumLines && lineInt >= 0 {
+               v.Cursor.X = colInt
+               v.Cursor.Y = lineInt
 
                if usePlugin {
                        return PostActionCall("JumpLine", v)