diff options
Diffstat (limited to 'lua/telescope/previewers.lua')
| -rw-r--r-- | lua/telescope/previewers.lua | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua index f3f6261..e28adce 100644 --- a/lua/telescope/previewers.lua +++ b/lua/telescope/previewers.lua @@ -58,7 +58,7 @@ end local previewer_ns = vim.api.nvim_create_namespace('telescope.previewers') local with_preview_window = function(status, bufnr, callable) - if bufnr and vim.api.nvim_buf_call then + if bufnr and vim.api.nvim_buf_call and false then vim.api.nvim_buf_call(bufnr, callable) else return context_manager.with(function() @@ -365,17 +365,17 @@ previewers.qflist = defaulter(function(opts) } end, {}) --- WIP previewers.help = defaulter(function(_) return previewers.new { preview_fn = function(_, entry, status) with_preview_window(status, nil, function() - local old_tags = vim.o.tags - vim.o.tags = vim.fn.expand("$VIMRUNTIME") .. '/doc/tags' + local special_chars = ":~^.?/%[%]%*" - local taglist = vim.fn.taglist('^' .. entry.value .. '$') + local escaped = vim.fn.escape(entry.value, special_chars) + local tagfile = vim.fn.expand("$VIMRUNTIME") .. '/doc/tags' + local taglist = vim.fn.taglist('^' .. escaped .. '$', tagfile) if vim.tbl_isempty(taglist) then - taglist = vim.fn.taglist(entry.value) + taglist = vim.fn.taglist(escaped, tagfile) end if vim.tbl_isempty(taglist) then @@ -384,15 +384,23 @@ previewers.help = defaulter(function(_) local best_entry = taglist[1] local new_bufnr = vim.fn.bufnr(best_entry.filename, true) - vim.api.nvim_buf_set_option(new_bufnr, 'filetype', 'help') vim.api.nvim_win_set_buf(status.preview_win, new_bufnr) - vim.cmd [["gg"]] - print(best_entry.cmd) - vim.cmd(string.format([[execute "%s"]], best_entry.cmd)) + local search_query = best_entry.cmd + + -- remove leading '/' + search_query = search_query:sub(2) + + -- Set the query to "very nomagic". + -- This should make it work quite nicely given tags. + search_query = [[\V]] .. search_query + + log.trace([[lua vim.fn.search("]], search_query, [[")]]) - vim.o.tags = old_tags + vim.cmd "norm! gg" + vim.fn.search(search_query, "W") + vim.cmd "norm zt" end) end } |
