mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Fixed #10752. Added more advanced bash completion. Thanks, Arthur Koziel.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11526 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
a53601c674
commit
677ddcbb04
3 changed files with 82 additions and 130 deletions
|
@ -31,136 +31,10 @@
|
|||
#
|
||||
# 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="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
|
||||
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
|
||||
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
|
||||
COMP_CWORD=$COMP_CWORD \
|
||||
DJANGO_AUTO_COMPLETE=1 $1 ) )
|
||||
}
|
||||
|
||||
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
|
||||
complete -F _django_completion -o default django-admin.py manage.py
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue