dippin-dotfiles/.config/hilbish/fish_completer.lua
2025-02-04 21:06:01 -07:00

54 lines
1.5 KiB
Lua
Executable file

local M = {}
M.fish_completer = function(query, ctx, fields)
-- Ensure any quotes in input are properly escaped
ctx = ctx:gsub('"', '\\"')
ctx = ctx:gsub("'", "\\'")
-- Run fish
local cmd = "fish --command 'complete \"--do-complete=" .. ctx .. "\"'"
local res = io.popen(cmd)
local raw_str = res:read('*all')
-- Extract completion items
-- local values = table.map(string.split(raw_str, "\n"), function(v)
-- return string.split(v, "\t")
-- end)
local values = string.split(raw_str, "\n")
local comp_items = {}
for _, v in pairs(values) do
local _, count = string.gsub(v, " ", "")
if count > 0 then
local split = string.split(v, "\t")
comp_items[split[1]] = { split[2] }
else
comp_items[#comp_items+1] = v
end
end
-- for _, v in pairs(string.split(raw_str, "\n")) do
-- local comp_val = string.split(v, "\t")
-- values[comp_val[1]] = comp_val[2]
-- end
-- Only extract completions that start with given prefix
-- (fish doesn't consistently do this it seems)
-- if query ~= "" then
-- for i = #values,1,-1 do
-- if values[i]:find(query, 1, True) ~= 1 then
-- table.remove(values, i)
-- end
-- end
-- end
-- Construct completion items table
local comp = {
{
items = comp_items,
type = 'list'
}
}
return comp, query
end
return M