Guest User

Clyde Bash completion

a guest
Apr 13th, 2010
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.58 KB | None | 0 0
  1. # vim: set ft=sh ts=2 sw=2 et:
  2. # file: /etc/bash_completion.d/clyde
  3.  
  4. # Bash completion for clyde
  5. # Original: Manolis Tzanidakis <[email protected]>
  6. # Ported by: Andrwe Lord Weber lord-weber-andrwe <at> renona-studios <dot> org
  7. #
  8. # Distributed under the terms of the GNU General Public License, v2 or later.
  9. #
  10. # small upgrade by Berseker <berseker86 at gmail dot com> (adding .tar.xz file support for -U function)
  11.  
  12. ## initial functions
  13.  
  14. rem_selected ()
  15. {
  16. # (Adapted from bash_completion by Ian Macdonald <[email protected]>)
  17. # This removes any options from the list of completions that have
  18. # already been specified on the command line.
  19. COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
  20. (while read -d ' ' i; do
  21. [ "${i}" == "" ] && continue
  22. # flatten array with spaces on either side,
  23. # otherwise we cannot grep on word boundaries of
  24. # first and last word
  25. COMPREPLY=" ${COMPREPLY[@]} "
  26. # remove word from list of completions
  27. COMPREPLY=(${COMPREPLY/ ${i%% *} / })
  28. done
  29. echo ${COMPREPLY[@]})))
  30. return 0
  31. }
  32.  
  33. _available_repos ()
  34. {
  35. COMPREPLY=( $( compgen -W "$(grep '\[' /etc/clyde.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )" -- $cur ) )
  36. }
  37.  
  38. _installed_pkgs ()
  39. {
  40. local installed_pkgs
  41. installed_pkgs=$( ls /var/lib/pacman/local/ )
  42. COMPREPLY=( $( compgen -W "$( for i in $installed_pkgs; do echo ${i%-*-*}; done )" -- $cur ) )
  43. }
  44.  
  45. _available_pkgs ()
  46. {
  47. #find balks easilly on a find /foo/*/* type dir, especially one like
  48. # /var/lib/pacman/*/*
  49. # This little change-up removes the find *and* only uses enabled repos
  50. local available_pkgs
  51. local enabled_repos
  52. enabled_repos=$( grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
  53. available_pkgs=$( for r in $enabled_repos; do echo /var/lib/pacman/sync/$r/*; done )
  54. COMPREPLY=( $( compgen -W "$( for i in $available_pkgs; do j=${i##*/}; echo ${j%-*-*}; done )" -- $cur ) )
  55. }
  56.  
  57. _installed_groups ()
  58. {
  59. local installed_groups
  60. installed_groups=$( find /var/lib/pacman/local -name desc -exec sed -ne '/%GROUPS%/,/^$/{//d; p}' {} \; | sort -u )
  61. COMPREPLY=( $( compgen -W "$( for i in $installed_groups; do echo ${i%-*-*}; done )" -- $cur ) )
  62. }
  63.  
  64. _available_groups ()
  65. {
  66. #find balks easilly on a find /foo/*/* type dir, especially one like
  67. # /var/lib/pacman/*/*
  68. # This little change-up removes the find *and* only uses enabled repos
  69. local available_groups
  70. local enabled_repos
  71. enabled_repos=$( grep '\[' /etc/clyde.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
  72. available_groups=$( for r in $enabled_repos; do sed '/%GROUPS%/,/^$/{//d; p}' /var/lib/pacman/sync/$r/*/desc | sort -u; done )
  73. COMPREPLY=( $( compgen -W "$( for i in $available_groups; do echo ${i%-*-*}; done )" -- $cur ) )
  74. }
  75.  
  76. ## makepkg completion
  77.  
  78. _makepkg ()
  79. {
  80. local cur prev
  81. COMPREPLY=()
  82. cur=${COMP_WORDS[COMP_CWORD]}
  83. prev=${COMP_WORDS[COMP_CWORD-1]}
  84.  
  85. case "$prev" in
  86. -p)
  87. _filedir
  88. return 0
  89. ;;
  90. --help|--cleancache)
  91. COMPREPLY=''
  92. return 0
  93. ;;
  94. esac
  95.  
  96. if [[ "$cur" == -* ]]; then
  97. COMPREPLY=( $( compgen -W '\
  98. -A --ignorearch \
  99. -b --builddeps \
  100. -c --clean \
  101. -C --cleancache \
  102. -d --nodeps \
  103. -e --noextract \
  104. -f --force \
  105. -g --geninteg \
  106. -h --help \
  107. -i --install \
  108. -L --log \
  109. -m --nocolor \
  110. -o --nobuild \
  111. -p \
  112. -r --rmdeps \
  113. -s --syncdeps \
  114. --asroot \
  115. --source \
  116. --noconfirm \
  117. --noprogressbar' -- $cur ) )
  118. fi
  119.  
  120. rem_selected
  121. }
  122. complete -o default -F _makepkg makepkg
  123.  
  124. ## pacman completion
  125.  
  126. _instring ()
  127. {
  128. str="${1}"
  129. shift 1
  130. for c in "${@}"; do
  131. if [ $(expr index "${str}" "${c}") -gt 0 ]; then
  132. return 0
  133. fi
  134. done
  135. return 1
  136. }
  137.  
  138. _clyde ()
  139. {
  140. local a arg toparse op mod cur
  141. COMPREPLY=()
  142.  
  143. # This argument parsing is done so we can check for flag existance later
  144. # right now it's a tad crappy, but does the job
  145. for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do
  146. a=${COMP_WORDS[i]}
  147. arg="${a:0:2}"
  148. toparse="${a:2}"
  149.  
  150. case "${arg}" in
  151. -@(U|R|S|Q|h|V))
  152. op="${arg/-}"
  153. mod="${mod}${a:2}"
  154. ;;
  155. --)
  156. arg="${a:2}"
  157. case "${arg}" in
  158. remove) op="R" ;;
  159. upgrade) op="U" ;;
  160. query) op="Q" ;;
  161. sync) op="S" ;;
  162. help) op="h" ;;
  163. version) op="V" ;;
  164. verbose) mod="${mod}v" ;;
  165. root) mod="${mod}r" ;;
  166. dbpath) mod="${mod}b" ;;
  167. nodeps) mod="${mod}d" ;;
  168. force) mod="${mod}f" ;;
  169. groups) mod="${mod}g" ;;
  170. info) mod="${mod}i" ;;
  171. list) mod="${mod}l" ;;
  172. print-uris) mod="${mod}p" ;;
  173. search) mod="${mod}s" ;;
  174. sysupgrade) mod="${mod}u" ;;
  175. upgrades) mod="${mod}u" ;;
  176. downloadonly) mod="${mod}w" ;;
  177. refresh) mod="${mod}y" ;;
  178. changelog) mod="${mod}c" ;;
  179. deps) mod="${mod}d" ;;
  180. explicit) mod="${mod}e" ;;
  181. unrequired) mod="${mod}t" ;;
  182. foreign) mod="${mod}m" ;;
  183. owns) mod="${mod}o" ;;
  184. file) mod="${mod}p" ;;
  185. search) mod="${mod}s" ;;
  186. upgrades) mod="${mod}u" ;;
  187. cascade) mod="${mod}c" ;;
  188. check) mod="${mod}k" ;;
  189. dbonly) mod="${mod}k" ;;
  190. nosave) mod="${mod}n" ;;
  191. recursive) mod="${mod}s" ;;
  192. unneeded) mod="${mod}u" ;;
  193. esac ;;
  194. *) toparse="${a}" ;;
  195. esac
  196.  
  197. arglen=$(( ${#toparse}-1 ))
  198. for c in $(seq 0 "${arglen}"); do
  199. arg=${toparse:$c:1}
  200. [ "${arg}" != "-" ] && mod="${mod}${arg}"
  201. done
  202. done
  203.  
  204. cur=${COMP_WORDS[COMP_CWORD]}
  205.  
  206. if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
  207. COMPREPLY=( $( compgen -W '\
  208. -h --help \
  209. -Q --query \
  210. -R --remove \
  211. -S --sync \
  212. -U --upgrade \
  213. -V --version \
  214. ' -- $cur ) )
  215. rem_selected
  216. return 0
  217. fi
  218.  
  219. if [[ "$cur" == -* ]]; then
  220. case "${op}" in
  221. U)
  222. COMPREPLY=( $( compgen -W '\
  223. --asdeps \
  224. --asexplicit \
  225. -d --nodeps \
  226. -f --force \
  227. -h --help \
  228. --config \
  229. --logfile \
  230. --noconfirm \
  231. --noprogressbar \
  232. --noscriptlet \
  233. -v --verbose \
  234. -r --root \
  235. -b --dbpath \
  236. --cachedir \
  237. ' -- $cur ) )
  238. return 0
  239. ;;
  240. R)
  241. COMPREPLY=( $( compgen -W '\
  242. -c --cascade \
  243. -d --nodeps \
  244. -h --help \
  245. -k --dbonly \
  246. -n --nosave \
  247. -s --recursive \
  248. -u --unneeded \
  249. --config \
  250. --logfile \
  251. --noconfirm \
  252. --noprogressbar \
  253. --noscriptlet \
  254. -v --verbose \
  255. -r --root \
  256. -b --dbpath \
  257. --cachedir \
  258. ' -- $cur ) )
  259. return 0
  260. ;;
  261. S)
  262. COMPREPLY=( $( compgen -W '\
  263. --asdeps \
  264. --asexplicit \
  265. -c --clean \
  266. -d --nodeps \
  267. -f --force \
  268. -g --groups \
  269. -h --help \
  270. -i --info \
  271. -l --list \
  272. -p --print-uris \
  273. -s --search \
  274. -u --sysupgrade \
  275. -w --downloadonly \
  276. -y --refresh \
  277. --needed \
  278. --ignore \
  279. --ignoregroup \
  280. --config \
  281. --logfile \
  282. --noconfirm \
  283. --noprogressbar \
  284. --noscriptlet \
  285. -v --verbose \
  286. -r --root \
  287. -b --dbpath \
  288. --cachedir \
  289. ' -- $cur ) )
  290. return 0
  291. ;;
  292. Q)
  293. COMPREPLY=( $( compgen -W '\
  294. -c --changelog \
  295. -d --deps \
  296. -e --explicit \
  297. -g --groups \
  298. -h --help \
  299. -i --info \
  300. -k --check \
  301. -l --list \
  302. -m --foreign \
  303. -o --owns \
  304. -p --file \
  305. -s --search \
  306. -t --unrequired \
  307. -u --upgrades \
  308. --config \
  309. --logfile \
  310. --noconfirm \
  311. --noprogressbar \
  312. --noscriptlet \
  313. -v --verbose \
  314. -r --root \
  315. -b --dbpath \
  316. --cachedir \
  317. ' -- $cur ) )
  318. return 0
  319. ;;
  320. esac
  321. rem_selected
  322. else
  323. case "${op}" in
  324. U)
  325. COMPREPLY=( $( compgen -d -- "$cur" ) \
  326. $( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) \
  327. $( compgen -f -X '!*.pkg.tar.xz' -- "$cur" ) )
  328. return 0
  329. ;;
  330. h|V)
  331. COMPREPLY=''
  332. return 0
  333. ;;
  334. Q)
  335. if _instring $mod g; then
  336. _installed_groups
  337. elif _instring $mod o; then
  338. COMPREPLY=( $( compgen -d -- "$cur" ) \
  339. $( compgen -f -- "$cur" ) )
  340. elif _instring $mod p; then
  341. COMPREPLY=( $( compgen -d -- "$cur" ) \
  342. $( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) \
  343. $( compgen -f -X '!*.pkg.tar.xz' -- "$cur" ) )
  344. elif _instring $mod u; then
  345. COMPREPLY=''
  346. return 0
  347. else
  348. _installed_pkgs
  349. fi
  350. return 0
  351. ;;
  352. R)
  353. _installed_pkgs
  354. return 0
  355. ;;
  356. S)
  357. if _instring $mod l; then
  358. _available_repos
  359. else
  360. _available_pkgs
  361. fi
  362. return 0
  363. ;;
  364. esac
  365. fi
  366.  
  367. rem_selected
  368. }
  369. complete -o filenames -F _clyde clyde
Advertisement
Add Comment
Please, Sign In to add comment