-
Notifications
You must be signed in to change notification settings - Fork 0
/
selto.lua
38 lines (29 loc) · 1023 Bytes
/
selto.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
VERSION = "1.0.0"
local micro = import("micro")
local config = import("micro/config")
local buffer = import("micro/buffer")
function init()
config.MakeCommand("selto", selto, NoComplete)
config.AddRuntimeFile("selto", config.RTHelp, "help/selto.md")
end
function selto(bp, args)
if #args < 1 then return end
local buf = bp.Buf
local bufLines = buf:LinesNum()
local cursor = buf:GetActiveCursor()
local currentLine = cursor.Loc.Y
local targetLine = tonumber(args[1])
if targetLine == 0 then return end
if targetLine < 0 then
-- adding 1 to make it behave like goto, -1 takes you to the last line
targetLine = buf:LinesNum() + targetLine + 1
end
if targetLine < currentLine then
targetLine = targetLine - 1
currentLine = currentLine + 1
end
local selStart = buffer.Loc(0, currentLine)
local selEnd = buffer.Loc(0, targetLine)
cursor:SetSelectionStart(selStart)
cursor:SetSelectionEnd(selEnd)
end