diff --git a/global/.config/nvim/lua/plugins/telescope.lua b/global/.config/nvim/lua/plugins/telescope.lua index 074a135..e98ec09 100644 --- a/global/.config/nvim/lua/plugins/telescope.lua +++ b/global/.config/nvim/lua/plugins/telescope.lua @@ -1,18 +1,7 @@ local mapvimkey = require("utils.keymapper").mapvimkey +local copy_filename_to_clipboard = require("utils.telescope_addons").copy_filename_to_clipboard local config = function() - local actions = require("telescope.actions") - local action_state = require("telescope.actions.state") - -- copy file name from search - local copy_filename_to_clipboard = function(prompt_bufnr) - local selection = action_state.get_selected_entry() - local filename_part = vim.split(selection.value, ":")[1] - vim.fn.setreg("*", filename_part) - vim.fn.setreg("+", filename_part) - print("Copied filename: " .. filename_part) - actions.close(prompt_bufnr) - end - local telescope = require("telescope") telescope.setup({ defaults = { diff --git a/global/.config/nvim/lua/utils/telescope_addons.lua b/global/.config/nvim/lua/utils/telescope_addons.lua new file mode 100644 index 0000000..bb6a5ab --- /dev/null +++ b/global/.config/nvim/lua/utils/telescope_addons.lua @@ -0,0 +1,55 @@ +local action_state = require("telescope.actions.state") +local actions = require("telescope.actions") +local mapvimkey = require("utils.keymapper").mapvimkey + +local M = {} + +local function paste_titled_link() + return function(prompt_bufnr) + actions.close(prompt_bufnr) + local selection = action_state.get_selected_entry() + local parts = vim.split(selection.value, ":") + local filename_part = parts[1] + local title = parts[#parts]:match("^%s*(.-)%s*$") + local link = "[" .. title .. "](" .. filename_part .. ")" + vim.api.nvim_put({ link }, "", true, true) + end +end + +local function paste_link() + return function(prompt_bufnr) + actions.close(prompt_bufnr) + local selection = action_state.get_selected_entry() + local filename_part = vim.split(selection.value, ":")[1] + local link = "[[" .. filename_part .. "]]" + vim.api.nvim_put({ link }, "", true, true) + end +end + +M.search_title = function() + require("telescope.builtin").live_grep({ + prompt_title = "Search by zettel title", + default_text = "^title: ", + attach_mappings = function(_, map) + map("n", "", paste_titled_link()) + map("i", "", paste_titled_link()) + map("n", "", paste_link()) + map("i", "", paste_link()) + return true + end, + }) +end + +M.copy_filename_to_clipboard = function(prompt_bufnr) + local selection = action_state.get_selected_entry() + local filename_part = vim.split(selection.value, ":")[1] + vim.fn.setreg("*", filename_part) + vim.fn.setreg("+", filename_part) + print("Copied filename: " .. filename_part) + actions.close(prompt_bufnr) +end + +vim.api.nvim_create_user_command("SearchZettelTitle", M.search_title, {}) +mapvimkey("fm", "SearchZettelTitle", "Search by zettel title") + +return M