summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am10
-rw-r--r--completion/_flatpak27
2 files changed, 34 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index 5f99e152..7d6fddac 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -115,9 +115,13 @@ if PRIV_MODE_SETUID
endif # !PRIV_MODE_SETUID
endif # !WITH_SYSTEM_BWRAP
-completiondir = $(datadir)/bash-completion/completions
-completion_DATA = completion/flatpak
-EXTRA_DIST += $(completion_DATA)
+bashcompletiondir = $(datadir)/bash-completion/completions
+bashcompletion_DATA = completion/flatpak
+EXTRA_DIST += $(bashcompletion_DATA)
+
+zshcompletiondir = $(datadir)/zsh/site-functions
+zshcompletion_DATA = completion/_flatpak
+EXTRA_DIST += $(zshcompletion_DATA)
profiledir = $(PROFILE_DIR)
profile_DATA = flatpak.sh
diff --git a/completion/_flatpak b/completion/_flatpak
new file mode 100644
index 00000000..e2995a2c
--- /dev/null
+++ b/completion/_flatpak
@@ -0,0 +1,27 @@
+#compdef flatpak
+
+emulate -L zsh
+
+local index
+(( index = ${(c)#words[0,CURRENT]} + $#PREFIX + 1 ))
+
+
+local resp=($(flatpak complete "$words" $index "$words[CURRENT]"))
+
+_description options opt_expl option
+_description arguments arg_expl argument
+
+local match
+for match in $resp; do
+ case $match in
+ __FLATPAK_FILE) _files;;
+ __FLATPAK_BUNDLE_FILE) _path_files -g '*.flatpak';;
+ __FLATPAK_BUNDLE_OR_REF_FILE) _path_files -g '*.flatpak(|ref)';;
+ __FLATPAK_DIR) _path_files -/;;
+ -*=) compadd $opt_expl[@] -S "" -- $match;;
+ -*) compadd $opt_expl[@] -- $match;;
+ *) compadd $arg_expl[@] $match;;
+ esac
+done
+
+# vim: ft=zsh