mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 16:53:00 +00:00
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
from prompt_toolkit.key_binding import KeyBindings
|
|
from prompt_toolkit.key_binding.vi_state import InputMode
|
|
from prompt_toolkit.filters import Condition
|
|
from IPython import get_ipython
|
|
|
|
ip = get_ipython()
|
|
key_bindings = KeyBindings()
|
|
|
|
@Condition
|
|
def in_navigation_mode():
|
|
return ip.pt_app.app.vi_state.input_mode == InputMode.NAVIGATION
|
|
|
|
# colemak keymap hnei
|
|
@key_bindings.add("n", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Move cursor down by visual line"
|
|
event.current_buffer.auto_down(count=event.arg)
|
|
|
|
@key_bindings.add("e", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Move cursor up by visual line"
|
|
event.current_buffer.auto_up(count=event.arg)
|
|
|
|
@key_bindings.add("i", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Move cursor right"
|
|
event.current_buffer.cursor_right(count=event.arg)
|
|
|
|
# Insert with 'l' and 'L'
|
|
@key_bindings.add("l", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Enter insert mode (similar position to 'i' in Colemak)"
|
|
event.app.vi_state.input_mode = InputMode.INSERT
|
|
|
|
@key_bindings.add("L", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Enter insert mode at the beginning of the line"
|
|
event.current_buffer.cursor_position += event.current_buffer.document.get_start_of_line_position()
|
|
|
|
# Ne[k]st
|
|
@key_bindings.add("k", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Find next match"
|
|
event.current_buffer.forward_search()
|
|
|
|
@key_bindings.add("K", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Find previous match"
|
|
event.current_buffer.reverse_search()
|
|
|
|
# [J]ump
|
|
@key_bindings.add("j", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Move to end of next word"
|
|
event.current_buffer.cursor_right_word()
|
|
|
|
@key_bindings.add("J", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Move to end of next word with capital E"
|
|
event.current_buffer.cursor_right_word(end=True)
|
|
|
|
# Yank to end of line with 'Y'
|
|
@key_bindings.add("Y", filter=in_navigation_mode)
|
|
def _(event):
|
|
"Yank to the end of the line"
|
|
text_to_yank = event.current_buffer.document.text_after_cursor
|
|
event.app.clipboard.set_text(text_to_yank)
|
|
|
|
ip.pt_app.key_bindings = key_bindings
|