bash-completion 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # This file is in the public domain.
  2. _arch_compgen() {
  3. local i r
  4. COMPREPLY=($(compgen -W '$*' -- "$cur"))
  5. for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
  6. for r in ${!COMPREPLY[@]}; do
  7. if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
  8. unset 'COMPREPLY[r]'; break
  9. fi
  10. done
  11. done
  12. }
  13. _arch_ptr2comp() {
  14. local list= x y
  15. for x; do
  16. for y in '0 --' '1 -'; do
  17. eval 'set -- ${'$x'[${y% *}]}'
  18. list+=\ ${@/#/${y#* }}
  19. done
  20. done
  21. _arch_compgen $list
  22. }
  23. _arch_incomp() {
  24. local r="\s-(-${1#* }\s|\w*${1% *})"; [[ $COMP_LINE =~ $r ]]
  25. }
  26. _pacman_keyids() {
  27. \pacman-key --list-keys 2>/dev/null | awk '
  28. $1 == "pub" {
  29. # key id
  30. split($2, a, "/"); print a[2]
  31. }
  32. $1 == "uid" {
  33. # email
  34. if (match($NF, /<[^>]+>/))
  35. print substr($NF, RSTART + 1, RLENGTH - 2)
  36. }'
  37. }
  38. _pacman_pkg() {
  39. _arch_compgen "$(
  40. if [[ $2 ]]; then
  41. \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u
  42. else
  43. \pacman -$1 2>/dev/null
  44. fi
  45. )"
  46. }
  47. _yay() {
  48. local common core cur database prev query remove sync upgrade yays print o
  49. COMPREPLY=()
  50. _get_comp_words_by_ref cur prev
  51. database=('asdeps asexplicit')
  52. files=('list machinereadable owns search refresh regex' 'l o s x y')
  53. query=('changelog check deps explicit file foreign groups info list owns
  54. search unrequired upgrades' 'c e g i k l m o p s t u')
  55. remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u')
  56. sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup
  57. info list needed nodeps assume-installed print refresh recursive search sysupgrade'
  58. 'c g i l p s u w y')
  59. upgrade=('asdeps asexplicit force needed nodeps assume-installed print recursive' 'p')
  60. yays=('clean gendb' 'c')
  61. print=('complete defaultconfig config numberupgrades stats upgrades' 'c d g n
  62. s u')
  63. common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
  64. noconfirm noprogressbar noscriptlet quiet save mflags buildir editor
  65. makepkg pacman tar git config requestsplitn sudoloop nosudoloop
  66. redownload noredownload redownloadall root verbose' 'b d h q r v')
  67. core=('database files help query remove sync upgrade version' 'D F Q R S U V h')
  68. for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade' 'Y yays' 'P print'; do
  69. _arch_incomp "$o" && break
  70. done
  71. if [[ $? != 0 ]]; then
  72. _arch_ptr2comp core
  73. elif [[ ! $prev =~ ^-\w*[Vbhr] &&
  74. ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]
  75. then
  76. [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
  77. case ${o% *} in
  78. D|R)
  79. _pacman_pkg Qq;;
  80. F)
  81. _arch_incomp 'l list' && _pacman_pkg Slq;
  82. ;;
  83. Q)
  84. { _arch_incomp 'g groups' && _pacman_pkg Qg sort; } ||
  85. { _arch_incomp 'p file' && _pacman_file; } ||
  86. _arch_incomp 'o owns' || _arch_incomp 'u upgrades' ||
  87. _pacman_pkg Qq;;
  88. S)
  89. { _arch_incomp 'g groups' && _pacman_pkg Sg; } ||
  90. { _arch_incomp 'l list' && _arch_compgen "$(yay -Pc | \sort -u)"; } ||
  91. _arch_compgen "$(yay -Pc )";;
  92. U)
  93. _pacman_file;;
  94. esac
  95. fi
  96. true
  97. }
  98. _pacman_file() {
  99. compopt -o filenames; _filedir 'pkg.tar*'
  100. }
  101. complete -F _yay -o default yay
  102. # ex:et ts=2 sw=2 ft=sh