bash 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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_pkg() {
  27. _arch_compgen "$(
  28. if [[ $2 ]]; then
  29. \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u
  30. else
  31. \pacman -$1 2>/dev/null
  32. fi
  33. )"
  34. }
  35. _yay_pkg() {
  36. [ -z "$cur" ] && return
  37. _arch_compgen "$(yay -Pc)"
  38. }
  39. _pacman_repo_list() {
  40. _arch_compgen "$(pacman-conf --repo-list)"
  41. }
  42. _yay() {
  43. local common core cur database files prev query remove sync upgrade o
  44. local yays show getpkgbuild
  45. COMPREPLY=()
  46. _get_comp_words_by_ref cur prev
  47. database=('asdeps asexplicit')
  48. files=('list machinereadable owns search refresh regex' 'l o s x y')
  49. query=('changelog check deps explicit file foreign groups info list native owns
  50. search unrequired upgrades' 'c e g i k l m n o p s t u')
  51. remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u')
  52. sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup
  53. info list needed nodeps assume-installed print refresh recursive search sysupgrade'
  54. 'c g i l p s u w y')
  55. upgrade=('asdeps asexplicit force needed nodeps assume-installed print recursive' 'p')
  56. common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile
  57. noconfirm noprogressbar noscriptlet quiet root verbose')
  58. #yay stuff
  59. common+=('makepkg pacman tar git gpg gpgflags config requestsplitn sudoloop nosudoloop
  60. redownload noredownload redownloadall rebuild rebuildall rebuildtree norebuild
  61. sortby answerclean answerdiff answeredit answerupgrade noanswerclean noanswerdiff
  62. noansweredit noanswerupgrade cleanmenu diffmenu editmenu upgrademenu cleanafter nocleanafter
  63. nocleanmenu nodiffmenu noupgrademenu provides noprovides pgpfetch nopgpfetch
  64. useask nouseask combinedupgrade nocombinedupgrade aur repo makepkgconf
  65. nomakepkgconf askremovemake removemake noremovemake completioninterval aururl'
  66. '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. ##yay stuff
  69. yays=('clean gendb' 'c')
  70. show=('complete defaultconfig currentconfig stats news' 'c d g s w')
  71. getpkgbuild=('force' 'f')
  72. for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade' 'Y yays' 'P show' 'G getpkgbuild'; do
  73. _arch_incomp "$o" && break
  74. done
  75. if [[ $? != 0 ]]; then
  76. _arch_ptr2comp core
  77. elif [[ ! $prev =~ ^-\w*[Vbhr] &&
  78. ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]
  79. then
  80. [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
  81. case ${o% *} in
  82. D|R)
  83. _pacman_pkg Qq;;
  84. F)
  85. _arch_incomp 'l list' && _pacman_pkg Slq;
  86. ;;
  87. Q)
  88. { _arch_incomp 'g groups' && _pacman_pkg Qg sort; } ||
  89. { _arch_incomp 'p file' && _pacman_file; } ||
  90. _arch_incomp 'o owns' || _arch_incomp 'u upgrades' ||
  91. _pacman_pkg Qq;;
  92. S)
  93. { _arch_incomp 'g groups' && _pacman_pkg Sg; } ||
  94. { _arch_incomp 'l list' && _pacman_repo_list; } ||
  95. _yay_pkg;;
  96. G)
  97. _yay_pkg;;
  98. U)
  99. _pacman_file;;
  100. esac
  101. fi
  102. true
  103. }
  104. _pacman_file() {
  105. compopt -o filenames; _filedir 'pkg.tar*'
  106. }
  107. complete -F _yay -o default yay
  108. # ex:et ts=2 sw=2 ft=sh