diff options
Diffstat (limited to '.vim/lua/misc.lua')
| -rw-r--r-- | .vim/lua/misc.lua | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/.vim/lua/misc.lua b/.vim/lua/misc.lua index 7cb2ad9..0c4d191 100644 --- a/.vim/lua/misc.lua +++ b/.vim/lua/misc.lua @@ -18,14 +18,29 @@ function M.file_under_cursor(cb) return M.do_under_cursor('<cfile>', cb) end -function M.open_under_cursor(cmd) +function M.open_under_cursor(cmd, detect_cmd) return M.file_under_cursor(function(txt) + txt = vim.trim(txt) + if not cmd and detect_cmd then + if vim.regex([[^http.*$]]):match_str(txt) then + cmd = 'url-launcher' + end + if vim.regex([[^(\.\./|[\w\d_/\-])*(\.[\w\d]+)?$]]):match_str(txt) then + cmd = ':edit' + end + vim.notify("open_under_cursor: detected command " .. txt .. " => " .. (cmd or "<nil>")) + end if not cmd then vim.fn.inputsave() vim.ui.input('open with: ', function(result) cmd = result end) vim.fn.inputrestore() + if not cmd then return end end - if cmd then + -- detect vim command + if cmd:sub(1, 1) == ":" then + vim.cmd(cmd:sub(2) .. ' ' .. txt) + else + local c c = vim.loop.spawn(cmd, { args = {txt} }, function() c:close() end) end end) @@ -67,4 +82,28 @@ function M.find_files(dirs) require('telescope.builtin').find_files {search_dirs=vim.split(dirs, ',')} end +local function render_link_preview(buf, ln, link) + local j = require('plenary.job'):new({ + command = vim.env.SHELL, + args = {'-c', [[ curl -sSfL ]] .. link .. [[ | grep -iPo '(?<=property="og:title" content=")([^\"]+)(?=")' ]]}, + enable_recording = true, + }) + local results, code = j:sync() + if not code == 0 or #results == 0 then return end + + local ns = vim.api.nvim_create_namespace('') + vim.api.nvim_buf_set_extmark(buf, ns, ln, 0, { + virt_text = {{results[1], 'Error'}}, + virt_text_pos = 'eol' + }) +end +function M.link_preview() + local link = vim.fn.expand('<cfile>') + if not link then return end + + local ln = (vim.api.nvim_win_get_cursor(0)[1]) - 1 + + render_link_preview(0, ln, link) +end + return M |