summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-09-02 00:06:03 -0400
committerTJ DeVries <devries.timothyj@gmail.com>2020-09-02 00:06:07 -0400
commit061307233cdff0a90504117dd48e4fec3a10443a (patch)
treed71cd84a3eb93fda55284b22be3eb610aaced13a /lua
parent9f906f03922907b95b71a8f57254e64ba9c76ce8 (diff)
feat: add some new items and make mappings easier
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/actions.lua18
-rw-r--r--lua/telescope/builtin.lua46
-rw-r--r--lua/telescope/finders.lua18
-rw-r--r--lua/telescope/mappings.lua104
-rw-r--r--lua/telescope/pickers.lua18
-rw-r--r--lua/telescope/previewers.lua4
6 files changed, 165 insertions, 43 deletions
diff --git a/lua/telescope/actions.lua b/lua/telescope/actions.lua
index abd5bf8..f1b4a38 100644
--- a/lua/telescope/actions.lua
+++ b/lua/telescope/actions.lua
@@ -78,5 +78,23 @@ actions.close = function(prompt_bufnr)
vim.cmd(string.format([[bwipeout! %s]], prompt_bufnr))
end
+actions.set_command_line = function(prompt_bufnr)
+ local entry = actions.get_selected_entry(prompt_bufnr)
+
+ actions.close(prompt_bufnr)
+
+ vim.cmd(entry.value)
+end
+
+-- TODO: Think about how to do this.
+actions.insert_value = function(prompt_bufnr)
+ local entry = actions.get_selected_entry(prompt_bufnr)
+
+ vim.schedule(function()
+ actions.close(prompt_bufnr)
+ end)
+
+ return entry.value
+end
return actions
diff --git a/lua/telescope/builtin.lua b/lua/telescope/builtin.lua
index 42156f6..afc104c 100644
--- a/lua/telescope/builtin.lua
+++ b/lua/telescope/builtin.lua
@@ -2,8 +2,16 @@
A collection of builtin pipelines for telesceope.
Meant for both example and for easy startup.
+
+Any of these functions can just be called directly by doing:
+
+:lua require('telescope.builtin').__name__()
+
+This will use the default configuration options.
+ Other configuration options still in flux at the moment
--]]
+local actions = require('telescope.actions')
local finders = require('telescope.finders')
local previewers = require('telescope.previewers')
local pickers = require('telescope.pickers')
@@ -36,14 +44,11 @@ builtin.git_files = function(opts)
previewer = previewers.cat,
sorter = sorters.get_fuzzy_file(),
}):find()
-
end
builtin.live_grep = function(opts)
local live_grepper = finders.new {
- maximum_results = 1000,
-
- fn_command = function(self, prompt)
+ fn_command = function(_, prompt)
-- TODO: Make it so that we can start searching on the first character.
if not prompt or prompt == "" then
return nil
@@ -186,7 +191,7 @@ builtin.command_history = function(opts)
local results = {}
for i = 3, #history_list do
local item = history_list[i]
- local start, finish = string.find(item, "%d+ +")
+ local _, finish = string.find(item, "%d+ +")
table.insert(results, string.sub(item, finish + 1))
end
@@ -195,6 +200,15 @@ builtin.command_history = function(opts)
finder = finders.new_table(results),
sorter = sorters.get_norcalli_sorter(),
+ attach_mappings = function(map)
+ map('i', '<CR>', actions.set_command_line)
+
+ -- TODO: Find a way to insert the text... it seems hard.
+ -- map('i', '<C-i>', actions.insert_value, { expr = true })
+
+ return true
+ end,
+
-- TODO: Adapt `help` to this.
-- previewer = previewers.cat,
}):find()
@@ -230,4 +244,26 @@ builtin.builtin = function(opts)
}):find()
end
+
+builtin.fd = function(opts)
+ local fd_string = nil
+ if 1 == vim.fn.executable("fd") then
+ fd_string = "fd"
+ elseif 1 == vim.fn.executable("fdfind") then
+ fd_string = "fdfind"
+ end
+
+ if not fd_string then
+ print("You need to install fd")
+ return
+ end
+
+ pickers.new(opts, {
+ prompt = 'Find Files',
+ finder = finders.new_oneshot_job {fd_string},
+ previewer = previewers.cat,
+ sorter = sorters.get_fuzzy_file(),
+ }):find()
+end
+
return builtin
diff --git a/lua/telescope/finders.lua b/lua/telescope/finders.lua
index b3c5022..56b823b 100644
--- a/lua/telescope/finders.lua
+++ b/lua/telescope/finders.lua
@@ -155,6 +155,24 @@ end
-- }
-- end
+finders.new_job = function(command_generator)
+ return finders.new {
+ fn_command = function(_, prompt)
+ local command_list = command_generator(prompt)
+ if command_list == nil then
+ return nil
+ end
+
+ local command = table.remove(command_list, 1)
+
+ return {
+ command = command,
+ args = command_list,
+ }
+ end
+ }
+end
+
finders.new_oneshot_job = function(command_list, entry_maker)
command_list = vim.deepcopy(command_list)
diff --git a/lua/telescope/mappings.lua b/lua/telescope/mappings.lua
index ba618d4..6c8641c 100644
--- a/lua/telescope/mappings.lua
+++ b/lua/telescope/mappings.lua
@@ -29,14 +29,14 @@ end
--[[
Usage:
-mappings.apply_keymap(42, {
+mappings.apply_keymap(42, <function>, {
n = {
["<leader>x"] = "just do this string",
["<CR>"] = function(picker, prompt_bufnr)
actions.close_prompt()
- local filename = ...
+> local filename = ...
vim.cmd(string.format(":e %s", filename))
end,
},
@@ -45,41 +45,75 @@ mappings.apply_keymap(42, {
}
})
--]]
-mappings.apply_keymap = function(prompt_bufnr, buffer_keymap)
+local telescope_map = function(prompt_bufnr, mode, key_bind, key_func, opts)
+ opts = opts or {
+ silent = true
+ }
+
+ if type(key_func) == "string" then
+ a.nvim_buf_set_keymap(
+ prompt_bufnr,
+ mode,
+ key_bind,
+ key_func,
+ opts or {
+ silent = true
+ }
+ )
+ else
+ local key_id = assign_function(prompt_bufnr, key_func)
+ local prefix = ""
+
+ local map_string
+ if opts.expr then
+ map_string = string.format(
+ [[luaeval("require('telescope.mappings').execute_keymap(%s, %s)")]],
+ prompt_bufnr,
+ key_id
+ )
+ else
+ if mode == "i" and not opts.expr then
+ prefix = "<C-O>"
+ end
+
+ map_string = string.format(
+ "%s:lua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
+ prefix,
+ prompt_bufnr,
+ key_id
+ )
+ end
+
+ a.nvim_buf_set_keymap(
+ prompt_bufnr,
+ mode,
+ key_bind,
+ map_string,
+ opts
+ )
+ end
+end
+
+mappings.apply_keymap = function(prompt_bufnr, attach_mappings, buffer_keymap)
+ local applied_mappings = { n = {}, i = {} }
+
+ local map = function(mode, key_bind, key_func, opts)
+ applied_mappings[mode][key_bind] = true
+
+ telescope_map(prompt_bufnr, mode, key_bind, key_func, opts)
+ end
+
+ if attach_mappings and not attach_mappings(map) then
+ return
+ end
+
for mode, mode_map in pairs(buffer_keymap) do
- for key_bind, key_func in pairs(mode_map) do
- if type(key_func) == "string" then
- a.nvim_buf_set_keymap(
- prompt_bufnr,
- mode,
- key_bind,
- key_func,
- {
- silent = true
- }
- )
- else
- local key_id = assign_function(prompt_bufnr, key_func)
- local prefix = ""
- if mode == "i" then
- prefix = "<C-O>"
- end
-
- a.nvim_buf_set_keymap(
- prompt_bufnr,
- mode,
- key_bind,
- string.format(
- "%s:lua require('telescope.mappings').execute_keymap(%s, %s)<CR>",
- prefix,
- prompt_bufnr,
- key_id
- ),
- {
- silent = true
- }
- )
+ -- TODO: Probalby should not overwrite any keymaps
+ -- local buffer_keymaps
+ for key_bind, key_func in pairs(mode_map) do
+ if not applied_mappings[mode][key_bind] then
+ telescope_map(prompt_bufnr, mode, key_bind, key_func)
end
end
end
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 4b450f2..51b1162 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -14,7 +14,7 @@ local get_default = utils.get_default
-- TODO: Make this work with deep extend I think.
local extend = function(opts, defaults)
- local result = vim.deepcopy(opts or {})
+ local result = opts or {}
for k, v in pairs(defaults or {}) do
if result[k] == nil then
result[k] = v
@@ -69,7 +69,19 @@ function Picker:new(opts)
sorter = opts.sorter,
previewer = opts.previewer,
- mappings = get_default(opts.mappings, default_mappings),
+ -- opts.mappings => overwrites entire table
+ -- opts.override_mappings => merges your table in with defaults.
+ -- Add option to change default
+ -- opts.attach(bufnr)
+
+ --[[
+ function(map)
+ map('n', '<esc>', actions.close, [opts])
+ telescope.apply_mapping
+ end
+ --]]
+ -- mappings = get_default(opts.mappings, default_mappings),
+ attach_mappings = opts.attach_mappings,
get_window_options = opts.get_window_options,
selection_strategy = opts.selection_strategy,
@@ -366,7 +378,7 @@ function Picker:find()
finder = finder,
})
- mappings.apply_keymap(prompt_bufnr, self.mappings)
+ mappings.apply_keymap(prompt_bufnr, self.attach_mappings, default_mappings)
vim.cmd [[startinsert]]
end
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua
index 48b3a1a..224cda0 100644
--- a/lua/telescope/previewers.lua
+++ b/lua/telescope/previewers.lua
@@ -10,6 +10,10 @@ Previewer.__index = Previewer
local bat_options = " --style=grid --paging=always "
-- --terminal-width=%s
+-- TODO: We shoudl make sure that all our terminals close all the way.
+-- Otherwise it could be bad if they're just sitting around, waiting to be closed.
+-- I don't think that's the problem, but it could be?
+
function Previewer:new(opts)
opts = opts or {}