summaryrefslogtreecommitdiff
path: root/lua/telescope
diff options
context:
space:
mode:
authorVolodymyr Kot <volodymyr.kot.ua@gmail.com>2021-04-23 16:24:09 +0100
committerGitHub <noreply@github.com>2021-04-23 18:24:09 +0300
commit712de3e18237323a979b4fd256703e2edfaddf2f (patch)
tree43abbb86063cff6cc4eea62b51d49835a70de99f /lua/telescope
parenta28999574efb7a0d5bddb2e7eb543ff7d4cf14b4 (diff)
feat: add search history picker (#769)
Co-authored-by: Volodymyr Kot <vkot@palantir.com>
Diffstat (limited to 'lua/telescope')
-rw-r--r--lua/telescope/actions/init.lua13
-rw-r--r--lua/telescope/builtin/init.lua1
-rw-r--r--lua/telescope/builtin/internal.lua30
3 files changed, 44 insertions, 0 deletions
diff --git a/lua/telescope/actions/init.lua b/lua/telescope/actions/init.lua
index bee1f48..a14255b 100644
--- a/lua/telescope/actions/init.lua
+++ b/lua/telescope/actions/init.lua
@@ -234,6 +234,19 @@ actions.set_command_line = function(prompt_bufnr)
vim.cmd(entry.value)
end
+actions.edit_search_line = function(prompt_bufnr)
+ local entry = action_state.get_selected_entry(prompt_bufnr)
+ actions.close(prompt_bufnr)
+ a.nvim_feedkeys(a.nvim_replace_termcodes("/" .. entry.value , true, false, true), "t", true)
+end
+
+actions.set_search_line = function(prompt_bufnr)
+ local entry = action_state.get_selected_entry(prompt_bufnr)
+
+ actions.close(prompt_bufnr)
+ a.nvim_feedkeys(a.nvim_replace_termcodes("/" .. entry.value .. "<CR>", true, false, true), "t", true)
+end
+
actions.edit_register = function(prompt_bufnr)
local entry = action_state.get_selected_entry(prompt_bufnr)
local picker = action_state.get_current_picker(prompt_bufnr)
diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua
index f7f32f8..2201609 100644
--- a/lua/telescope/builtin/init.lua
+++ b/lua/telescope/builtin/init.lua
@@ -48,6 +48,7 @@ builtin.quickfix = require('telescope.builtin.internal').quickfix
builtin.loclist = require('telescope.builtin.internal').loclist
builtin.oldfiles = require('telescope.builtin.internal').oldfiles
builtin.command_history = require('telescope.builtin.internal').command_history
+builtin.search_history = require('telescope.builtin.internal').search_history
builtin.vim_options = require('telescope.builtin.internal').vim_options
builtin.help_tags = require('telescope.builtin.internal').help_tags
builtin.man_pages = require('telescope.builtin.internal').man_pages
diff --git a/lua/telescope/builtin/internal.lua b/lua/telescope/builtin/internal.lua
index cab145d..5164245 100644
--- a/lua/telescope/builtin/internal.lua
+++ b/lua/telescope/builtin/internal.lua
@@ -297,6 +297,36 @@ internal.command_history = function(opts)
}):find()
end
+internal.search_history = function(opts)
+ local search_string = vim.fn.execute('history search')
+ local search_list = vim.split(search_string, "\n")
+
+ local results = {}
+ for i = #search_list, 3, -1 do
+ local item = search_list[i]
+ local _, finish = string.find(item, "%d+ +")
+ table.insert(results, string.sub(item, finish + 1))
+ end
+
+ pickers.new(opts, {
+ prompt_title = 'Search History',
+ finder = finders.new_table(results),
+ sorter = conf.generic_sorter(opts),
+
+ attach_mappings = function(_, map)
+ map('i', '<CR>', actions.set_search_line)
+ map('n', '<CR>', actions.set_search_line)
+ map('n', '<C-e>', actions.edit_search_line)
+ map('i', '<C-e>', actions.edit_search_line)
+
+ -- TODO: Find a way to insert the text... it seems hard.
+ -- map('i', '<C-i>', actions.insert_value, { expr = true })
+
+ return true
+ end,
+ }):find()
+end
+
internal.vim_options = function(opts)
-- Load vim options.
local vim_opts = loadfile(utils.data_directory() .. path.separator .. 'options' ..