Skip to content

Commit e76c159

Browse files
committed
feat(auto-complete): :FzfLua complets options
- Requires nvim >= 0.7, below uses the old code - Renamed `help_tags|man_pages` to `helptags|manpages` (backward compat, can still call `:FzfLua help_tags` but it will not show in auto-complete)
1 parent be720e0 commit e76c159

File tree

5 files changed

+99
-8
lines changed

5 files changed

+99
-8
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ Alternatively, resuming work on a specific provider:
319319
| `resume` | resume last command/query |
320320
| `builtin` | fzf-lua builtin commands |
321321
| `profiles` | fzf-lua configuration profiles |
322-
| `help_tags` | help tags |
323-
| `man_pages` | man pages |
322+
| `helptags` | help tags |
323+
| `manpages` | man pages |
324324
| `colorschemes` | color schemes |
325325
| `awesome_colorschemes` | Awesome Neovim color schemes |
326326
| `highlights` | highlight groups |

lua/fzf-lua/core.lua

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,7 @@ M.fzf = function(contents, opts)
340340
-- fzf 0.40 added 'zero' event for when there's no match
341341
-- clears the preview when there are no matching entries
342342
if opts.__FZF_VERSION and opts.__FZF_VERSION >= 0.40 and previewer.zero then
343-
opts.keymap = opts.keymap or {}
344-
opts.keymap.fzf = opts.keymap.fzf or {}
345-
opts.keymap.fzf["zero"] = previewer:zero()
343+
utils.map_set(opts, "keymap.fzf.zero", previewer:zero())
346344
end
347345
if opts.__FZF_VERSION
348346
and opts.__FZF_VERSION >= 0.46
@@ -361,9 +359,7 @@ M.fzf = function(contents, opts)
361359
tonumber(opts.winopts.preview.flip_columns),
362360
opts.winopts.preview.vertical,
363361
opts.winopts.preview.horizontal)
364-
opts.keymap = opts.keymap or {}
365-
opts.keymap.fzf = opts.keymap.fzf or {}
366-
opts.keymap.fzf["resize"] = string.format("transform(%s)", transformer)
362+
utils.map_set(opts, "keymap.fzf.resize", string.format("transform(%s)", transformer))
367363
end
368364
if type(previewer.preview_window) == "function" then
369365
-- do we need to override the preview_window args?

lua/fzf-lua/init.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ do
222222
tabs = { "fzf-lua.providers.buffers", "tabs" },
223223
lines = { "fzf-lua.providers.buffers", "lines" },
224224
blines = { "fzf-lua.providers.buffers", "blines" },
225+
helptags = { "fzf-lua.providers.helptags", "helptags" },
226+
manpages = { "fzf-lua.providers.manpages", "manpages" },
227+
-- backward compat
225228
help_tags = { "fzf-lua.providers.helptags", "helptags" },
226229
man_pages = { "fzf-lua.providers.manpages", "manpages" },
227230
colorschemes = { "fzf-lua.providers.colorschemes", "colorschemes" },
@@ -349,6 +352,11 @@ M._excluded_meta = {
349352
"get_info",
350353
"set_info",
351354
"get_last_query",
355+
-- Exclude due to rename:
356+
-- help_tags -> helptags
357+
-- man_pages -> manpages
358+
"help_tags",
359+
"man_pages",
352360
}
353361

354362
for _, m in ipairs(M._exported_modules) do

plugin/fzf-lua.lua

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
if vim.g.loaded_fzf_lua == 1 then
2+
return
3+
end
4+
vim.g.loaded_fzf_lua = 1
5+
6+
-- Should never be called, below nvim 0.7 "plugin/fzf-lua.vim"
7+
-- sets `vim.g.loaded_fzf_lua=1`
8+
if vim.fn.has("nvim-0.7") ~= 1 then
9+
vim.api.nvim_err_writeln("Fzf-lua minimum requirement is Neovim versions 0.5")
10+
return
11+
end
12+
13+
vim.api.nvim_create_user_command("FzfLua", function(opts)
14+
require("fzf-lua.cmd").load_command(unpack(opts.fargs))
15+
end, {
16+
nargs = "*",
17+
complete = function(_, line)
18+
local metatable = require("fzf-lua")
19+
local builtin_list = vim.tbl_filter(function(k)
20+
return metatable._excluded_metamap[k] == nil
21+
end, vim.tbl_keys(metatable))
22+
23+
local l = vim.split(line, "%s+")
24+
local n = #l - 2
25+
26+
if n == 0 then
27+
local commands = vim.tbl_flatten({ builtin_list })
28+
table.sort(commands)
29+
30+
return vim.tbl_filter(function(val)
31+
return vim.startswith(val, l[2])
32+
end, commands)
33+
end
34+
35+
local defaults = require("fzf-lua.defaults").defaults
36+
local cmd_opts = defaults[l[2]] or {}
37+
local opts = vim.tbl_filter(function(k)
38+
return not k:match("^_")
39+
end, vim.tbl_keys(cmd_opts))
40+
41+
-- Flatten map's keys recursively
42+
-- { a = { a1 = ..., a2 = ... } }
43+
-- will be transformed to:
44+
-- {
45+
-- ["a.a1"] = ...,
46+
-- ["a.a2"] = ...,
47+
-- }
48+
local function map_flatten(t, prefix)
49+
if vim.tbl_isempty(t) then return {} end
50+
local ret = {}
51+
prefix = prefix and string.format("%s.", prefix) or ""
52+
for k, v in pairs(t) do
53+
if type(v) == "table" then
54+
local inner = map_flatten(v)
55+
for ki, vi in pairs(inner) do
56+
ret[prefix .. k .. "." .. ki] = vi
57+
end
58+
else
59+
ret[prefix .. k] = v
60+
end
61+
end
62+
return ret
63+
end
64+
65+
-- Add globals recursively, e.g. `winopts.fullscreen`
66+
-- will be later retrieved using `utils.map_get(...)`
67+
for _, k in ipairs({ "winopts", "keymap", "fzf_opts", "fzf_tmux_opts", "hls" }) do
68+
opts = vim.tbl_flatten({ opts, vim.tbl_keys(map_flatten(defaults[k] or {}, k)) })
69+
end
70+
71+
-- Add generic options that apply to all pickers
72+
for _, o in ipairs({ "query" }) do
73+
table.insert(opts, o)
74+
end
75+
76+
table.sort(opts)
77+
78+
return vim.tbl_filter(function(val)
79+
return vim.startswith(val, l[#l])
80+
end, opts)
81+
end,
82+
})

plugin/fzf-lua.vim

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
" Neovim >= v0.7 uses 'plugin/fzf-lua.lua'
2+
if has('nvim-0.7')
3+
finish
4+
end
5+
16
if !has('nvim-0.5')
27
echohl Error
38
echomsg "Fzf-lua is only available for Neovim versions 0.5 and above"

0 commit comments

Comments
 (0)