| 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 |
|
|---|
| 34 |
_django_completion() |
|---|
| 35 |
{ |
|---|
| 36 |
local cur prev opts actions action_shell_opts action_runfcgi_opts |
|---|
| 37 |
COMPREPLY=() |
|---|
| 38 |
cur="${COMP_WORDS[COMP_CWORD]}" |
|---|
| 39 |
prev="${COMP_WORDS[COMP_CWORD-1]}" |
|---|
| 40 |
|
|---|
| 41 |
# Standalone options |
|---|
| 42 |
opts="--help --settings --pythonpath --version" |
|---|
| 43 |
# Actions |
|---|
| 44 |
actions="adminindex createcachetable dbshell diffsettings \ |
|---|
| 45 |
inspectdb install reset runfcgi runserver \ |
|---|
| 46 |
shell sql sqlall sqlclear sqlindexes sqlinitialdata \ |
|---|
| 47 |
sqlreset sqlsequencereset startapp startproject \ |
|---|
| 48 |
syncdb validate" |
|---|
| 49 |
# Action's options |
|---|
| 50 |
action_shell_opts="--plain" |
|---|
| 51 |
action_runfcgi_opts="host port socket method maxspare minspare maxchildren daemonize pidfile workdir" |
|---|
| 52 |
|
|---|
| 53 |
if [[ # django-admin.py, ./manage, manage.py |
|---|
| 54 |
( ${COMP_CWORD} -eq 1 && |
|---|
| 55 |
( ${COMP_WORDS[0]} == django-admin.py || |
|---|
| 56 |
${COMP_WORDS[0]} == ./manage.py || |
|---|
| 57 |
${COMP_WORDS[0]} == manage.py ) ) |
|---|
| 58 |
|| |
|---|
| 59 |
# python manage.py, /some/path/python manage.py (if manage.py exists) |
|---|
| 60 |
( ${COMP_CWORD} -eq 2 && |
|---|
| 61 |
( $( basename ${COMP_WORDS[0]} ) == python ) && |
|---|
| 62 |
( $( basename ${COMP_WORDS[1]} ) == manage.py) && |
|---|
| 63 |
( -r ${COMP_WORDS[1]} ) ) ]] ; then |
|---|
| 64 |
|
|---|
| 65 |
case ${cur} in |
|---|
| 66 |
-*) |
|---|
| 67 |
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
|---|
| 68 |
action=$COMPREPLY |
|---|
| 69 |
return 0 |
|---|
| 70 |
;; |
|---|
| 71 |
*) |
|---|
| 72 |
COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) ) |
|---|
| 73 |
action=$COMPREPLY |
|---|
| 74 |
return 0 |
|---|
| 75 |
;; |
|---|
| 76 |
esac |
|---|
| 77 |
else |
|---|
| 78 |
case ${prev} in |
|---|
| 79 |
adminindex|install|reset| \ |
|---|
| 80 |
sql|sqlall|sqlclear|sqlindexes| \ |
|---|
| 81 |
sqlinitialdata|sqlreset|sqlsequencereset) |
|---|
| 82 |
# App completion isn't yet implemented, but here's where that |
|---|
| 83 |
# would go. |
|---|
| 84 |
# COMPREPLY=( $(compgen -W "auth core" -- ${cur}) ) |
|---|
| 85 |
COMPREPLY=() |
|---|
| 86 |
return 0 |
|---|
| 87 |
;; |
|---|
| 88 |
|
|---|
| 89 |
createcachetable|dbshell|diffsettings| \ |
|---|
| 90 |
inspectdb|runserver|startapp|startproject|syncdb| \ |
|---|
| 91 |
validate) |
|---|
| 92 |
COMPREPLY=() |
|---|
| 93 |
return 0 |
|---|
| 94 |
;; |
|---|
| 95 |
shell) |
|---|
| 96 |
COMPREPLY=( $(compgen -W "$action_shell_opts" -- ${cur}) ) |
|---|
| 97 |
return 0 |
|---|
| 98 |
;; |
|---|
| 99 |
runfcgi) |
|---|
| 100 |
COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) ) |
|---|
| 101 |
return 0 |
|---|
| 102 |
;; |
|---|
| 103 |
host*|port*|socket*|method*|maxspare*|minspare*|maxchildren*|daemonize*|pidfile*|workdir*) |
|---|
| 104 |
if [ "$action" == "runfcgi" ] ; then |
|---|
| 105 |
COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) ) |
|---|
| 106 |
return 0 |
|---|
| 107 |
fi |
|---|
| 108 |
return 0 |
|---|
| 109 |
;; |
|---|
| 110 |
*) |
|---|
| 111 |
#COMPREPLY=( $(compgen -W "auth core" -- ${cur}) ) |
|---|
| 112 |
COMPREPLY=() |
|---|
| 113 |
return 0 |
|---|
| 114 |
;; |
|---|
| 115 |
esac |
|---|
| 116 |
fi |
|---|
| 117 |
} |
|---|
| 118 |
|
|---|
| 119 |
complete -F _django_completion django-admin.py manage.py |
|---|