From dbe10af0544069641f48cee263717eff68dee07e Mon Sep 17 00:00:00 2001 From: kitsunyan Date: Sat, 5 May 2018 06:51:07 +0300 Subject: Add zsh completion --- completion/make.sh | 61 ++++++++++++++++++++++++++++++++++++++++++---------- completion/zsh.patch | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 completion/zsh.patch (limited to 'completion') diff --git a/completion/make.sh b/completion/make.sh index 51b0730..323dad6 100755 --- a/completion/make.sh +++ b/completion/make.sh @@ -1,21 +1,60 @@ #!/bin/bash pacman_bash_completion='/usr/share/bash-completion/completions/pacman' +pacman_zsh_completion='/usr/share/zsh/site-functions/_pacman' + +function error() { + local code="$?" + rm "$1" + exit "$code" +} + +function apply-patch() { + patch -sNp1 -r - --no-backup-if-mismatch -i "$1" +} function delete-shell-fn() { perl -0777 -pe 's/\n'"$1"'\(\) *\{\n([^}].*\n)*\}\n*/\n\n/g;s/\n{3,}/\n\n/g' } -cat "$pacman_bash_completion" | -delete-shell-fn '_pacman_keyids' | -delete-shell-fn '_pacman_key' | -delete-shell-fn '_makepkg' | -sed 's/^_pacman() {$/_pakku() {/' \ -> 'bash' || { - rm 'bash' - exit 1 +function delete-shell-array() { + perl -0777 -pe 's/\n'"$1"'=\(\n([^)].*\n)*\)\n?//g' +} + +[ "$1" = 'bash' ] && { + cat "$pacman_bash_completion" | + delete-shell-fn '_pacman_keyids' | + delete-shell-fn '_pacman_key' | + delete-shell-fn '_makepkg' | + sed 's/^_pacman() {$/_pakku() {/' \ + > 'bash' || + error 'bash' + + apply-patch 'bash.patch' || + error 'bash' + + exit 0 } -patch -sNp1 -r - --no-backup-if-mismatch -i 'bash.patch' || { - rm 'bash' - exit 1 + +[ "$1" = 'zsh' ] && { + cat "$pacman_zsh_completion" | + delete-shell-array '_key_shortopts' | + delete-shell-array '_key_longopts' | + delete-shell-array '_pacman_key_options' | + delete-shell-fn '_pacman_key' | + delete-shell-fn '_keys' | + delete-shell-array '_makepkg_shortopts' | + delete-shell-array '_makepkg_longopts' | + delete-shell-fn '_makepkg_action_none' | + delete-shell-fn '_makepkg' | + sed 's/_pacman/_pakku/g' \ + > 'zsh' || + error 'zsh' + + apply-patch 'zsh.patch' || + error 'zsh' + + exit 0 } + +exit 1 diff --git a/completion/zsh.patch b/completion/zsh.patch new file mode 100644 index 0000000..c3eb8c9 --- /dev/null +++ b/completion/zsh.patch @@ -0,0 +1,50 @@ +--- a/zsh ++++ b/zsh +@@ -1,1 +1,1 @@ +-#compdef pacman pacman.static=pacman pacman-key makepkg ++#compdef pakku +@@ -139,2 +139,6 @@ + '--print-format[Specify how the targets should be printed]' ++ {-n,--build}'[Build targets from source]' ++ '--keyserver[Keyserver to receive keys from]' ++ '--noaur[Disable all AUR operations]' ++ {-z,--source}'[Retrieve PKGBUILD source]' + ) +@@ -310,1 +314,6 @@ +- packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) ) ++ if [[ ${words[CURRENT]%/*} == 'aur' ]]; then ++ packages=( $(_call_program packages $cmd[@] -Ss ${words[CURRENT]#*/} | ++ grep -Po '(?<=^aur/)[^ ]+') ) ++ else ++ packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) ) ++ fi +@@ -314,1 +323,1 @@ +- packages=( $(_call_program packages $cmd[@] -Sql) ) ++ packages=( $(_call_program packages $cmd[@] -Ssq ${words[CURRENT]}) ) +@@ -318,1 +327,1 @@ +- repositories=(${(o)${${${(M)${(f)"$(/dev/null") ++ cmd=("pakku" "2>/dev/null") +@@ -371,1 +380,1 @@ +-_pakku_zsh_comp() { ++_pakku_comp() { +@@ -501,17 +510,0 @@ +- +-_pakku_comp() { +- case "$service" in +- makepkg) +- _makepkg "$@" +- ;; +- pacman-key) +- _pakku_key "$@" +- ;; +- pacman) +- _pakku_zsh_comp "$@" +- ;; +- *) +- _message "Error" +- ;; +- esac +-} -- cgit v1.2.3-70-g09d2