django_bash_completion 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # #########################################################################
  2. # This bash script adds tab-completion feature to django-admin.py and
  3. # manage.py.
  4. #
  5. # Testing it out without installing
  6. # =================================
  7. #
  8. # To test out the completion without "installing" this, just run this file
  9. # directly, like so:
  10. #
  11. # . ~/path/to/django_bash_completion
  12. #
  13. # Note: There's a dot ('.') at the beginning of that command.
  14. #
  15. # After you do that, tab completion will immediately be made available in your
  16. # current Bash shell. But it won't be available next time you log in.
  17. #
  18. # Installing
  19. # ==========
  20. #
  21. # To install this, point to this file from your .bash_profile, like so:
  22. #
  23. # . ~/path/to/django_bash_completion
  24. #
  25. # Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
  26. #
  27. # Settings will take effect the next time you log in.
  28. #
  29. # Uninstalling
  30. # ============
  31. #
  32. # To uninstall, just remove the line from your .bash_profile and .bashrc.
  33. _django_completion()
  34. {
  35. COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
  36. COMP_CWORD=$COMP_CWORD \
  37. DJANGO_AUTO_COMPLETE=1 $1 ) )
  38. }
  39. complete -F _django_completion -o default django-admin.py manage.py django-admin
  40. _python_django_completion()
  41. {
  42. if [[ ${COMP_CWORD} -ge 2 ]]; then
  43. local PYTHON_EXE=${COMP_WORDS[0]##*/}
  44. if echo "$PYTHON_EXE" | grep -qE "python([3-9]\.[0-9])?"; then
  45. local PYTHON_SCRIPT=${COMP_WORDS[1]##*/}
  46. if echo "$PYTHON_SCRIPT" | grep -qE "manage\.py|django-admin(\.py)?"; then
  47. COMPREPLY=( $( COMP_WORDS=( "${COMP_WORDS[*]:1}" )
  48. COMP_CWORD=$(( COMP_CWORD-1 ))
  49. DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) )
  50. fi
  51. fi
  52. fi
  53. }
  54. # Support for multiple interpreters.
  55. unset pythons
  56. if command -v whereis &>/dev/null; then
  57. python_interpreters=$(whereis python | cut -d " " -f 2-)
  58. for python in $python_interpreters; do
  59. [[ $python != *-config ]] && pythons="${pythons} ${python##*/}"
  60. done
  61. unset python_interpreters
  62. pythons=$(echo "$pythons" | tr " " "\n" | sort -u | tr "\n" " ")
  63. else
  64. pythons=python
  65. fi
  66. complete -F _python_django_completion -o default $pythons
  67. unset pythons