Django

Code

root/django/tags/releases/0.96/extras/django_bash_completion

Revision 4677, 5.3 kB (checked in by mtredinnick, 2 years ago)

Fixed #1240 -- Fixed portability problem in bash completion script. Thanks,
Paolo.

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