Skip to content

Instantly share code, notes, and snippets.

@jpschroeder
Last active May 28, 2024 13:46
Show Gist options
  • Save jpschroeder/d85e16c798b47413e461b4715244c030 to your computer and use it in GitHub Desktop.
Save jpschroeder/d85e16c798b47413e461b4715244c030 to your computer and use it in GitHub Desktop.
set -g default-terminal "tmux-256color"
set -g mouse on
set -g focus-events on
set -g status-position top
set -g prefix C-a
setw -g mode-keys vi
set -sg escape-time 0
set -sa terminal-features ',xterm-kitty:RGB'
# ~/.config/kitty/kitty.conf
# clipboard_control write-clipboard write-primary no-append
# include ./theme.conf
enable_audio_bell no
font_family MesloLGS NF
enabled_layouts tall:bias=70, fat:bias=70, stack, horizontal, vertical, grid
map kitty_mod+1 goto_layout tall
map kitty_mod+2 goto_layout fat
map kitty_mod+3 goto_layout horizontal
map kitty_mod+4 goto_layout vertical
map kitty_mod+5 goto_layout stack
map kitty_mod+6 goto_layout grid
map kitty_mod+enter new_window_with_cwd
# map cmd+enter new_window_with_cwd
map ctrl+c kitten pass_keys.py copy ctrl+c
# map cmd+c kitten pass_keys.py copy cmd+c
map ctrl+v kitten pass_keys.py paste ctrl+v
# map cmd+b kitten pass_keys.py paste cmd+v
# https://github.com/knubie/vim-kitty-navigator
map ctrl+j kitten pass_keys.py bottom ctrl+j
map ctrl+k kitten pass_keys.py top ctrl+k
map ctrl+h kitten pass_keys.py left ctrl+h
map ctrl+l kitten pass_keys.py right ctrl+l
allow_remote_control yes
listen_on unix:@mykitty
# listen_on unix:/tmp/mykitty
# ~/.config/kitty/pass_keys.py
import re
from kittens.tui.handler import result_handler
from kitty.key_encoding import KeyEvent, parse_shortcut
def is_window_vim(window, vim_id):
fp = window.child.foreground_processes
return any(re.search(vim_id, p['cmdline'][0] if len(p['cmdline']) else '', re.I) for p in fp)
def encode_key_mapping(window, key_mapping):
mods, key = parse_shortcut(key_mapping)
event = KeyEvent(
mods=mods,
key=key,
shift=bool(mods & 1),
alt=bool(mods & 2),
ctrl=bool(mods & 4),
super=bool(mods & 8),
hyper=bool(mods & 16),
meta=bool(mods & 32),
).as_window_system_event()
return window.encoded_key(event)
def main():
pass
@result_handler(no_ui=True)
def handle_result(args, result, target_window_id, boss):
cmd = args[1] # bottom, top, left, right, copy, paste
key_mapping = args[2] # ctrl+j, ctrl+k, ctrl+h, ctrl+l, ctrl+c, ctrl+v
vim_id = args[3] if len(args) > 3 else "n?vim"
window = boss.window_id_map.get(target_window_id)
if window is None:
return
if is_window_vim(window, vim_id):
for keymap in key_mapping.split(">"):
encoded = encode_key_mapping(window, keymap)
window.write_to_child(encoded)
elif cmd == "copy":
window.copy_and_clear_or_interrupt()
elif cmd == "paste":
window.paste_selection_or_clipboard()
else:
boss.active_tab.neighboring_window(cmd)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment