Zsh completions: use #compdef <program>

This means zsh scripts can't be sourced, but they can be automatically
loaded from files which is the standard way of doing it.
This commit is contained in:
Paul Ouellette
2019-07-24 11:06:58 -04:00
parent 5f0cf3721e
commit 9055452e41
2 changed files with 5 additions and 3 deletions

View File

@@ -86,7 +86,7 @@ complete -F _comptest -o bashdefault -o default comptest
it("generates correct zsh completion script", function()
assert.equal([=[
compdef _comptest comptest
#compdef comptest
_comptest() {
local context state state_descr line
@@ -179,6 +179,8 @@ _comptest_admin_cmds() {
)
_describe "command" commands
}
_comptest
]=], get_output("completion zsh"))
end)

View File

@@ -1409,7 +1409,7 @@ end
function Parser:get_zsh_complete()
self._basename = base_name(self._name)
assert(self:_is_shell_safe())
local buf = {("compdef _%s %s\n"):format(self._basename, self._basename)}
local buf = {("#compdef %s\n"):format(self._basename)}
local cmds_buf = {}
table.insert(buf, "_" .. self._basename .. "() {")
if #self._commands > 0 then
@@ -1425,7 +1425,7 @@ function Parser:get_zsh_complete()
if #cmds_buf > 0 then
result = result .. "\n" .. table.concat(cmds_buf, "\n")
end
return result .. "\n"
return result .. "\n\n_" .. self._basename .. "\n"
end
local function fish_escape(string)