From 6f6b263d102d37901d4e25e80db9760b924a7d30 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Mon, 26 Aug 2019 21:06:27 -0400 Subject: [PATCH] Add some plugin functions --- cmd/micro/initlua.go | 3 +++ internal/buffer/loc.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/cmd/micro/initlua.go b/cmd/micro/initlua.go index 1c6715e1..17d64cb6 100644 --- a/cmd/micro/initlua.go +++ b/cmd/micro/initlua.go @@ -70,6 +70,8 @@ func luaImportMicroConfig() *lua.LTable { ulua.L.SetField(pkg, "RTSyntax", luar.New(ulua.L, config.RTSyntax)) ulua.L.SetField(pkg, "RTHelp", luar.New(ulua.L, config.RTHelp)) ulua.L.SetField(pkg, "RTPlugin", luar.New(ulua.L, config.RTPlugin)) + ulua.L.SetField(pkg, "RegisterCommonOption", luar.New(ulua.L, config.RegisterCommonOption)) + ulua.L.SetField(pkg, "RegisterGlobalOption", luar.New(ulua.L, config.RegisterGlobalOption)) return pkg } @@ -111,6 +113,7 @@ func luaImportMicroBuffer() *lua.LTable { ulua.L.SetField(pkg, "NewBufferFromFile", luar.New(ulua.L, func(path string) (*buffer.Buffer, error) { return buffer.NewBufferFromFile(path, buffer.BTDefault) })) + ulua.L.SetField(pkg, "ByteOffset", luar.New(ulua.L, buffer.ByteOffset)) return pkg } diff --git a/internal/buffer/loc.go b/internal/buffer/loc.go index 0fa682b1..89db7b89 100644 --- a/internal/buffer/loc.go +++ b/internal/buffer/loc.go @@ -123,3 +123,15 @@ func (l Loc) Diff(a, b Loc, buf *Buffer) int { func (l Loc) Move(n int, buf *Buffer) Loc { return l.MoveLA(n, buf.LineArray) } + +// 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 +}