bash 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 web
  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 aur repo'
  57. 'c g i l p s u w y a N')
  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
  64. redownload noredownload redownloadall rebuild rebuildall rebuildtree norebuild sortby
  65. singlelineresults doublelineresults answerclean answerdiff answeredit answerupgrade noanswerclean noanswerdiff
  66. noansweredit noanswerupgrade cleanmenu diffmenu editmenu cleanafter keepsrc
  67. provides pgpfetch
  68. useask combinedupgrade aur repo makepkgconf
  69. nomakepkgconf askremovemake askyesremovemake removemake noremovemake completioninterval aururl aurrpcurl
  70. searchby batchinstall'
  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 print' 'f p')
  75. web=('vote unvote' 'v u')
  76. for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade' 'Y yays' 'P show' 'G getpkgbuild' 'W web'; do
  77. _arch_incomp "$o" && break
  78. done
  79. if [[ $? != 0 ]]; then
  80. _arch_ptr2comp core
  81. elif [[ ! $prev =~ ^-[[:alnum:]_]*[Vbhr] && ! $prev == --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]]; then
  82. [[ $cur == -* ]] && _arch_ptr2comp ${o#* } common ||
  83. case ${o% *} in
  84. D | R)
  85. _pacman_pkg Qq
  86. ;;
  87. F)
  88. { _arch_incomp 'l list' && _pacman_pkg Slq; } ||
  89. _arch_incomp 'o owns' ||
  90. compopt +o default
  91. ;;
  92. Q)
  93. { _arch_incomp 'g groups' && _pacman_pkg Qg sort; } ||
  94. { _arch_incomp 'p file' && _pacman_file; } ||
  95. { _arch_incomp 's search' && compopt +o default; } ||
  96. { _arch_incomp 'u upgrades' && compopt +o default; } ||
  97. _arch_incomp 'o owns' ||
  98. _pacman_pkg Qq
  99. ;;
  100. S)
  101. { _arch_incomp 'g groups' && _pacman_pkg Sg; } ||
  102. { _arch_incomp 'l list' && _pacman_repo_list; } ||
  103. { _arch_incomp 's search' && compopt +o default; } ||
  104. _yay_pkg
  105. ;;
  106. U)
  107. _pacman_file
  108. ;;
  109. G)
  110. _yay_pkg
  111. ;;
  112. W)
  113. _yay_pkg
  114. ;;
  115. esac
  116. fi
  117. true
  118. }
  119. _pacman_file() {
  120. compopt -o filenames
  121. _filedir 'pkg.*'
  122. }
  123. complete -F _yay yay
  124. # ex:et ts=2 sw=2 ft=sh