From 9055452e413601cdc50e90bb3513f0e91ecc4655 Mon Sep 17 00:00:00 2001 From: Paul Ouellette Date: Wed, 24 Jul 2019 11:06:58 -0400 Subject: [PATCH] Zsh completions: use #compdef This means zsh scripts can't be sourced, but they can be automatically loaded from files which is the standard way of doing it. --- spec/completion_spec.lua | 4 +++- src/argparse.lua | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/completion_spec.lua b/spec/completion_spec.lua index 42f5103..6812cd2 100644 --- a/spec/completion_spec.lua +++ b/spec/completion_spec.lua @@ -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) diff --git a/src/argparse.lua b/src/argparse.lua index de333dc..d105d43 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -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)