ソースを参照

fixed some completions for bash and zsh. Closer to pacman 5.2

Jguer 5 年 前
コミット
f8e496457c
2 ファイル変更57 行追加41 行削除
  1. 52 39
      completions/bash
  2. 5 2
      completions/zsh

+ 52 - 39
completions/bash

@@ -3,10 +3,11 @@
 _arch_compgen() {
   local i r
   COMPREPLY=($(compgen -W '$*' -- "$cur"))
-  for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
+  for ((i = 1; i < ${#COMP_WORDS[@]} - 1; i++)); do
     for r in ${!COMPREPLY[@]}; do
-      if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
-        unset 'COMPREPLY[r]'; break
+      if [[ ${COMP_WORDS[i]} == ${COMPREPLY[r]} ]]; then
+        unset 'COMPREPLY[r]'
+        break
       fi
     done
   done
@@ -24,7 +25,8 @@ _arch_ptr2comp() {
 }
 
 _arch_incomp() {
-  local r="\s-(-${1#* }\s|\w*${1% *})"; [[ $COMP_LINE =~ $r ]]
+  local r="[[:space:]]-(-${1#* }[[:space:]]|[[:alnum:]_]*${1% *})"
+  [[ $COMP_LINE =~ $r ]]
 }
 
 _pacman_pkg() {
@@ -38,7 +40,7 @@ _pacman_pkg() {
 }
 
 _yay_pkg() {
-  [ -z "$cur" ] && return
+  # [ -z "$cur" ] && return
   _arch_compgen "$(yay -Pc)"
 }
 
@@ -47,10 +49,12 @@ _pacman_repo_list() {
 }
 
 _yay() {
+  compopt -o default
   local common core cur database files prev query remove sync upgrade o
   local yays show getpkgbuild
-  COMPREPLY=()
-  _get_comp_words_by_ref cur prev
+  local cur prev words cword
+
+  _init_completion || return
   database=('asdeps asexplicit')
   files=('list machinereadable owns search refresh regex' 'l o s x y')
   query=('changelog check deps explicit file foreign groups info list native owns
@@ -58,22 +62,22 @@ _yay() {
   remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u')
   sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup
          info list needed nodeps assume-installed print refresh recursive search sysupgrade'
-        'c g i l p s u w y')
+    'c g i l p s u w y')
   upgrade=('asdeps asexplicit force needed nodeps assume-installed print recursive' 'p')
-  common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
-           noconfirm noprogressbar noscriptlet quiet root verbose')
-           #yay stuff
-  common+=('makepkg pacman tar git gpg gpgflags config requestsplitn sudoloop nosudoloop
-           redownload noredownload redownloadall rebuild rebuildall rebuildtree norebuild
-           sortby answerclean answerdiff answeredit answerupgrade noanswerclean noanswerdiff
-           noansweredit noanswerupgrade cleanmenu diffmenu editmenu upgrademenu cleanafter nocleanafter
-           nocleanmenu nodiffmenu noupgrademenu provides noprovides pgpfetch nopgpfetch
-           useask nouseask combinedupgrade nocombinedupgrade aur repo makepkgconf
-           nomakepkgconf askremovemake removemake noremovemake completioninterval aururl'
-           'b d h q r v')
   core=('database files help query remove sync upgrade version' 'D F Q R S U V h')
 
   ##yay stuff
+  common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
+          noconfirm noprogressbar noscriptlet quiet root verbose
+          makepkg pacman tar git gpg gpgflags config requestsplitn sudoloop nosudoloop
+          redownload noredownload redownloadall rebuild rebuildall rebuildtree norebuild
+          sortby answerclean answerdiff answeredit answerupgrade noanswerclean noanswerdiff
+          noansweredit noanswerupgrade cleanmenu diffmenu editmenu upgrademenu cleanafter nocleanafter
+          nocleanmenu nodiffmenu noupgrademenu provides noprovides pgpfetch nopgpfetch
+          useask nouseask combinedupgrade nocombinedupgrade aur repo makepkgconf
+          nomakepkgconf askremovemake removemake noremovemake completioninterval aururl
+          searchby batchinstall nobatchinstall'
+    'b d h q r v')
   yays=('clean gendb' 'c')
   show=('complete defaultconfig currentconfig stats  news' 'c d g s w')
   getpkgbuild=('force' 'f')
@@ -84,38 +88,47 @@ _yay() {
 
   if [[ $? != 0 ]]; then
     _arch_ptr2comp core
-  elif [[ ! $prev =~ ^-\w*[Vbhr] &&
-    ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]
-  then
-    [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
+  elif [[ ! $prev =~ ^-[[:alnum:]_]*[Vbhr] && ! $prev == --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]; then
+    [[ $cur == -* ]] && _arch_ptr2comp ${o#* } common ||
       case ${o% *} in
-      D|R)
-          _pacman_pkg Qq;;
+      D | R)
+        _pacman_pkg Qq
+        ;;
       F)
-          _arch_incomp 'l list'   && _pacman_pkg Slq;
-          ;;
+        { _arch_incomp 'l list' && _pacman_pkg Slq; } ||
+          _arch_incomp 'o owns' ||
+          compopt +o default
+        ;;
       Q)
-        { _arch_incomp 'g groups' && _pacman_pkg Qg sort; }    ||
-        { _arch_incomp 'p file'   && _pacman_file; }           ||
-          _arch_incomp 'o owns'   || _arch_incomp 'u upgrades' ||
-          _pacman_pkg Qq;;
+        { _arch_incomp 'g groups' && _pacman_pkg Qg sort; } ||
+          { _arch_incomp 'p file' && _pacman_file; } ||
+          { _arch_incomp 's search' && compopt +o default; } ||
+          { _arch_incomp 'u upgrades' && compopt +o default; } ||
+          _arch_incomp 'o owns' ||
+          _pacman_pkg Qq
+        ;;
       S)
-        { _arch_incomp 'g groups' && _pacman_pkg Sg; }      ||
-        { _arch_incomp 'l list'   && _pacman_repo_list; } ||
-          _yay_pkg;;
-      G)
-          _yay_pkg;;
+        { _arch_incomp 'g groups' && _pacman_pkg Sg; } ||
+          { _arch_incomp 'l list' && _pacman_repo_list; } ||
+          { _arch_incomp 's search' && compopt +o default; } ||
+          _yay_pkg
+        ;;
       U)
-          _pacman_file;;
+        _pacman_file
+        ;;
+      G)
+        _yay_pkg
+        ;;
       esac
   fi
   true
 }
 
 _pacman_file() {
-  compopt -o filenames; _filedir 'pkg.tar*'
+  compopt -o filenames
+  _filedir 'pkg.tar*'
 }
 
-complete -F _yay -o default yay
+complete -F _yay yay
 
 # ex:et ts=2 sw=2 ft=sh

+ 5 - 2
completions/zsh

@@ -103,6 +103,10 @@ _pacman_opts_common=(
 	'--gpgflags[Pass arguments to gpg]:gpgflags'
 	'--sudoloop[Loop sudo calls in the background to avoid timeout]'
 	'--nosudoloop[Do not loop sudo calls in the background]'
+	'--searchby[Search for packages using a specified field]'
+	'--sortby[Sort AUR results by a specific field during search]'
+	'--batchinstall[Build multiple AUR packages then install them together]'
+	'--nobatchinstall[Build and install each AUR package one by one]'
 )
 
 # options for passing to _arguments: options for --upgrade commands
@@ -111,7 +115,7 @@ _pacman_opts_pkgfile=(
 	'*--nodeps[Skip dependency checks]'
 	'*--assume-installed[Add virtual package to satisfy dependencies]'
 	'--dbonly[Only remove database entry, do not remove files]'
-	'--force[Overwrite conflicting files]'
+	'--overwrite[Overwrite conflicting files]:file:_files -g "*"'
 	'--needed[Do not reinstall up to date packages]'
 	'--asdeps[mark packages as non-explicitly installed]'
 	'--asexplicit[mark packages as explicitly installed]'
@@ -190,7 +194,6 @@ _pacman_opts_database=(
 _pacman_opts_files=(
 	{-l,--list}'[List the files owned by the queried package]:package:_pacman_completions_all_packages'
 	{-o,--owns}'[Query the package that owns]:files:_files'
-	{-s,--search}'[Search package file names for matching strings]:files:_files'
 	{-x,--regex}'[Enable searching using regular expressions]:regex:'
 	{-y,--refresh}'[Download fresh files databases from the server]'
 	'--machinereadable[Produce machine-readable output]'