django_bash_completion 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # #############################################################################
  2. # This bash script adds tab-completion feature to django-admin and manage.py.
  3. #
  4. # Testing it out without installing
  5. # =================================
  6. #
  7. # To test out the completion without "installing" this, just run this file
  8. # directly, like so:
  9. #
  10. # . ~/path/to/django_bash_completion
  11. #
  12. # Note: There's a dot ('.') at the beginning of that command.
  13. #
  14. # After you do that, tab completion will immediately be made available in your
  15. # current Bash shell. But it won't be available next time you log in.
  16. #
  17. # Installing
  18. # ==========
  19. #
  20. # To install this, point to this file from your .bash_profile, like so:
  21. #
  22. # . ~/path/to/django_bash_completion
  23. #
  24. # Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
  25. #
  26. # Settings will take effect the next time you log in.
  27. #
  28. # Uninstalling
  29. # ============
  30. #
  31. # To uninstall, just remove the line from your .bash_profile and .bashrc.
  32. _django_completion()
  33. {
  34. COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
  35. COMP_CWORD=$COMP_CWORD \
  36. DJANGO_AUTO_COMPLETE=1 $1 ) )
  37. }
  38. # When the django-admin.py deprecation ends, remove django-admin.py.
  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