Closed leandrochiarini closed 1 year ago
I don't know much about telescope.nvim
unfortunatelly. g:zettel_fzf_command
just sets the grep
like command, so it cannot be used to set a different search frontend. It would be quite a lot of work to add a support for a new tool like FZF, but I can add that code if somebody does it.
Thanks for the quick reply, I do not have much experience with vimscript nor lua, but I will take a try on this, if I manage to pull it off, I will open a pull request. Cheers!
Were you able to find a solution? I would also like to move to telescope but I like vim-zettel too much
I weren't, unfortunately. Hopefully someone will take a look at this issue, because I don't think I will be able to do that in the near future.
I found a telescope plugin that completes file path based on any type of telescope search. After playing around with it, it seems like it would be a good alternative. Here is the link
I've found that you can use the following command to search and open Vimwiki files:
:lua require'telescope.builtin'.find_files {cwd=vim.fn["vimwiki#vars#get_wikilocal"]('path',0)}
The number after path
should be the wiki number, 0
is the default wiki.
I've also took a look at the developer guide, and it seems that it shouldn't be that hard to provide functionality provided by the FZF searcher - you needs only to create actions that will open wiki files, or insert a link.
Here is what I've come with:
local pickers = require "telescope.pickers"
local finders = require "telescope.finders"
local builtin = require "telescope.builtin"
local conf = require("telescope.config").values
local actions = require "telescope.actions"
local previewers = require "telescope.previewers"
local action_state = require "telescope.actions.state"
local Path = require("plenary.path")
-- our picker function: colors
--
local function get_files(dir)
local files = {}
local doc_path = Path:new(dir, "*.*")
local maybe_doc = vim.split(vim.fn.glob(doc_path.filename), "\n")
for _, filepath in ipairs(maybe_doc) do
local file = Path:new(filepath)
if file:is_file() then
files[#files+1] = filepath
end
end
return files
end
local telescope_zettel = function(opts)
opts = opts or {}
-- get the path to Zettelkasen
local dir = vim.g.zettel_dir
if not dir then
vim.fn["zettel#vimwiki#initialize_wiki_number"]()
dir = vim.fn["vimwiki#vars#get_wikilocal"]('path')
end
if not dir then
echo("Cannot find your Zettelkasten. Is the g:zettel_dir variable set?")
return false
end
print(dir)
pickers.new(opts, {
prompt_title = "Zettelkasten",
-- finder = builtin.find_files ({cwd = dir}),
finder = finders.new_table {
results = get_files(dir)
},
sorter = conf.generic_sorter(opts),
-- attach_mappings = function(prompt_bufnr, map)
-- actions.select_default:replace(function()
-- actions.close(prompt_bufnr)
-- local selection = action_state.get_selected_entry()
-- -- print(vim.inspect(selection))
-- -- just insert the filename to the current buffer
-- vim.api.nvim_put({ selection[1] }, "", false, true)
-- end)
-- return true
-- end,
}):find()
end
-- to execute the function
telescope_zettel()
-- colors(require("telescope.themes").get_dropdown{})
I haven't found how to create a preview window yet.
Cool, cheers mate. I'll definitely take a look at it!
I finally had a chance to look into it and I came up with something similar to the existing search.
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local function get_path(prompt_bufnr)
local prompt_bufnr = vim.api.nvim_get_current_buf()
local picker = action_state.get_current_picker(prompt_bufnr)
local entry = action_state.get_selected_entry(prompt_bufnr)
actions.close(prompt_bufnr)
local bufnr = vim.api.nvim_get_current_buf()
local pos = vim.api.nvim_win_get_cursor(0)
local row = pos[1] - 1
local col = pos[2]
local text = string.format("[](%s)", entry.filename)
vim.api.nvim_buf_set_text(bufnr, row, col, row, col, { text })
vim.cmd([[normal! lli]])
end
path_link = function(prompt_bufnr)
return get_path(prompt_bufnr)
end
In the telescope.setup file, you just have to add local path = require("path/to/function")
and then map ["<C-o>"] = path_link
(or any other mapping) to i and n in the telescope setup.
Basically, in any type of telescope search, e.g. files or live_grep, just press ctrl+o when the selection is highlighted in either normal and insert mode and it will automatically create a link like ()[link] at the cursor.
Thanks! This is great!
Hi there, I was wondering if can use Tejlescope.nvim rather that fzf for the ZettelSearchMap and so on? I am aware of the g:zettel_fzf_command variable. But if I understand correctly, this is only for changing the command used by fzf itself.