]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/loc.go
Add cd and pwd commands to change the working dir
[micro.git] / cmd / micro / loc.go
index 5d3a032a1c1bcdc175da6b7efd8049c825aa0c26..263e0fb36ad5df3a3f0d56457d162a2463a976f2 100644 (file)
@@ -28,6 +28,27 @@ func ToCharPos(start Loc, buf *Buffer) int {
        return loc
 }
 
+// InBounds returns whether the given location is a valid character position in the given buffer
+func InBounds(pos Loc, buf *Buffer) bool {
+       if pos.Y < 0 || pos.Y >= buf.NumLines || pos.X < 0 || pos.X > Count(buf.Line(pos.Y)) {
+               return false
+       }
+
+       return true
+}
+
+// ByteOffset is just like ToCharPos except it counts bytes instead of runes
+func ByteOffset(pos Loc, buf *Buffer) int {
+       x, y := pos.X, pos.Y
+       loc := 0
+       for i := 0; i < y; i++ {
+               // + 1 for the newline
+               loc += len(buf.Line(i)) + 1
+       }
+       loc += len(buf.Line(y)[:x])
+       return loc
+}
+
 // Loc stores a location
 type Loc struct {
        X, Y int
@@ -121,7 +142,7 @@ func (l Loc) Move(n int, buf *Buffer) Loc {
                return l
        }
        for i := 0; i < Abs(n); i++ {
-               return l.left(buf)
+               l = l.left(buf)
        }
        return l
 }