Django

Code

root/django/trunk/extras/django_bash_completion

Revision 7844, 5.9 kB (checked in by mtredinnick, 3 days ago)

Fixed #5522 -- Moved make-messages, compile-messages and daily-cleanup into django-admin.py.

They are now called "makemessages", "compilemessages" and "cleanup". This is
backwards incompatible for make-messages.py and compile-messages.py, although
the old executables still exist for now and print an error pointing the caller
to the right command to call.

This reduces the number of binaries and man pages Django needs to install.

Patch from Janis Leidel.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
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 # Enable extended pattern matching operators.
35 shopt -s extglob
36
37 _django_completion()
38 {
39     local cur prev opts actions action_shell_opts action_runfcgi_opts
40     COMPREPLY=()
41     cur="${COMP_WORDS[COMP_CWORD]}"
42     prev="${COMP_WORDS[COMP_CWORD-1]}"
43
44     # Standalone options
45     opts="--help --settings --pythonpath --noinput --noreload --format --indent --verbosity --adminmedia --version --locale --domain"
46     # Actions
47     actions="adminindex createcachetable createsuperuser compilemessages \
48              dbshell diffsettings dumpdata flush inspectdb loaddata \
49              makemessages reset runfcgi runserver shell sql sqlall sqlclear \
50              sqlcustom sqlflush sqlindexes sqlreset sqlsequencereset startapp \
51              startproject syncdb test validate"
52     # Action's options
53     action_shell_opts="--plain"
54     action_runfcgi_opts="host port socket method maxspare minspare maxchildren daemonize pidfile workdir"
55
56     if [[ # django-admin.py, django-admin, ./manage, manage.py
57           ( ${COMP_CWORD} -eq 1 &&
58             ( ${COMP_WORDS[0]} == django-admin.py ||
59               ${COMP_WORDS[0]} == django-admin ||
60               ${COMP_WORDS[0]} == ./manage.py ||
61               ${COMP_WORDS[0]} == manage.py ) )
62           ||
63           # python manage.py, /some/path/python manage.py (if manage.py exists)
64           ( ${COMP_CWORD} -eq 2 &&
65             ( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
66             ( $( basename -- ${COMP_WORDS[1]} ) == manage.py) &&
67             ( -r ${COMP_WORDS[1]} ) )
68           ||
69           ( ${COMP_CWORD} -eq 2 &&
70             ( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
71             ( $( basename -- ${COMP_WORDS[1]} ) == django-admin.py) &&
72             ( -r ${COMP_WORDS[1]} ) )
73           ||
74           ( ${COMP_CWORD} -eq 2 &&
75             ( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
76             ( $( basename -- ${COMP_WORDS[1]} ) == django-admin) &&
77             ( -r ${COMP_WORDS[1]} ) ) ]] ; then
78
79         case ${cur} in
80             -*)
81                 COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
82                 action=$COMPREPLY
83                 return 0
84                 ;;
85             *)
86                 COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) )
87                 action=$COMPREPLY
88                 return 0
89                 ;;
90         esac
91     else
92         case ${prev} in
93             adminindex|dumpdata|reset| \
94             sql|sqlall|sqlclear|sqlcustom|sqlindexes| \
95             sqlreset|sqlsequencereset|test)
96                 # App completion
97                 settings=""
98                 # If settings.py in the PWD, use that
99                 if [ -e settings.py ] ; then
100                     settings="$PWD/settings.py"
101                 else
102                     # Use the ENV variable if it is set
103                     if [ $DJANGO_SETTINGS_MODULE ] ; then
104                         settings=$DJANGO_SETTINGS_MODULE
105                     fi
106                 fi
107                 # Couldn't find settings so return nothing
108                 if [ -z $settings ] ; then
109                     COMPREPLY=()
110                 # Otherwise inspect settings.py file
111                 else
112                     apps=`sed -n "/INSTALLED_APPS = (/,/)/p" $settings | \
113                           grep -v "django.contrib" |
114                           sed -n "s/^[ ]*'\(.*\.\)*\(.*\)'.*$/\2 /pg" | \
115                           tr -d "\n"`
116                     COMPREPLY=( $(compgen -W "${apps}" -- ${cur}) )
117                 fi
118                 return 0
119                 ;;
120
121             createcachetable|cleanup|compilemessages|dbshell| \
122             diffsettings|inspectdb|makemessages| \
123             runserver|startapp|startproject|syncdb| \
124             validate)
125                 COMPREPLY=()
126                 return 0
127                 ;;
128             shell)
129                 COMPREPLY=( $(compgen -W "$action_shell_opts" -- ${cur}) )
130                 return 0
131                 ;;
132             runfcgi)
133                 COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
134                 return 0
135                 ;;
136             host*|port*|socket*|method*|maxspare*|minspare*|maxchildren*|daemonize*|pidfile*|workdir*)
137                 if [ "$action"  == "runfcgi" ] ; then
138                     COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
139                     return 0
140                 fi
141                 return 0
142                 ;;
143             *)
144                 #COMPREPLY=( $(compgen -W "auth core" -- ${cur}) )
145                 COMPREPLY=()
146                 return 0
147                 ;;
148         esac
149     fi
150 }
151
152 complete -F _django_completion django-admin.py manage.py django-admin
153
154 # Support for multiple interpreters.
155 unset pythons
156 if command -v whereis &>/dev/null; then
157     python_interpreters=$(whereis python | cut -d " " -f 2-)
158     for python in $python_interpreters; do
159         pythons="${pythons} $(basename -- $python)"
160     done
161     pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
162 else
163     pythons=python   
164 fi
165
166 complete -F _django_completion -o default $pythons
Note: See TracBrowser for help on using the browser.