bash 4.1 KB

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