##// END OF EJS Templates
update copyright to 2011/20xx-2011...
update copyright to 2011/20xx-2011 Closes #1033 (rebased to prevent recursive merge). Closes #2. 459 *.py files in : 39 empty files 176 files without copyright 36 have copyright but don't cite the dev team 208 have copyright and cite the dev team ----------------------------------------- 0 not up to date (cite dev team but not right year) FYI, list of files that don't have copyright (and are not empty..) [ 'IPython/config/profile/cluster/ipython_config.py', 'IPython/config/profile/math/ipython_config.py', 'IPython/config/profile/pylab/ipython_config.py', 'IPython/config/profile/pysh/ipython_config.py', 'IPython/config/profile/python3/ipython_config.py', 'IPython/config/profile/sympy/ipython_config.py', 'IPython/core/shadowns.py', 'IPython/core/tests/refbug.py', 'IPython/core/tests/simpleerr.py', 'IPython/core/tests/tclass.py', 'IPython/core/tests/test_application.py', 'IPython/core/tests/test_autocall.py', 'IPython/core/tests/test_completer.py', 'IPython/core/tests/test_fakemodule.py', 'IPython/core/tests/test_formatters.py', 'IPython/core/tests/test_handlers.py', 'IPython/core/tests/test_history.py', 'IPython/core/tests/test_imports.py', 'IPython/core/tests/test_iplib.py', 'IPython/core/tests/test_logger.py', 'IPython/core/tests/test_magic.py', 'IPython/core/tests/test_plugin.py', 'IPython/core/tests/test_prefilter.py', 'IPython/core/tests/test_profile.py', 'IPython/core/tests/test_run.py', 'IPython/core/tests/test_splitinput.py', 'IPython/deathrow/astyle.py', 'IPython/deathrow/dtutils.py', 'IPython/deathrow/Gnuplot2.py', 'IPython/deathrow/GnuplotInteractive.py', 'IPython/deathrow/GnuplotRuntime.py', 'IPython/deathrow/gui/wx/ipshell_nonblocking.py', 'IPython/deathrow/gui/wx/ipython_history.py', 'IPython/deathrow/gui/wx/thread_ex.py', 'IPython/deathrow/ibrowse.py', 'IPython/deathrow/igrid.py', 'IPython/deathrow/ipipe.py', 'IPython/deathrow/ipy_defaults.py', 'IPython/deathrow/ipy_kitcfg.py', 'IPython/deathrow/ipy_legacy.py', 'IPython/deathrow/ipy_p4.py', 'IPython/deathrow/ipy_profile_none.py', 'IPython/deathrow/ipy_profile_numpy.py', 'IPython/deathrow/ipy_profile_scipy.py', 'IPython/deathrow/ipy_profile_sh.py', 'IPython/deathrow/ipy_traits_completer.py', 'IPython/deathrow/ipy_vimserver.py', 'IPython/deathrow/numeric_formats.py', 'IPython/deathrow/oldfrontend/process/__init__.py', 'IPython/deathrow/oldfrontend/wx/ipythonx.py', 'IPython/deathrow/scitedirector.py', 'IPython/deathrow/tests/test_prefilter.py', 'IPython/deathrow/twshell.py', 'IPython/extensions/__init__.py', 'IPython/extensions/autoreload.py', 'IPython/extensions/storemagic.py', 'IPython/extensions/tests/test_autoreload.py', 'IPython/external/__init__.py', 'IPython/external/argparse/__init__.py', 'IPython/external/decorator/__init__.py', 'IPython/external/decorators/__init__.py', 'IPython/external/decorators/_decorators.py', 'IPython/external/decorators/_numpy_testing_noseclasses.py', 'IPython/external/decorators/_numpy_testing_utils.py', 'IPython/external/guid/__init__.py', 'IPython/external/Itpl/__init__.py', 'IPython/external/mglob/__init__.py', 'IPython/external/mglob/_mglob.py', 'IPython/external/path/__init__.py', 'IPython/external/path/_path.py', 'IPython/external/pexpect/__init__.py', 'IPython/external/pyparsing/__init__.py', 'IPython/external/qt.py', 'IPython/external/qt_for_kernel.py', 'IPython/external/simplegeneric/__init__.py', 'IPython/external/simplegeneric/_simplegeneric.py', 'IPython/frontend/html/notebook/__init__.py', 'IPython/frontend/html/notebook/tests/test_kernelsession.py', 'IPython/frontend/qt/base_frontend_mixin.py', 'IPython/frontend/qt/console/ansi_code_processor.py', 'IPython/frontend/qt/console/bracket_matcher.py', 'IPython/frontend/qt/console/call_tip_widget.py', 'IPython/frontend/qt/console/completion_lexer.py', 'IPython/frontend/qt/console/completion_widget.py', 'IPython/frontend/qt/console/console_widget.py', 'IPython/frontend/qt/console/history_console_widget.py', 'IPython/frontend/qt/console/ipython_widget.py', 'IPython/frontend/qt/console/kill_ring.py', 'IPython/frontend/qt/console/mainwindow.py', 'IPython/frontend/qt/console/pygments_highlighter.py', 'IPython/frontend/qt/console/qtconsoleapp.py', 'IPython/frontend/qt/console/rich_ipython_widget.py', 'IPython/frontend/qt/console/styles.py', 'IPython/frontend/qt/console/tests/test_ansi_code_processor.py', 'IPython/frontend/qt/console/tests/test_completion_lexer.py', 'IPython/frontend/qt/console/tests/test_kill_ring.py', 'IPython/frontend/qt/kernelmanager.py', 'IPython/frontend/qt/rich_text.py', 'IPython/frontend/qt/svg.py', 'IPython/frontend/qt/util.py', 'IPython/kernel/__init__.py', 'IPython/lib/clipboard.py', 'IPython/lib/display.py', 'IPython/lib/irunner.py', 'IPython/lib/security.py', 'IPython/lib/tests/test_imports.py', 'IPython/lib/tests/test_irunner.py', 'IPython/lib/tests/test_irunner_pylab_magic.py', 'IPython/lib/tests/test_security.py', 'IPython/nbformat/v1/tests/nbexamples.py', 'IPython/nbformat/v1/tests/test_json.py', 'IPython/nbformat/v1/tests/test_nbbase.py', 'IPython/nbformat/v2/tests/nbexamples.py', 'IPython/nbformat/v2/tests/test_json.py', 'IPython/nbformat/v2/tests/test_nbbase.py', 'IPython/nbformat/v2/tests/test_nbpy.py', 'IPython/quarantine/clearcmd.py', 'IPython/quarantine/envpersist.py', 'IPython/quarantine/ext_rescapture.py', 'IPython/quarantine/ipy_app_completers.py', 'IPython/quarantine/ipy_completers.py', 'IPython/quarantine/ipy_editors.py', 'IPython/quarantine/ipy_exportdb.py', 'IPython/quarantine/ipy_extutil.py', 'IPython/quarantine/ipy_fsops.py', 'IPython/quarantine/ipy_gnuglobal.py', 'IPython/quarantine/ipy_jot.py', 'IPython/quarantine/ipy_lookfor.py', 'IPython/quarantine/ipy_profile_doctest.py', 'IPython/quarantine/ipy_pydb.py', 'IPython/quarantine/ipy_rehashdir.py', 'IPython/quarantine/ipy_render.py', 'IPython/quarantine/ipy_server.py', 'IPython/quarantine/ipy_signals.py', 'IPython/quarantine/ipy_synchronize_with.py', 'IPython/quarantine/ipy_system_conf.py', 'IPython/quarantine/ipy_which.py', 'IPython/quarantine/ipy_winpdb.py', 'IPython/quarantine/ipy_workdir.py', 'IPython/quarantine/jobctrl.py', 'IPython/quarantine/ledit.py', 'IPython/quarantine/win32clip.py', 'IPython/testing/mkdoctests.py', 'IPython/testing/plugin/dtexample.py', 'IPython/testing/plugin/ipdoctest.py', 'IPython/testing/plugin/iptest.py', 'IPython/testing/plugin/setup.py', 'IPython/testing/plugin/show_refs.py', 'IPython/testing/plugin/simple.py', 'IPython/testing/plugin/simplevars.py', 'IPython/testing/plugin/test_ipdoctest.py', 'IPython/testing/plugin/test_refs.py', 'IPython/testing/skipdoctest.py', 'IPython/testing/tests/test_decorators.py', 'IPython/utils/autoattr.py', 'IPython/utils/nested_context.py', 'IPython/utils/pickleshare.py', 'IPython/utils/py3compat.py', 'IPython/utils/PyColorize.py', 'IPython/utils/rlineimpl.py', 'IPython/utils/strdispatch.py', 'IPython/utils/tempdir.py', 'IPython/utils/tests/test_imports.py', 'IPython/utils/tests/test_wildcard.py', 'IPython/utils/upgradedir.py', 'IPython/zmq/completer.py', 'IPython/zmq/displayhook.py', 'IPython/zmq/entry_point.py', 'IPython/zmq/frontend.py', 'IPython/zmq/iostream.py', 'IPython/zmq/ipkernel.py', 'IPython/zmq/log.py', 'IPython/zmq/parentpoller.py', 'IPython/zmq/pykernel.py', 'IPython/zmq/pylab/backend_inline.py', 'IPython/zmq/zmqshell.py' ]

File last commit:

r5390:c82649ea
r5390:c82649ea
Show More
interactiveshell.py
646 lines | 24.5 KiB | text/x-python | PythonLexer
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # -*- coding: utf-8 -*-
"""Subclass of InteractiveShell for terminal based frontends."""
#-----------------------------------------------------------------------------
# Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
# Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2008-2011 The IPython Development Team
Brian Granger
Complete reorganization of InteractiveShell....
r2761 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import __builtin__
import bdb
import os
import re
import sys
Thomas Kluyver
Backwards compatibility hack to use nested() in Python 3.2
r4751 try:
from contextlib import nested
except:
from IPython.utils.nested_context import nested
Brian Granger
Complete reorganization of InteractiveShell....
r2761 from IPython.core.error import TryNext
from IPython.core.usage import interactive_usage, default_banner
from IPython.core.interactiveshell import InteractiveShell, InteractiveShellABC
from IPython.lib.inputhook import enable_gui
from IPython.lib.pylabtools import pylab_activate
Thomas Kluyver
Move skip_doctest decorator to separate module, so that it can be used without triggering other imports.
r3886 from IPython.testing.skipdoctest import skip_doctest
Thomas Kluyver
Repair various failures in the test suite.
r4734 from IPython.utils import py3compat
Brian Granger
Complete reorganization of InteractiveShell....
r2761 from IPython.utils.terminal import toggle_set_term_title, set_term_title
from IPython.utils.process import abbrev_cwd
Matt Cottingham
Catch clipboard exception in magic_paste and print error message
r5367 from IPython.utils.warn import warn, error
Brian Granger
Complete reorganization of InteractiveShell....
r2761 from IPython.utils.text import num_ini_spaces
MinRK
add Integer traitlet...
r5344 from IPython.utils.traitlets import Integer, CBool, Unicode
Brian Granger
Complete reorganization of InteractiveShell....
r2761
#-----------------------------------------------------------------------------
# Utilities
#-----------------------------------------------------------------------------
def get_default_editor():
try:
ed = os.environ['EDITOR']
except KeyError:
if os.name == 'posix':
ed = 'vi' # the only one guaranteed to be there!
else:
ed = 'notepad' # same in Windows!
return ed
#-----------------------------------------------------------------------------
# Main class
#-----------------------------------------------------------------------------
class TerminalInteractiveShell(InteractiveShell):
MinRK
Terminal IPython working with newapp
r3963 autoedit_syntax = CBool(False, config=True,
help="auto editing of files with syntax errors.")
MinRK
fix at least some command-line unicode options
r3464 banner = Unicode('')
MinRK
Terminal IPython working with newapp
r3963 banner1 = Unicode(default_banner, config=True,
help="""The part of the banner to be printed before the profile"""
)
banner2 = Unicode('', config=True,
help="""The part of the banner to be printed after the profile"""
)
confirm_exit = CBool(True, config=True,
help="""
Set to confirm when you try to exit IPython with an EOF (Control-D
MinRK
minor helpstring cleanup per review.
r3967 in Unix, Control-Z/Enter in Windows). By typing 'exit' or 'quit',
you can force a direct exit without any confirmation.""",
MinRK
Terminal IPython working with newapp
r3963 )
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # This display_banner only controls whether or not self.show_banner()
# is called when mainloop/interact are called. The default is False
# because for the terminal based application, the banner behavior
# is controlled by Global.display_banner, which IPythonApp looks at
# to determine if *it* should call show_banner() by hand or not.
display_banner = CBool(False) # This isn't configurable!
embedded = CBool(False)
embedded_active = CBool(False)
MinRK
Terminal IPython working with newapp
r3963 editor = Unicode(get_default_editor(), config=True,
help="Set the editor used by IPython (default to $EDITOR/vi/notepad)."
)
pager = Unicode('less', config=True,
help="The shell program to be used for paging.")
MinRK
add Integer traitlet...
r5344 screen_length = Integer(0, config=True,
MinRK
Terminal IPython working with newapp
r3963 help=
"""Number of lines of your screen, used to control printing of very
long strings. Strings longer than this number of lines will be sent
through a pager instead of directly printed. The default value for
this is 0, which means IPython will auto-detect your screen size every
time it needs to print certain potentially long strings (this doesn't
change the behavior of the 'print' keyword, it's only triggered
internally). If for some reason this isn't working well (it needs
curses support), specify it yourself. Otherwise don't change the
default.""",
)
term_title = CBool(False, config=True,
help="Enable auto setting the terminal title."
)
def __init__(self, config=None, ipython_dir=None, profile_dir=None, user_ns=None,
Brian Granger
Complete reorganization of InteractiveShell....
r2761 user_global_ns=None, custom_exceptions=((),None),
usage=None, banner1=None, banner2=None,
display_banner=None):
super(TerminalInteractiveShell, self).__init__(
MinRK
Terminal IPython working with newapp
r3963 config=config, profile_dir=profile_dir, user_ns=user_ns,
Brian Granger
Complete reorganization of InteractiveShell....
r2761 user_global_ns=user_global_ns, custom_exceptions=custom_exceptions
)
MinRK
use system_raw in terminal, even on Windows...
r5276 # use os.system instead of utils.process.system by default,
# because piped system doesn't make sense in the Terminal:
self.system = self.system_raw
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 self.init_term_title()
self.init_usage(usage)
self.init_banner(banner1, banner2, display_banner)
#-------------------------------------------------------------------------
# Things related to the terminal
#-------------------------------------------------------------------------
@property
def usable_screen_length(self):
if self.screen_length == 0:
return 0
else:
num_lines_bot = self.separate_in.count('\n')+1
return self.screen_length - num_lines_bot
def init_term_title(self):
# Enable or disable the terminal title.
if self.term_title:
toggle_set_term_title(True)
set_term_title('IPython: ' + abbrev_cwd())
else:
toggle_set_term_title(False)
#-------------------------------------------------------------------------
Fernando Perez
Aliases fixes: ls alias improvements and frontend-dependent fixes....
r3003 # Things related to aliases
#-------------------------------------------------------------------------
def init_alias(self):
# The parent class defines aliases that can be safely used with any
# frontend.
super(TerminalInteractiveShell, self).init_alias()
# Now define aliases that only make sense on the terminal, because they
# need direct access to the console in a way that we can't emulate in
# GUI or web frontend
if os.name == 'posix':
aliases = [('clear', 'clear'), ('more', 'more'), ('less', 'less'),
('man', 'man')]
elif os.name == 'nt':
aliases = [('cls', 'cls')]
for name, cmd in aliases:
self.alias_manager.define_alias(name, cmd)
#-------------------------------------------------------------------------
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # Things related to the banner and usage
#-------------------------------------------------------------------------
def _banner1_changed(self):
self.compute_banner()
def _banner2_changed(self):
self.compute_banner()
def _term_title_changed(self, name, new_value):
self.init_term_title()
def init_banner(self, banner1, banner2, display_banner):
if banner1 is not None:
self.banner1 = banner1
if banner2 is not None:
self.banner2 = banner2
if display_banner is not None:
self.display_banner = display_banner
self.compute_banner()
def show_banner(self, banner=None):
if banner is None:
banner = self.banner
self.write(banner)
def compute_banner(self):
Fernando Perez
Add %guiref to give a quick reference to the GUI console.
r3008 self.banner = self.banner1
MinRK
don't display profile in banner if default
r4041 if self.profile and self.profile != 'default':
Brian Granger
Complete reorganization of InteractiveShell....
r2761 self.banner += '\nIPython profile: %s\n' % self.profile
if self.banner2:
Fernando Perez
Add %guiref to give a quick reference to the GUI console.
r3008 self.banner += '\n' + self.banner2
Brian Granger
Complete reorganization of InteractiveShell....
r2761
def init_usage(self, usage=None):
if usage is None:
self.usage = interactive_usage
else:
self.usage = usage
#-------------------------------------------------------------------------
# Mainloop and code execution logic
#-------------------------------------------------------------------------
def mainloop(self, display_banner=None):
"""Start the mainloop.
If an optional banner argument is given, it will override the
internally created default banner.
"""
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 with nested(self.builtin_trap, self.display_trap):
while 1:
try:
self.interact(display_banner=display_banner)
Bernardo B. Marques
remove all trailling spaces
r4872 #self.interact_with_readline()
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # XXX for testing of a readline-decoupled repl loop, call
# interact_with_readline above
break
except KeyboardInterrupt:
# this should not be necessary, but KeyboardInterrupt
# handling seems rather unpredictable...
self.write("\nKeyboardInterrupt in interact()\n")
Julian Taylor
clarify variable names
r5013 def _replace_rlhist_multiline(self, source_raw, hlen_before_cell):
Julian Taylor
reenable multiline history for terminals...
r5011 """Store multiple lines as a single entry in history"""
Julian Taylor
don't try to replace history when rl history unchanged...
r5254
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269 # do nothing without readline or disabled multiline
if not self.has_readline or not self.multiline_history:
return hlen_before_cell
Julian Taylor
don't try to replace history when rl history unchanged...
r5254
Julian Taylor
_replace_rlhist_multiline: check if remove_history_item is available
r5273 # windows rl has no remove_history_item
if not hasattr(self.readline, "remove_history_item"):
return hlen_before_cell
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269 # skip empty cells
if not source_raw.rstrip():
return hlen_before_cell
# nothing changed do nothing, e.g. when rl removes consecutive dups
hlen = self.readline.get_current_history_length()
if hlen == hlen_before_cell:
Julian Taylor
fix indentation
r5270 return hlen_before_cell
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269
for i in range(hlen - hlen_before_cell):
self.readline.remove_history_item(hlen - i - 1)
stdin_encoding = sys.stdin.encoding or "utf-8"
self.readline.add_history(py3compat.unicode_to_str(source_raw.rstrip(),
stdin_encoding))
return self.readline.get_current_history_length()
Julian Taylor
reenable multiline history for terminals...
r5011
Brian Granger
Complete reorganization of InteractiveShell....
r2761 def interact(self, display_banner=None):
"""Closely emulate the interactive Python console."""
Bernardo B. Marques
remove all trailling spaces
r4872 # batch run -> do not interact
Brian Granger
Complete reorganization of InteractiveShell....
r2761 if self.exit_now:
return
if display_banner is None:
display_banner = self.display_banner
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
respect banner argument in TerminalInteractiveShell.interact...
r4210 if isinstance(display_banner, basestring):
self.show_banner(display_banner)
elif display_banner:
Brian Granger
Complete reorganization of InteractiveShell....
r2761 self.show_banner()
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 more = False
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # Mark activity in the builtins
__builtin__.__dict__['__IPYTHON__active'] += 1
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 if self.has_readline:
self.readline_startup_hook(self.pre_readline)
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269 hlen_b4_cell = self.readline.get_current_history_length()
Julian Taylor
initialize hlen_b4_cell also in the no readline case
r5272 else:
hlen_b4_cell = 0
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # exit_now is set by a call to %Exit or %Quit, through the
# ask_exit callback.
Fernando Perez
Refactor multiline input and prompt management.
r3077
Brian Granger
Complete reorganization of InteractiveShell....
r2761 while not self.exit_now:
self.hooks.pre_prompt_hook()
if more:
try:
prompt = self.hooks.generate_prompt(True)
except:
self.showtraceback()
if self.autoindent:
self.rl_do_indent = True
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 else:
try:
prompt = self.hooks.generate_prompt(False)
except:
self.showtraceback()
try:
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 line = self.raw_input(prompt)
Brian Granger
Complete reorganization of InteractiveShell....
r2761 if self.exit_now:
# quick exit on sys.std[in|out] close
break
if self.autoindent:
self.rl_do_indent = False
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 except KeyboardInterrupt:
#double-guard against keyboardinterrupts during kbdint handling
try:
self.write('\nKeyboardInterrupt\n')
Julian Taylor
ensure history remains intact when recalling multiline entry...
r5012 source_raw = self.input_splitter.source_raw_reset()[1]
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269 hlen_b4_cell = \
self._replace_rlhist_multiline(source_raw, hlen_b4_cell)
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 more = False
Brian Granger
Complete reorganization of InteractiveShell....
r2761 except KeyboardInterrupt:
pass
except EOFError:
if self.autoindent:
self.rl_do_indent = False
if self.has_readline:
self.readline_startup_hook(None)
self.write('\n')
self.exit()
except bdb.BdbQuit:
warn('The Python debugger has exited with a BdbQuit exception.\n'
'Because of how pdb handles the stack, it is impossible\n'
'for IPython to properly format this particular exception.\n'
'IPython will resume normal operation.')
except:
# exceptions here are VERY RARE, but they can be triggered
# asynchronously by signal handlers, for example.
self.showtraceback()
else:
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 self.input_splitter.push(line)
more = self.input_splitter.push_accepts_more()
Brian Granger
Complete reorganization of InteractiveShell....
r2761 if (self.SyntaxTB.last_syntax_error and
self.autoedit_syntax):
self.edit_syntax_error()
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 if not more:
Fernando Perez
Continue refactoring input handling across clients....
r3085 source_raw = self.input_splitter.source_raw_reset()[1]
Thomas Kluyver
Change run_cell to not store history by default.
r4995 self.run_cell(source_raw, store_history=True)
Julian Taylor
make hlen_before_cell a function argument instead of class member
r5269 hlen_b4_cell = \
self._replace_rlhist_multiline(source_raw, hlen_b4_cell)
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # We are off again...
__builtin__.__dict__['__IPYTHON__active'] -= 1
# Turn off the exit flag, so the mainloop can be restarted if desired
self.exit_now = False
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 def raw_input(self, prompt=''):
"""Write a prompt and read a line.
The returned line does not include the trailing newline.
When the user enters the EOF key sequence, EOFError is raised.
Optional inputs:
- prompt(''): a string to be printed to prompt the user.
- continue_prompt(False): whether this line is the first one or a
continuation in a sequence of inputs.
"""
# Code run by the user may have modified the readline completer state.
# We must ensure that our completer is back in place.
if self.has_readline:
self.set_readline_completer()
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 try:
Thomas Kluyver
Start using py3compat module.
r4731 line = py3compat.str_to_unicode(self.raw_input_original(prompt))
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 except ValueError:
warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
" or sys.stdout.close()!\nExiting IPython!")
self.ask_exit()
return ""
# Try to be reasonably smart about not re-indenting pasted input more
# than necessary. We do this by trimming out the auto-indent initial
# spaces, if the user's actual input started itself with whitespace.
if self.autoindent:
if num_ini_spaces(line) > self.indent_current_nsp:
line = line[self.indent_current_nsp:]
self.indent_current_nsp = 0
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Add support for accessing raw data to inputsplitter....
r3080 return line
Brian Granger
Complete reorganization of InteractiveShell....
r2761 #-------------------------------------------------------------------------
# Methods to support auto-editing of SyntaxErrors.
#-------------------------------------------------------------------------
def edit_syntax_error(self):
"""The bottom half of the syntax error handler called in the main loop.
Loop until syntax error is fixed or user cancels.
"""
while self.SyntaxTB.last_syntax_error:
# copy and clear last_syntax_error
err = self.SyntaxTB.clear_err_state()
if not self._should_recompile(err):
return
try:
# may set last_syntax_error again if a SyntaxError is raised
self.safe_execfile(err.filename,self.user_ns)
except:
self.showtraceback()
else:
try:
f = file(err.filename)
try:
Bernardo B. Marques
remove all trailling spaces
r4872 # This should be inside a display_trap block and I
Brian Granger
Complete reorganization of InteractiveShell....
r2761 # think it is.
sys.displayhook(f.read())
finally:
f.close()
except:
self.showtraceback()
def _should_recompile(self,e):
"""Utility routine for edit_syntax_error"""
if e.filename in ('<ipython console>','<input>','<string>',
'<console>','<BackgroundJob compilation>',
None):
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Complete reorganization of InteractiveShell....
r2761 return False
try:
Bernardo B. Marques
remove all trailling spaces
r4872 if (self.autoedit_syntax and
Brian Granger
Complete reorganization of InteractiveShell....
r2761 not self.ask_yes_no('Return to editor to correct syntax error? '
'[Y/n] ','y')):
return False
except EOFError:
return False
def int0(x):
try:
return int(x)
except TypeError:
return 0
# always pass integer line and offset values to editor hook
try:
self.hooks.fix_error_editor(e.filename,
int0(e.lineno),int0(e.offset),e.msg)
except TryNext:
warn('Could not open editor')
return False
return True
#-------------------------------------------------------------------------
# Things related to GUI support and pylab
#-------------------------------------------------------------------------
Jens Hedegaard Nielsen
Enable pylab now takes import_all kwarg
r4144 def enable_pylab(self, gui=None, import_all=True):
Brian Granger
Complete reorganization of InteractiveShell....
r2761 """Activate pylab support at runtime.
This turns on support for matplotlib, preloads into the interactive
namespace all of numpy and pylab, and configures IPython to correcdtly
interact with the GUI event loop. The GUI backend to be used can be
optionally selected with the optional :param:`gui` argument.
Parameters
----------
gui : optional, string
If given, dictates the choice of matplotlib GUI backend to use
(should be one of IPython's supported backends, 'tk', 'qt', 'wx' or
'gtk'), otherwise we use the default chosen by matplotlib (as
dictated by the matplotlib build-time options plus the user's
matplotlibrc configuration file).
"""
# We want to prevent the loading of pylab to pollute the user's
# namespace as shown by the %who* magics, so we execute the activation
# code in an empty namespace, and we update *both* user_ns and
# user_ns_hidden with this information.
ns = {}
MinRK
quiet error messages instead of tracebacks in %pylab/%gui...
r5162 try:
gui = pylab_activate(ns, gui, import_all)
except KeyError:
error("Backend %r not supported" % gui)
return
Brian Granger
Complete reorganization of InteractiveShell....
r2761 self.user_ns.update(ns)
self.user_ns_hidden.update(ns)
# Now we must activate the gui pylab wants to use, and fix %run to take
# plot updates into account
enable_gui(gui)
self.magic_run = self._pylab_magic_run
#-------------------------------------------------------------------------
# Things related to exiting
#-------------------------------------------------------------------------
def ask_exit(self):
""" Ask the shell to exit. Can be overiden and used as a callback. """
self.exit_now = True
def exit(self):
"""Handle interactive exit.
This method calls the ask_exit callback."""
if self.confirm_exit:
if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
self.ask_exit()
else:
self.ask_exit()
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 #------------------------------------------------------------------------
# Magic overrides
#------------------------------------------------------------------------
# Once the base class stops inheriting from magic, this code needs to be
# moved into a separate machinery as well. For now, at least isolate here
# the magics which this class needs to implement differently from the base
# class, or that are unique to it.
def magic_autoindent(self, parameter_s = ''):
"""Toggle autoindent on/off (if available)."""
self.shell.set_autoindent()
print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
Thomas Kluyver
Move skip_doctest decorator to separate module, so that it can be used without triggering other imports.
r3886 @skip_doctest
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 def magic_cpaste(self, parameter_s=''):
"""Paste & execute a pre-formatted code block from clipboard.
Bernardo B. Marques
remove all trailling spaces
r4872
Daniel Velkov
fixing issue #56
r4948 You must terminate the block with '--' (two minus-signs) or Ctrl-D alone on the
Bernardo B. Marques
remove all trailling spaces
r4872 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 is the new sentinel for this operation)
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 The block is dedented prior to execution to enable execution of method
definitions. '>' and '+' characters at the beginning of a line are
ignored, to allow pasting directly from e-mails, diff files and
doctests (the '...' continuation prompt is also stripped). The
executed block is also assigned to variable named 'pasted_block' for
later editing with '%edit pasted_block'.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
Bernardo B. Marques
remove all trailling spaces
r4872 This assigns the pasted block to variable 'foo' as string, without
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 dedenting or executing it (preceding >>> and + is still stripped)
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 '%cpaste -r' re-executes the block previously entered by cpaste.
Bernardo B. Marques
remove all trailling spaces
r4872
Do not be alarmed by garbled output on Windows (it's a readline bug).
Just press enter and type -- (and press enter again) and the block
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 will be what was just pasted.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 IPython statements (magics, shell escapes) are not supported (yet).
See also
--------
paste: automatically pull code from clipboard.
Bernardo B. Marques
remove all trailling spaces
r4872
Sathesh Chandra
Add example for %cpaste
r3340 Examples
--------
::
Bernardo B. Marques
remove all trailling spaces
r4872
Sathesh Chandra
Add example for %cpaste
r3340 In [8]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:>>> a = ["world!", "Hello"]
:>>> print " ".join(sorted(a))
:--
Hello world!
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 """
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
par = args.strip()
if opts.has_key('r'):
self._rerun_pasted()
return
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 sentinel = opts.get('s','--')
block = self._strip_pasted_lines_for_code(
self._get_pasted_lines(sentinel))
self._execute_block(block, par)
def magic_paste(self, parameter_s=''):
"""Paste & execute a pre-formatted code block from clipboard.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 The text is pulled directly from the clipboard without user
intervention and printed back on the screen before execution (unless
the -q flag is given to force quiet mode).
The block is dedented prior to execution to enable execution of method
definitions. '>' and '+' characters at the beginning of a line are
ignored, to allow pasting directly from e-mails, diff files and
doctests (the '...' continuation prompt is also stripped). The
executed block is also assigned to variable named 'pasted_block' for
later editing with '%edit pasted_block'.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 You can also pass a variable name as an argument, e.g. '%paste foo'.
Bernardo B. Marques
remove all trailling spaces
r4872 This assigns the pasted block to variable 'foo' as string, without
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 dedenting or executing it (preceding >>> and + is still stripped)
Options
-------
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 -r: re-executes the block previously entered by cpaste.
-q: quiet mode: do not echo the pasted text back to the terminal.
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 IPython statements (magics, shell escapes) are not supported (yet).
See also
--------
cpaste: manually paste code into terminal until you mark its end.
"""
opts,args = self.parse_options(parameter_s,'rq',mode='string')
par = args.strip()
if opts.has_key('r'):
self._rerun_pasted()
return
Matt Cottingham
Catch clipboard exception in magic_paste and print error message
r5367 try:
text = self.shell.hooks.clipboard_get()
block = self._strip_pasted_lines_for_code(text.splitlines())
except TryNext as clipboard_exc:
message = getattr(clipboard_exc, 'args')
if message:
Thomas Kluyver
Format error message for %paste more clearly.
r5368 error(message[0])
Matt Cottingham
Catch clipboard exception in magic_paste and print error message
r5367 else:
error('Could not get text from the clipboard.')
return
Fernando Perez
Move terminal-only magics to the terminal class....
r2975
# By default, echo back to terminal unless quiet mode is requested
if not opts.has_key('q'):
write = self.shell.write
write(self.shell.pycolorize(block))
if not block.endswith('\n'):
write('\n')
write("## -- End pasted text --\n")
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Move terminal-only magics to the terminal class....
r2975 self._execute_block(block, par)
Bernardo B. Marques
remove all trailling spaces
r4872
Jörgen Stenarson
Moving magic_cls to TerminalInteractiveShell.
r5165 if sys.platform == 'win32':
def magic_cls(self, s):
"""Clear screen.
"""
os.system("cls")
Thomas Kluyver
Only tell the user about %paste in the terminal shell.
r4226 def showindentationerror(self):
super(TerminalInteractiveShell, self).showindentationerror()
print("If you want to paste code into IPython, try the %paste magic function.")
Brian Granger
Complete reorganization of InteractiveShell....
r2761
InteractiveShellABC.register(TerminalInteractiveShell)