4 import prompt_toolkit as PTK
7 with open('/dev/tty', 'w') as f: f.write('\a')
9 ## Key bindings. Alas, IPython's attempt at Emacs keybindings is abysmal.
12 BUF = PTK.enums.DEFAULT_BUFFER
13 ipy = IPY.get_ipython()
15 except AttributeError: pass
17 reg = pt.application.key_bindings_registry
18 bind = PTK.key_binding.bindings.utils.create_handle_decorator(reg)
20 def inhibit_history_search(buf, fn):
21 searchp, searchtext = buf.enable_history_search, buf.history_search_text
22 buf.enable_history_search = F.Never()
26 buf.enable_history_search, buf.history_search_text = searchp, searchtext
29 buf = ev.current_buffer
30 if buf.document.cursor_position_row > 0:
32 elif not buf.selection_state:
33 inhibit_history_search(buf, lambda: buf.history_backward())
36 buf = ev.current_buffer
37 if buf.document.cursor_position_row < buf.document.line_count - 1:
39 elif not buf.selection_state:
40 inhibit_history_search(buf, lambda: buf.history_forward())
42 bind(K.Escape, u'p')(lambda ev: ev.current_buffer.history_backward())
43 bind(K.Escape, u'n')(lambda ev: ev.current_buffer.history_forward())