##// END OF EJS Templates
Move most readline code from InteractiveShell to terminal subclass...
Move most readline code from InteractiveShell to terminal subclass This is the first stage of my effort to use prompt_toolkit for the terminal interface. My plan is to create a new subclass of InteractiveShell which deals with the terminal using prompt_toolkit instead of readline. To facilitate this, I am first trying to separate as much of the readline code as possible out of InteractiveShell to the TerminalInteractiveShell subclass (I don't intend the new subclass to inherit from TIS). I haven't moved any of the config options relating to readline yet, because moving them will break some people's existing config files. But if we're switching to prompt_toolkit by default, readline related config is going to be broken anyway.

File last commit:

r5390:c82649ea
r21846:5f823782
Show More
autocall.py
70 lines | 2.0 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""
Autocall capabilities for IPython.core.
Authors:
* Brian Granger
* Fernando Perez
* Thomas Kluyver
Notes
-----
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class IPyAutocall(object):
""" Instances of this class are always autocalled
This happens regardless of 'autocall' variable state. Use this to
develop macro-like mechanisms.
"""
_ip = None
rewrite = True
def __init__(self, ip=None):
self._ip = ip
def set_ip(self, ip):
""" Will be used to set _ip point to current ipython instance b/f call
Override this method if you don't want this to happen.
"""
self._ip = ip
class ExitAutocall(IPyAutocall):
"""An autocallable object which will be added to the user namespace so that
exit, exit(), quit or quit() are all valid ways to close the shell."""
rewrite = False
def __call__(self):
self._ip.ask_exit()
class ZMQExitAutocall(ExitAutocall):
"""Exit IPython. Autocallable, so it needn't be explicitly called.
Parameters
----------
keep_kernel : bool
If True, leave the kernel alive. Otherwise, tell the kernel to exit too
(default).
"""
def __call__(self, keep_kernel=False):
self._ip.keepkernel_on_exit = keep_kernel
self._ip.ask_exit()