diff --git a/vis/.config/vis/global-marks.txt b/vis/.config/vis/global-marks.txt new file mode 100644 index 0000000..1229af6 --- /dev/null +++ b/vis/.config/vis/global-marks.txt @@ -0,0 +1,2 @@ +/home/lupan/dotfiles/Makefile:23:22: (PREFIX): make -C dwm install PREFIX="${HOME}/.local" +/home/lupan/dotfiles/Makefile:41:15: (clock): install-lupan-clock: diff --git a/vis/.config/vis/visrc.lua b/vis/.config/vis/visrc.lua index 285a060..a5f6f0a 100644 --- a/vis/.config/vis/visrc.lua +++ b/vis/.config/vis/visrc.lua @@ -48,7 +48,9 @@ local function open_file_pos(line, open_cmd) local file = iter() local line_num = nil_or_tonumber(iter()) local col = nil_or_tonumber(iter()) or 1 - open_file(file, open_cmd) + if open_cmd ~= 'e' or vis.win.file ~= file then + open_file(file, open_cmd) + end if line_num ~= nil then vis.win.selection:to(line_num, col) end @@ -120,6 +122,30 @@ local function fzf_reload(cmd) ' --bind "alt-enter:unbind(change,alt-enter)+change-prompt(2. fzf> )+enable-search+clear-query"' end +local function add_global_mark() + local file = vis.win.file.path + if file ~= nil then + local code, out, err = vis:pipe('vis-menu -p "global mark comment:"', true) + if code == 0 then + local prefix = file .. ':' .. vis.win.selection.line .. ':' .. vis.win.selection.col .. ': ' + local line = vis.win.file.lines[vis.win.selection.line] + out = out:gsub('\n$', '') + if out ~= '' then + prefix = prefix .. '(' .. out .. '): ' + end + out = io.open(os.getenv('HOME') .. '/.config/vis/global-marks.txt', 'a') + out:write(prefix .. line .. '\n') + out:close() + elseif err ~= nil then + vis:info(err) + elseif code ~= 0 then + vis:info('Program exit code ' .. code) + end + else + vis:info('Save file first') + end +end + local ripgrep = 'rg --column --line-number --color=always --smart-case' vis.events.subscribe(vis.events.INIT, function() @@ -154,6 +180,10 @@ vis.events.subscribe(vis.events.INIT, function() search(fzf_reload(ripgrep .. ' -.')) end, 'fzf: rg with hidden files') + vis:map(vis.modes.NORMAL, ' /', function() + search(fzf_reload(ripgrep .. ' --with-filename {q} ' .. escape_and_quoted(vis.win.file.path))) + end, 'fzf: rg current file') + vis:map(vis.modes.NORMAL, ' ff', function() search('fd --type f | fzf') end, 'fzf: files') @@ -236,6 +266,16 @@ vis.events.subscribe(vis.events.INIT, function() vis:command('!yazi') end end, 'yazi in file directory') + + vis:map(vis.modes.NORMAL, ' ma', add_global_mark, 'global marks: add') + + vis:map(vis.modes.NORMAL, ' mj', function() + search('cat ~/.config/vis/global-marks.txt | fzf --tac') + end, 'global marks: jump') + + vis:map(vis.modes.NORMAL, ' me', function() + vis:command('o ~/.config/vis/global-marks.txt') + end, 'global marks: edit') end) vis.events.subscribe(vis.events.WIN_OPEN, function(win)