apt 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. # Debian apt(8) completion -*- shell-script -*-
  2. _apt()
  3. {
  4. local sourcesdir="/etc/apt/sources.list.d"
  5. local cur prev words cword
  6. _init_completion || return
  7. local GENERIC_APT_GET_OPTIONS='
  8. -d --download-only
  9. -y --assume-yes
  10. --assume-no
  11. -u --show-upgraded
  12. -m --ignore-missing
  13. -t --target-release
  14. --download
  15. --fix-missing
  16. --ignore-hold
  17. --upgrade
  18. --only-upgrade
  19. --allow-change-held-packages
  20. --allow-remove-essential
  21. --allow-downgrades
  22. --print-uris
  23. --trivial-only
  24. --remove
  25. --arch-only
  26. --allow-unauthenticated
  27. --allow-insecure-repositories
  28. --install-recommends
  29. --install-suggests
  30. --fix-policy
  31. '
  32. # see if the user selected a command already
  33. local COMMANDS=(
  34. "list"
  35. "search"
  36. "show" "showsrc"
  37. "install" "remove" "purge" "autoremove"
  38. "update"
  39. "upgrade" "full-upgrade" "dist-upgrade"
  40. "edit-sources"
  41. "help"
  42. "source" "build-dep"
  43. "clean" "autoclean"
  44. "download" "changelog"
  45. "moo"
  46. "depends" "rdepends"
  47. "policy")
  48. local command i
  49. for (( i=0; i < ${#words[@]}-1; i++ )); do
  50. if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then
  51. command=${words[i]}
  52. break
  53. fi
  54. done
  55. # Complete a -t<SPACE><TAB>
  56. case $prev in
  57. -t|--target-release)
  58. COMPREPLY=( $( compgen -W "$(apt-cache policy | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
  59. return 0
  60. ;;
  61. esac
  62. # supported options per command
  63. if [[ "$cur" == -* ]]; then
  64. case $command in
  65. install|remove|purge|upgrade|dist-upgrade|full-upgrade|autoremove)
  66. COMPREPLY=( $( compgen -W '--show-progress
  67. --fix-broken --purge --verbose-versions --auto-remove
  68. -s --simulate --dry-run
  69. --download
  70. --fix-missing
  71. --fix-policy
  72. --ignore-hold
  73. --force-yes
  74. --trivial-only
  75. --reinstall --solver
  76. -t --target-release'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
  77. return 0
  78. ;;
  79. update)
  80. COMPREPLY=( $( compgen -W '--list-cleanup
  81. --print-uris
  82. --allow-insecure-repositories
  83. ' -- "$cur" ) )
  84. return 0
  85. ;;
  86. list)
  87. COMPREPLY=( $( compgen -W '--installed --upgradable
  88. --manual-installed
  89. -v --verbose
  90. -a --all-versions
  91. -t --target-release
  92. ' -- "$cur" ) )
  93. return 0
  94. ;;
  95. show)
  96. COMPREPLY=( $( compgen -W '-a --all-versions
  97. ' -- "$cur" ) )
  98. return 0
  99. ;;
  100. depends|rdepends)
  101. COMPREPLY=( $( compgen -W '-i
  102. --important
  103. --installed
  104. --pre-depends
  105. --depends
  106. --recommends
  107. --suggests
  108. --replaces
  109. --breaks
  110. --conflicts
  111. --enhances
  112. --recurse
  113. --implicit' -- "$cur" ) )
  114. return 0
  115. ;;
  116. search)
  117. COMPREPLY=( $( compgen -W '
  118. -n --names-only
  119. -f --full' -- "$cur" ) )
  120. return 0
  121. ;;
  122. showsrc)
  123. COMPREPLY=( $( compgen -W '
  124. --only-source' -- "$cur" ) )
  125. return 0
  126. ;;
  127. source)
  128. COMPREPLY=( $( compgen -W '
  129. -s --simulate --dry-run
  130. -b --compile --build
  131. -P --build-profiles
  132. --diff-only --debian-only
  133. --tar-only
  134. --dsc-only
  135. -t --target-release
  136. '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
  137. return 0
  138. ;;
  139. build-dep)
  140. COMPREPLY=( $( compgen -W '
  141. -a --host-architecture
  142. -s --simulate --dry-run
  143. -P --build-profiles
  144. -t --target-release
  145. --purge --solver
  146. '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
  147. return 0
  148. ;;
  149. moo)
  150. COMPREPLY=( $( compgen -W '
  151. --color
  152. ' -- "$cur" ) )
  153. return 0
  154. ;;
  155. clean|autocleean)
  156. COMPREPLY=( $( compgen -W '
  157. -s --simulate --dry-run
  158. ' -- "$cur" ) )
  159. return 0
  160. ;;
  161. esac
  162. fi
  163. # specific command arguments
  164. if [[ -n $command ]]; then
  165. case $command in
  166. remove|purge|autoremove)
  167. if [[ -f /etc/debian_version ]]; then
  168. # Debian system
  169. COMPREPLY=( $( \
  170. _xfunc dpkg _comp_dpkg_installed_packages $cur ) )
  171. else
  172. # assume RPM based
  173. _xfunc rpm _rpm_installed_packages
  174. fi
  175. return 0
  176. ;;
  177. show|list|download|changelog|depends|rdepends)
  178. COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
  179. 2> /dev/null ) )
  180. return 0
  181. ;;
  182. install)
  183. COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
  184. 2> /dev/null ) )
  185. _filedir "*.deb"
  186. return 0
  187. ;;
  188. source|build-dep|showsrc|policy)
  189. COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
  190. 2> /dev/null ) $( apt-cache dumpavail | \
  191. command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
  192. return 0
  193. ;;
  194. edit-sources)
  195. COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \
  196. -- "$cur" ) )
  197. return 0
  198. ;;
  199. moo)
  200. COMPREPLY=( $( compgen -W 'moo' \
  201. -- "$cur" ) )
  202. return 0
  203. ;;
  204. esac
  205. fi
  206. # no command yet, show what commands we have
  207. if [ "$command" = "" ]; then
  208. COMPREPLY=( $( compgen -W '${COMMANDS[@]}' -- "$cur" ) )
  209. fi
  210. return 0
  211. } &&
  212. complete -F _apt apt
  213. # ex: ts=4 sw=4 et filetype=sh