From e8958ac6e989c93fc44dc6042a5448aa81782260 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 26 Aug 2018 11:44:05 +0530 Subject: [PATCH] Make it easier to exit the simple REPL --- src/calibre/utils/ipython.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/calibre/utils/ipython.py b/src/calibre/utils/ipython.py index 4964ceb235..f5fbdf84be 100644 --- a/src/calibre/utils/ipython.py +++ b/src/calibre/utils/ipython.py @@ -143,6 +143,16 @@ history_length(2000) #value of -1 means no limit del readline, rlcompleter, atexit +class Exit: + + def __repr__(self): + raise SystemExit(0) + __str__ = __repr__ + + def __call__(self): + raise SystemExit(0) + + def simple_repl(user_ns={}): if iswindows: setup_pyreadline() @@ -158,11 +168,13 @@ def simple_repl(user_ns={}): import sys, re # noqa for x in ('os', 'sys', 're'): user_ns[x] = user_ns.get(x, globals().get(x, locals().get(x))) + user_ns['exit'] = Exit() import code - code.interact(BANNER, raw_input, user_ns) + code.interact(BANNER + 'Use exit to quit', raw_input, user_ns) def ipython(user_ns=None): + return simple_repl(user_ns=user_ns) os.environ['IPYTHONDIR'] = ipydir try: from IPython.terminal.embed import InteractiveShellEmbed