|
| 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 | +}) |
0 commit comments