diff --git a/django/core/management/commands/shell.py b/django/core/management/commands/shell.py index dfc7d786912..bd61940abaa 100644 --- a/django/core/management/commands/shell.py +++ b/django/core/management/commands/shell.py @@ -69,7 +69,13 @@ class Command(BaseCommand): # we already know 'readline' was imported successfully. import rlcompleter readline.set_completer(rlcompleter.Completer(imported_objects).complete) - readline.parse_and_bind("tab:complete") + # Enable tab completion on systems using libedit (e.g. Mac OSX). + # These lines are copied from Lib/site.py on Python 3.4. + readline_doc = getattr(readline, '__doc__', '') + if readline_doc is not None and 'libedit' in readline_doc: + readline.parse_and_bind("bind ^I rl_complete") + else: + readline.parse_and_bind("tab:complete") # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system # conventions and get $PYTHONSTARTUP first then .pythonrc.py. diff --git a/docs/releases/1.10.txt b/docs/releases/1.10.txt index 4f10dc1cd9b..47c964292fc 100644 --- a/docs/releases/1.10.txt +++ b/docs/releases/1.10.txt @@ -285,6 +285,9 @@ Management Commands * To assist with testing, :func:`~django.core.management.call_command` now accepts a command object as the first argument. +* The :djadmin:`shell` command supports tab completion on systems using + ``libedit``, e.g. Mac OSX. + Migrations ~~~~~~~~~~