shell dot on steroids https://pagure.io/shellfu

complete.bash 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. __sfpath() {
  2. local cur # current word
  3. local prev # previous word
  4. local lopts # long options
  5. COMPREPLY=()
  6. cur="${COMP_WORDS[COMP_CWORD]}"
  7. prev="${COMP_WORDS[COMP_CWORD-1]}"
  8. lopts="--version --version-semver"
  9. COMPREPLY=(
  10. $(compgen -W "$lopts" -- "$cur")
  11. )
  12. }
  13. __sfdoc() {
  14. local cur # current word
  15. local prev # previous word
  16. local opts # options
  17. local rest # rest of options
  18. local cmds # commands
  19. local crtext # text for COMPREPLY
  20. COMPREPLY=()
  21. cur="${COMP_WORDS[COMP_CWORD]}"
  22. prev="${COMP_WORDS[COMP_CWORD-1]}"
  23. opts="-d -O -a -I -o --debug --object --all --include --only-from --encoding --name"
  24. cmds="-l -L -s -e --ls --lsvar --lsfun --which --lsmod --src --export"
  25. rest="${opts/$prev/}"
  26. crtext=$(
  27. case $prev in
  28. sfdoc) echo "$opts $cmds"; __sfdoc_compgen_M2 ;;
  29. -d|--debug) echo "$rest $cmds"; __sfdoc_compgen_M3 ;;
  30. -O|--object) echo "$rest $cmds"; __sfdoc_compgen_M3 ;;
  31. -a|--all) echo "$rest $cmds"; __sfdoc_compgen_M3 ;;
  32. -I|--include) compgen -o nospace -d -- "$cur" ;;
  33. -o|--only-from) compgen -o nospace -d -- "$cur" ;;
  34. --encoding) iconv -l | tr '[:upper:]' '[:lower:]' | sed s://$:: ;;
  35. --name) echo "" ;;
  36. -e|--export) echo "markdown manpage pod" ;;
  37. -s|--src) __sfdoc_compgen_M3 ;;
  38. -l|--ls) __sfdoc_compgen_M2 ;;
  39. --lsfun|--lsvar) __sfdoc_compgen_M2 ;;
  40. --which) sfdoc --lsmod ;;
  41. markdown|manpage|pod) __sfdoc_cwhas "-e" "--export" \
  42. && __sfdoc_compgen_M3 ;;
  43. esac
  44. )
  45. COMPREPLY=(
  46. $(compgen -W "$crtext" -- "$cur")
  47. )
  48. }
  49. __sfdoc_compgen_M2() {
  50. #
  51. # Produce list of possible MODULE values
  52. #
  53. case $cur in
  54. */*) compgen -f -o nospace -- "$cur" ;;
  55. *) sfdoc --lsmod ;;
  56. esac
  57. }
  58. __sfdoc_cwhas() {
  59. #
  60. # True if COMP_WORDS already has word $1 or $2...
  61. #
  62. local word
  63. local want
  64. for want in "$@"; do
  65. for word in "${COMP_WORDS[@]}"; do
  66. test "$word" == "$want" && return 0
  67. done
  68. done
  69. return 1
  70. }
  71. __sfdoc_compgen_M3() {
  72. #
  73. # Produce list of possible MODULE values
  74. #
  75. if __sfdoc_cwhas "-O" "--object"; then
  76. sfdoc --ls | cut -d: -f2
  77. else
  78. __sfdoc_compgen_M2
  79. fi
  80. }
  81. complete -F __sfpath sfpath
  82. complete -F __sfdoc sfdoc