mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
3cfa3cbd07
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. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7844 bcc190cf-cafb-0310-a4f2-bffc1f526a37
167 lines
5.9 KiB
Plaintext
Executable File
167 lines
5.9 KiB
Plaintext
Executable File
# #########################################################################
|
|
# This bash script adds tab-completion feature to django-admin.py and
|
|
# manage.py.
|
|
#
|
|
# Testing it out without installing
|
|
# =================================
|
|
#
|
|
# To test out the completion without "installing" this, just run this file
|
|
# directly, like so:
|
|
#
|
|
# . ~/path/to/django_bash_completion
|
|
#
|
|
# Note: There's a dot ('.') at the beginning of that command.
|
|
#
|
|
# After you do that, tab completion will immediately be made available in your
|
|
# current Bash shell. But it won't be available next time you log in.
|
|
#
|
|
# Installing
|
|
# ==========
|
|
#
|
|
# To install this, point to this file from your .bash_profile, like so:
|
|
#
|
|
# . ~/path/to/django_bash_completion
|
|
#
|
|
# Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
|
|
#
|
|
# Settings will take effect the next time you log in.
|
|
#
|
|
# Uninstalling
|
|
# ============
|
|
#
|
|
# To uninstall, just remove the line from your .bash_profile and .bashrc.
|
|
|
|
# Enable extended pattern matching operators.
|
|
shopt -s extglob
|
|
|
|
_django_completion()
|
|
{
|
|
local cur prev opts actions action_shell_opts action_runfcgi_opts
|
|
COMPREPLY=()
|
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
|
|
# Standalone options
|
|
opts="--help --settings --pythonpath --noinput --noreload --format --indent --verbosity --adminmedia --version --locale --domain"
|
|
# Actions
|
|
actions="adminindex createcachetable createsuperuser compilemessages \
|
|
dbshell diffsettings dumpdata flush inspectdb loaddata \
|
|
makemessages reset runfcgi runserver shell sql sqlall sqlclear \
|
|
sqlcustom sqlflush sqlindexes sqlreset sqlsequencereset startapp \
|
|
startproject syncdb test validate"
|
|
# Action's options
|
|
action_shell_opts="--plain"
|
|
action_runfcgi_opts="host port socket method maxspare minspare maxchildren daemonize pidfile workdir"
|
|
|
|
if [[ # django-admin.py, django-admin, ./manage, manage.py
|
|
( ${COMP_CWORD} -eq 1 &&
|
|
( ${COMP_WORDS[0]} == django-admin.py ||
|
|
${COMP_WORDS[0]} == django-admin ||
|
|
${COMP_WORDS[0]} == ./manage.py ||
|
|
${COMP_WORDS[0]} == manage.py ) )
|
|
||
|
|
# python manage.py, /some/path/python manage.py (if manage.py exists)
|
|
( ${COMP_CWORD} -eq 2 &&
|
|
( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
|
|
( $( basename -- ${COMP_WORDS[1]} ) == manage.py) &&
|
|
( -r ${COMP_WORDS[1]} ) )
|
|
||
|
|
( ${COMP_CWORD} -eq 2 &&
|
|
( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
|
|
( $( basename -- ${COMP_WORDS[1]} ) == django-admin.py) &&
|
|
( -r ${COMP_WORDS[1]} ) )
|
|
||
|
|
( ${COMP_CWORD} -eq 2 &&
|
|
( $( basename -- ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
|
|
( $( basename -- ${COMP_WORDS[1]} ) == django-admin) &&
|
|
( -r ${COMP_WORDS[1]} ) ) ]] ; then
|
|
|
|
case ${cur} in
|
|
-*)
|
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
|
action=$COMPREPLY
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) )
|
|
action=$COMPREPLY
|
|
return 0
|
|
;;
|
|
esac
|
|
else
|
|
case ${prev} in
|
|
adminindex|dumpdata|reset| \
|
|
sql|sqlall|sqlclear|sqlcustom|sqlindexes| \
|
|
sqlreset|sqlsequencereset|test)
|
|
# App completion
|
|
settings=""
|
|
# If settings.py in the PWD, use that
|
|
if [ -e settings.py ] ; then
|
|
settings="$PWD/settings.py"
|
|
else
|
|
# Use the ENV variable if it is set
|
|
if [ $DJANGO_SETTINGS_MODULE ] ; then
|
|
settings=$DJANGO_SETTINGS_MODULE
|
|
fi
|
|
fi
|
|
# Couldn't find settings so return nothing
|
|
if [ -z $settings ] ; then
|
|
COMPREPLY=()
|
|
# Otherwise inspect settings.py file
|
|
else
|
|
apps=`sed -n "/INSTALLED_APPS = (/,/)/p" $settings | \
|
|
grep -v "django.contrib" |
|
|
sed -n "s/^[ ]*'\(.*\.\)*\(.*\)'.*$/\2 /pg" | \
|
|
tr -d "\n"`
|
|
COMPREPLY=( $(compgen -W "${apps}" -- ${cur}) )
|
|
fi
|
|
return 0
|
|
;;
|
|
|
|
createcachetable|cleanup|compilemessages|dbshell| \
|
|
diffsettings|inspectdb|makemessages| \
|
|
runserver|startapp|startproject|syncdb| \
|
|
validate)
|
|
COMPREPLY=()
|
|
return 0
|
|
;;
|
|
shell)
|
|
COMPREPLY=( $(compgen -W "$action_shell_opts" -- ${cur}) )
|
|
return 0
|
|
;;
|
|
runfcgi)
|
|
COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
|
|
return 0
|
|
;;
|
|
host*|port*|socket*|method*|maxspare*|minspare*|maxchildren*|daemonize*|pidfile*|workdir*)
|
|
if [ "$action" == "runfcgi" ] ; then
|
|
COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
|
|
return 0
|
|
fi
|
|
return 0
|
|
;;
|
|
*)
|
|
#COMPREPLY=( $(compgen -W "auth core" -- ${cur}) )
|
|
COMPREPLY=()
|
|
return 0
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
complete -F _django_completion django-admin.py manage.py django-admin
|
|
|
|
# Support for multiple interpreters.
|
|
unset pythons
|
|
if command -v whereis &>/dev/null; then
|
|
python_interpreters=$(whereis python | cut -d " " -f 2-)
|
|
for python in $python_interpreters; do
|
|
pythons="${pythons} $(basename -- $python)"
|
|
done
|
|
pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
|
|
else
|
|
pythons=python
|
|
fi
|
|
|
|
complete -F _django_completion -o default $pythons
|