It seems that this file, unlike the `ipython-config.py', is evaluated in
the same toplevel environment as is used for the interactive session. I
initially tried to do this by deleting all the names after I'd finished
using them, but the `inhibit_history_search' function is looked up by
name from the `prev_line' and `next_line' bindings, so that doesn't
work. Instead, lambda-bind everything by wrapping a function around the
whole lot; the evaluate the function to make everything happen, and
delete the function name, leaving the bindings functions in its orphaned
environment.
-import IPython as IPY
-import prompt_toolkit as PTK
-
-def ding():
- with open('/dev/tty', 'w') as f: f.write('\a')
-
-## Key bindings. Alas, IPython's attempt at Emacs keybindings is abysmal.
-K = PTK.keys.Keys
-F = PTK.filters
-BUF = PTK.enums.DEFAULT_BUFFER
-ipy = IPY.get_ipython()
-try: pt = ipy.pt_cli
-except AttributeError: pass
-else:
+def __mdw_hack_bindings():
+
+ import IPython as IPY
+ import prompt_toolkit as PTK
+
+ def ding():
+ with open('/dev/tty', 'w') as f: f.write('\a')
+
+ ## Key bindings. Alas, IPython's attempt at Emacs keybindings is abysmal.
+ K = PTK.keys.Keys
+ F = PTK.filters
+ BUF = PTK.enums.DEFAULT_BUFFER
+ ipy = IPY.get_ipython()
+ try: pt = ipy.pt_cli
+ except AttributeError: return
+
reg = pt.application.key_bindings_registry
try: bind = reg.add_binding
except AttributeError:
reg = pt.application.key_bindings_registry
try: bind = reg.add_binding
except AttributeError:
bind(K.Escape, u'p')(lambda ev: ev.current_buffer.history_backward())
bind(K.Escape, u'n')(lambda ev: ev.current_buffer.history_forward())
bind(K.Escape, u'p')(lambda ev: ev.current_buffer.history_backward())
bind(K.Escape, u'n')(lambda ev: ev.current_buffer.history_forward())
+
+__mdw_hack_bindings()
+del __mdw_hack_bindings