mirror of https://gitgud.io/fatchan/micro-jump
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.6 KiB
42 lines
1.6 KiB
-- jumptag - Jump to any function, class or heading with F4. Go, Python, C...
|
|
-- Copyright 2020-2022 Tero Karvinen http://TeroKarvinen.com
|
|
-- https://github.com/terokarvinen/micro-jump
|
|
-- MIT license
|
|
|
|
local config = import("micro/config")
|
|
local shell = import("micro/shell")
|
|
local micro = import("micro")
|
|
local buffer = import("micro/buffer")
|
|
|
|
function init()
|
|
config.MakeCommand("jumptag", jumptagCommand, config.NoComplete)
|
|
config.TryBindKey("F4", "command:jumptag", true)
|
|
config.AddRuntimeFile("jump", config.RTHelp, "help/jump.md")
|
|
end
|
|
|
|
function extractDetails(line)
|
|
local firstWord = line:match("^%S+")
|
|
local filePath = line:match("\t(.-)\t")
|
|
local lineNumber = line:match("line:(%d+)")
|
|
return firstWord, filePath, lineNumber
|
|
end
|
|
|
|
function jumptagCommand(bp) -- bp BufPane
|
|
local filename = bp.Buf.Path
|
|
-- local cmd = string.format("bash -c \"ctags -f - --sort=no --fields=n '%s'|fzf --layout=reverse|tr ':' '\n'|tail -1\"", filename)
|
|
local cmd = string.format("bash -c \"git ls-files | ctags --quiet=yes -L - -f - --fields=n | fzf --layout=reverse \"")
|
|
local out = shell.RunInteractiveShell(cmd, false, true)
|
|
local firstWord, filePath, lineNumber = extractDetails(out)
|
|
if filePath ~= nil and firstWord ~= "" then
|
|
local buf, err = buffer.NewBufferFromFile(filePath)
|
|
if err == nil then
|
|
bp:OpenBuffer(buf)
|
|
end
|
|
else
|
|
micro.InfoBar():Message("Jump cancelled.")
|
|
return
|
|
end
|
|
local linenum = tonumber(lineNumber)-1
|
|
bp.Cursor.Y = linenum
|
|
micro.InfoBar():Message(string.format("Jumped to %s on line %s in file %s", firstWord, lineNumber, filePath))
|
|
end
|
|
|