diff --git a/autoload/SpaceVim/layers/telescope.vim b/autoload/SpaceVim/layers/telescope.vim index e76f88578..5d15ae4ba 100644 --- a/autoload/SpaceVim/layers/telescope.vim +++ b/autoload/SpaceVim/layers/telescope.vim @@ -335,6 +335,20 @@ function! s:defind_fuzzy_finder() abort endif + if SpaceVim#layers#isLoaded('tools') + nnoremap fb :Telescope bookmarks + let lnum = expand('') + s:unite_lnum - 4 + let g:_spacevim_mappings.f.s = ['Telescope bookmarks', + \ 'fuzzy find bookmarks', + \ [ + \ '[Leader f b] is to fuzzy find bookmarks', + \ '', + \ 'Definition: ' . s:file . ':' . lnum, + \ ] + \ ] + endif + + let lnum = expand('') + s:unite_lnum - 4 call SpaceVim#mapping#space#def('nnoremap', ['f', 'v', 's'], 'Telescope scriptnames', \ ['open-custom-configuration', diff --git a/config/plugins/telescope.nvim-0.1.2.vim b/config/plugins/telescope.nvim-0.1.2.vim index 67bdf154d..24f8ae540 100644 --- a/config/plugins/telescope.nvim-0.1.2.vim +++ b/config/plugins/telescope.nvim-0.1.2.vim @@ -8,6 +8,9 @@ lua require('telescope').load_extension('neomru') if SpaceVim#layers#isLoaded('zettelkasten') lua require('telescope').load_extension('zettelkasten_template') endif +if SpaceVim#layers#isLoaded('tools') + lua require('telescope').load_extension('bookmarks') +endif if filereadable(g:_spacevim_root_dir . 'bundle/telescope-fzf-native.nvim/build/libfzf.so') \ || filereadable(g:_spacevim_root_dir . 'bundle/telescope-fzf-native.nvim/build/libfzf.dll') lua require('telescope').load_extension('fzf') diff --git a/config/plugins/telescope.nvim-0.1.5.vim b/config/plugins/telescope.nvim-0.1.5.vim index 34de184de..93c46d457 100644 --- a/config/plugins/telescope.nvim-0.1.5.vim +++ b/config/plugins/telescope.nvim-0.1.5.vim @@ -8,6 +8,9 @@ lua require('telescope').load_extension('neomru') if SpaceVim#layers#isLoaded('zettelkasten') lua require('telescope').load_extension('zettelkasten_template') endif +if SpaceVim#layers#isLoaded('tools') + lua require('telescope').load_extension('bookmarks') +endif if filereadable(g:_spacevim_root_dir . 'bundle/telescope-fzf-native.nvim/build/libfzf.so') \ || filereadable(g:_spacevim_root_dir . 'bundle/telescope-fzf-native.nvim/build/libfzf.dll') lua require('telescope').load_extension('fzf') diff --git a/docs/layers/tools.md b/docs/layers/tools.md index f240b8482..dfb80a261 100644 --- a/docs/layers/tools.md +++ b/docs/layers/tools.md @@ -36,11 +36,12 @@ To use this configuration layer, update your custom configuration file with: This layer also includes `vim-bookmarks`, the following key binding can be used: -| key binding | description | -| ----------- | ------------------------- | -| `m m` | toggle bookmark | -| `m c` | clear bookmarks | -| `m i` | add bookmark annote | -| `m a` | show all bookmarks | -| `m n` | jump to next bookmark | -| `m p` | jump to previous bookmark | +| key binding | description | +| -------------- | ------------------------- | +| `m m` | toggle bookmark | +| `m c` | clear bookmarks | +| `m i` | add bookmark annote | +| `m a` | show all bookmarks | +| `m n` | jump to next bookmark | +| `m p` | jump to previous bookmark | +| ` f b` | fuzzy find bookmarks | diff --git a/lua/telescope/_extensions/bookmarks.lua b/lua/telescope/_extensions/bookmarks.lua new file mode 100644 index 000000000..df20e6432 --- /dev/null +++ b/lua/telescope/_extensions/bookmarks.lua @@ -0,0 +1,95 @@ +--============================================================================= +-- bookmarks.lua --- telescope support for bookmarks +-- Copyright (c) 2016-2022 Wang Shidong & Contributors +-- Author: Wang Shidong < wsdjeg@outlook.com > +-- URL: https://spacevim.org +-- License: GPLv3 +--============================================================================= + +local action_state = require('telescope.actions.state') +local actions = require('telescope.actions') +local conf = require('telescope.config').values +local entry_display = require('telescope.pickers.entry_display') +local finders = require('telescope.finders') +local pickers = require('telescope.pickers') +local pm = require('spacevim.plugin.projectmanager') +local file = require('spacevim.api.file') + +local function get_all_bookmarks() + local p = {} + local files = vim.fn['bm#all_files']() + + for _, k in ipairs(files) do + local line_nrs = vim.fn['bm#all_lines'](k) + for _, line_nr in ipairs(line_nrs) do + local bookmark = vim.fn['bm#get_bookmark_by_line'](k, line_nr) + + local text = 'EMPTY LINE' + if #bookmark.annotation > 0 then + text = bookmark.annotation + elseif #bookmark.content > 0 then + text = bookmark.content + end + table.insert(p, { + file = file.unify_path(k, ':.'), + linenr = line_nr, + text = text, + }) + end + end + return p +end + +local function show_changes(opts) + opts = opts or {} + local displayer = entry_display.create({ + separator = ' ', + items = { + { width = 60 }, + { remaining = true }, + }, + }) + local function make_display(entry) + -- print(vim.inspect(entry)) + return displayer({ + { entry.value.file .. ':' .. entry.value.linenr, 'TelescopeResultsVariable' }, + { entry.value.text, 'TelescopeResultsComment' }, + }) + end + pickers + .new(opts, { + prompt_title = 'Bookmarks', + finder = finders.new_table({ + results = get_all_bookmarks(), + entry_maker = function(entry) + return { + value = entry, + display = make_display, + ordinal = entry.file, + } + end, + }), + sorter = conf.generic_sorter(opts), + attach_mappings = function(prompt_bufnr) + actions.select_default:replace(function() + local entry = action_state.get_selected_entry() + actions.close(prompt_bufnr) + vim.cmd('e ' .. entry.value.file) + vim.api.nvim_win_set_cursor(0, { entry.value.linenr, 1 }) + end) + return true + end, + }) + :find() +end + +local function run() + show_changes() +end + +return require('telescope').register_extension({ + exports = { + -- Default when to argument is given, i.e. :Telescope project + bookmarks = run, + }, +})