summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Young <45989017+younger-1@users.noreply.github.com>2022-11-28 03:04:07 +0800
committerGitHub <noreply@github.com>2022-11-27 20:04:07 +0100
commit4d77743a8ec4d19b3c47e0d04f3e88f1a933698e (patch)
tree891e3e54d184c00cd07a0e1ae97a7dab92fe5a95
parent343a2b6b712eb42ae5a319d484508cc5e9e483b0 (diff)
feat(builtin.keymaps): display noremap/buffer indicators and add lhs filter (#2246)
-rw-r--r--doc/telescope.txt12
-rw-r--r--lua/telescope/builtin/__internal.lua10
-rw-r--r--lua/telescope/builtin/init.lua2
-rw-r--r--lua/telescope/make_entry.lua15
4 files changed, 32 insertions, 7 deletions
diff --git a/doc/telescope.txt b/doc/telescope.txt
index 6bb4947..d2ac210 100644
--- a/doc/telescope.txt
+++ b/doc/telescope.txt
@@ -1343,10 +1343,14 @@ builtin.keymaps({opts}) *telescope.builtin.keymaps()*
{opts} (table) options to pass to the picker
Options: ~
- {modes} (table) a list of short-named keymap modes to search
- (default: { "n", "i", "c", "x" })
- {show_plug} (boolean) if true, the keymaps for which the lhs contains
- "<Plug>" are also shown (default: true)
+ {modes} (table) a list of short-named keymap modes to search
+ (default: { "n", "i", "c", "x" })
+ {show_plug} (boolean) if true, the keymaps for which the lhs contains
+ "<Plug>" are also shown (default: true)
+ {only_buf} (boolean) if true, only show the buffer-local keymaps
+ (default: false)
+ {lhs_filter} (function) filter(lhs:string) -> boolean. true if the
+ keymap should be shown (optional)
builtin.filetypes({opts}) *telescope.builtin.filetypes()*
diff --git a/lua/telescope/builtin/__internal.lua b/lua/telescope/builtin/__internal.lua
index 7f85916..d9315a4 100644
--- a/lua/telescope/builtin/__internal.lua
+++ b/lua/telescope/builtin/__internal.lua
@@ -1115,6 +1115,7 @@ end
internal.keymaps = function(opts)
opts.modes = vim.F.if_nil(opts.modes, { "n", "i", "c", "x" })
opts.show_plug = vim.F.if_nil(opts.show_plug, true)
+ opts.only_buf = vim.F.if_nil(opts.only_buf, false)
local keymap_encountered = {} -- used to make sure no duplicates are inserted into keymaps_table
local keymaps_table = {}
@@ -1126,7 +1127,10 @@ internal.keymaps = function(opts)
local keymap_key = keymap.buffer .. keymap.mode .. keymap.lhs -- should be distinct for every keymap
if not keymap_encountered[keymap_key] then
keymap_encountered[keymap_key] = true
- if opts.show_plug or not string.find(keymap.lhs, "<Plug>") then
+ if
+ (opts.show_plug or not string.find(keymap.lhs, "<Plug>"))
+ and (not opts.lhs_filter or opts.lhs_filter(keymap.lhs))
+ then
table.insert(keymaps_table, keymap)
max_len_lhs = math.max(max_len_lhs, #utils.display_termcodes(keymap.lhs))
end
@@ -1137,7 +1141,9 @@ internal.keymaps = function(opts)
for _, mode in pairs(opts.modes) do
local global = vim.api.nvim_get_keymap(mode)
local buf_local = vim.api.nvim_buf_get_keymap(0, mode)
- extract_keymaps(global)
+ if not opts.only_buf then
+ extract_keymaps(global)
+ end
extract_keymaps(buf_local)
end
opts.width_lhs = max_len_lhs + 1
diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua
index 4c069f0..23f3e4e 100644
--- a/lua/telescope/builtin/init.lua
+++ b/lua/telescope/builtin/init.lua
@@ -331,6 +331,8 @@ builtin.registers = require_on_exported_call("telescope.builtin.__internal").reg
---@param opts table: options to pass to the picker
---@field modes table: a list of short-named keymap modes to search (default: { "n", "i", "c", "x" })
---@field show_plug boolean: if true, the keymaps for which the lhs contains "<Plug>" are also shown (default: true)
+---@field only_buf boolean: if true, only show the buffer-local keymaps (default: false)
+---@field lhs_filter function: filter(lhs:string) -> boolean. true if the keymap should be shown (optional)
builtin.keymaps = require_on_exported_call("telescope.builtin.__internal").keymaps
--- Lists all available filetypes, sets currently open buffer's filetype to selected filetype in Telescope on `<cr>`
diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua
index 2a17f80..699145c 100644
--- a/lua/telescope/make_entry.lua
+++ b/lua/telescope/make_entry.lua
@@ -827,11 +827,23 @@ function make_entry.gen_from_keymaps(opts)
return utils.display_termcodes(entry.lhs)
end
+ local function get_attr(entry)
+ local ret = ""
+ if entry.value.noremap ~= 0 then
+ ret = ret .. "*"
+ end
+ if entry.value.buffer ~= 0 then
+ ret = ret .. "@"
+ end
+ return ret
+ end
+
local displayer = require("telescope.pickers.entry_display").create {
separator = "▏",
items = {
- { width = 2 },
+ { width = 3 },
{ width = opts.width_lhs },
+ { width = 2 },
{ remaining = true },
},
}
@@ -839,6 +851,7 @@ function make_entry.gen_from_keymaps(opts)
return displayer {
entry.mode,
get_lhs(entry),
+ get_attr(entry),
get_desc(entry),
}
end