diff options
| author | kkharji <kkharji@protonmail.com> | 2022-11-23 19:26:29 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-23 17:26:29 +0100 |
| commit | 5e16fbc8eac42280ae6e18ca38098a833c5e08ba (patch) | |
| tree | 48c8ad555ee385302d0f1be6a8d4501e3a28d7c7 /lua/telescope/builtin | |
| parent | 7a4ffef931769c3fe7544214ed7ffde5852653f6 (diff) | |
feat(picker): command history filter (#2132)
* feat(picker): command history filter
I've recently start using command history. For sometime was a bit annoyed of unrelevant commands
like edit/write and others (most likely only used once)
I've considered using lua patterns, however, logical `or` isn't a thing. Additionally, passing a list of lua patterns and checking each pattern for each command history entry felt tedious.
This PR introduce a new optional function to filter command history items.
For example, in my configurations
~~~lua
local command_history_ignore = vim.regex "edit\\|Move\\|write\\|Write\\|e\\s\\|lua\\sI("
overrides.command_history = minimal {
prompt_prefix = "CMDHistory> ",
filter_fn = function(item)
if #item < 3 then
return false
else
return not command_history_ignore:match_str(item)
end
end,
}
~~~
* [docgen] Update doc/telescope.txt
skip-checks: true
Co-authored-by: Github Actions <actions@github>
Diffstat (limited to 'lua/telescope/builtin')
| -rw-r--r-- | lua/telescope/builtin/__internal.lua | 12 | ||||
| -rw-r--r-- | lua/telescope/builtin/init.lua | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/lua/telescope/builtin/__internal.lua b/lua/telescope/builtin/__internal.lua index 9b6931d..d0f32a3 100644 --- a/lua/telescope/builtin/__internal.lua +++ b/lua/telescope/builtin/__internal.lua @@ -542,10 +542,20 @@ internal.command_history = function(opts) local history_list = vim.split(history_string, "\n") local results = {} + local filter_fn = opts.filter_fn + for i = #history_list, 3, -1 do local item = history_list[i] local _, finish = string.find(item, "%d+ +") - table.insert(results, string.sub(item, finish + 1)) + local cmd = string.sub(item, finish + 1) + + if filter_fn then + if filter_fn(cmd) then + table.insert(results, cmd) + end + else + table.insert(results, cmd) + end end pickers diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua index b912c80..4c069f0 100644 --- a/lua/telescope/builtin/init.lua +++ b/lua/telescope/builtin/init.lua @@ -271,6 +271,7 @@ builtin.oldfiles = require_on_exported_call("telescope.builtin.__internal").oldf --- - Default keymaps: --- - `<C-e>`: open the command line with the text of the currently selected result populated in it ---@param opts table: options to pass to the picker +---@field filter_fn function: filter fn(cmd:string). true if the history command should be presented. builtin.command_history = require_on_exported_call("telescope.builtin.__internal").command_history --- Lists searches that were executed recently, and reruns them on `<cr>` |
