mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7233 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			160 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # #########################################################################
 | |
| # 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"
 | |
|     # Actions
 | |
|     actions="adminindex createcachetable dbshell diffsettings \
 | |
|              dumpdata flush inspectdb loaddata 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, ./manage, manage.py
 | |
|           ( ${COMP_CWORD} -eq 1 &&
 | |
|             ( ${COMP_WORDS[0]} == django-admin.py ||
 | |
|               ${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]} ) ) ]] ; 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|dbshell|diffsettings| \
 | |
|             inspectdb|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
 | |
| 
 | |
| # 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
 |