diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/commands/cli_withlist.py | 32 | ||||
| -rw-r--r-- | src/mailman/config/schema.cfg | 9 | ||||
| -rw-r--r-- | src/mailman/interact.py | 4 |
3 files changed, 41 insertions, 4 deletions
diff --git a/src/mailman/commands/cli_withlist.py b/src/mailman/commands/cli_withlist.py index 61e1bec7c..bc25363b1 100644 --- a/src/mailman/commands/cli_withlist.py +++ b/src/mailman/commands/cli_withlist.py @@ -28,6 +28,8 @@ __all__ = [ import re +from lazr.config import as_boolean + from zope.component import getUtility from zope.interface import implements @@ -148,8 +150,34 @@ class Withlist: commit=config.db.commit, abort=config.db.abort, config=config, - ) - interact(upframe=False, banner=banner, overrides=overrides) + ) + banner = '\n'.join([unicode(config.shell.banner), banner]) + if as_boolean(config.shell.use_ipython): + self._start_ipython(overrides, banner) #config.shell.banner) + else: + self._start_python(overrides, banner) #config.shell.banner) + + def _start_ipython(self, overrides, banner): + try: + from IPython.frontend.terminal.embed import InteractiveShellEmbed + ipshell = InteractiveShellEmbed(banner1=banner, + user_ns=overrides) + ipshell() + except ImportError: + print _("ipython is not available, set use_ipython to no") + + def _start_python(self, overrides, banner): + # set the tab completion + import sys + try: + import readline, rlcompleter + readline.parse_and_bind('tab: complete') + except ImportError: + pass + else: + sys.ps1 = config.shell.ps1 + ' ' + interact(upframe=False, banner=config.shell.banner, + overrides=overrides) def _details(self): """Print detailed usage.""" diff --git a/src/mailman/config/schema.cfg b/src/mailman/config/schema.cfg index cde01cbd7..22ad878c7 100644 --- a/src/mailman/config/schema.cfg +++ b/src/mailman/config/schema.cfg @@ -62,6 +62,15 @@ post_hook: # Which paths.* file system layout to use. layout: dev +[shell] + +# customize the interpreter prompt +ps1: << MM >> +# banner to show on startup +banner: welcome to the mailman shell +# if IPython is found use it as the shell +use_ipython: no + [paths.master] # Important directories for Mailman operation. These are defined here so that diff --git a/src/mailman/interact.py b/src/mailman/interact.py index 3e7715c00..613a85b0d 100644 --- a/src/mailman/interact.py +++ b/src/mailman/interact.py @@ -28,7 +28,7 @@ import os import sys import code -DEFAULT_BANNER = object() +DEFAULT_BANNER = "" @@ -69,7 +69,7 @@ def interact(upframe=True, banner=DEFAULT_BANNER, overrides=None): except: pass # We don't want the funky console object in parentheses in the banner. - if banner is DEFAULT_BANNER: + if banner == DEFAULT_BANNER: banner = '''\ Python %s on %s Type "help", "copyright", "credits" or "license" for more information.''' % ( |
