mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 08:43:00 +00:00
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
# https://github.com/sxyazi/dotfiles
|
|
from kittens.tui.handler import result_handler
|
|
|
|
directions = {
|
|
"top": "u",
|
|
"bottom": "e",
|
|
"left": "n",
|
|
"right": "i",
|
|
}
|
|
|
|
|
|
def main(args):
|
|
pass
|
|
|
|
|
|
@result_handler(no_ui=True)
|
|
def handle_result(args, answer, target_window_id, boss):
|
|
window = boss.active_window
|
|
if window is None:
|
|
return
|
|
|
|
cmd = window.child.foreground_cmdline[0]
|
|
act = args[1] # e.g. -jump
|
|
if act[0] == "-" and cmd[-4:] == "nvim":
|
|
second = directions[args[2]] if len(args) > 2 else ""
|
|
window.write_to_child(f"\x1b[119;8u{act[1]}{second}")
|
|
return
|
|
|
|
if (act == "-close" or act == "-quit") and cmd[-7:] == "joshuto":
|
|
window.write_to_child(f"\x1b{act[1]}")
|
|
return
|
|
|
|
def split(direction):
|
|
if direction == "top" or direction == "bottom":
|
|
boss.launch("--cwd=current", "--location=hsplit")
|
|
else:
|
|
boss.launch("--cwd=current", "--location=vsplit")
|
|
|
|
if direction == "top" or direction == "left":
|
|
boss.active_tab.move_window(direction)
|
|
|
|
def close():
|
|
boss.close_window()
|
|
|
|
def quit():
|
|
boss.quit()
|
|
|
|
def jump(direction):
|
|
boss.active_tab.neighboring_window(direction)
|
|
|
|
# https://github.com/chancez/dotfiles/blob/master/kitty/.config/kitty/relative_resize.py
|
|
def resize(direction):
|
|
neighbors = boss.active_tab.current_layout.neighbors_for_window(
|
|
window, boss.active_tab.windows
|
|
)
|
|
top, bottom = neighbors.get("top"), neighbors.get("bottom")
|
|
left, right = neighbors.get("left"), neighbors.get("right")
|
|
|
|
if direction == "top":
|
|
if top and bottom:
|
|
boss.active_tab.resize_window("shorter", 10)
|
|
elif top:
|
|
boss.active_tab.resize_window("taller", 10)
|
|
elif bottom:
|
|
boss.active_tab.resize_window("shorter", 10)
|
|
elif direction == "bottom":
|
|
if top and bottom:
|
|
boss.active_tab.resize_window("taller", 10)
|
|
elif top:
|
|
boss.active_tab.resize_window("shorter", 10)
|
|
elif bottom:
|
|
boss.active_tab.resize_window("taller", 10)
|
|
elif direction == "left":
|
|
if left and right:
|
|
boss.active_tab.resize_window("narrower", 10)
|
|
elif left:
|
|
boss.active_tab.resize_window("wider", 10)
|
|
elif right:
|
|
boss.active_tab.resize_window("narrower", 10)
|
|
elif direction == "right":
|
|
if left and right:
|
|
boss.active_tab.resize_window("wider", 10)
|
|
elif left:
|
|
boss.active_tab.resize_window("narrower", 10)
|
|
elif right:
|
|
boss.active_tab.resize_window("wider", 10)
|
|
|
|
def move(direction):
|
|
boss.active_tab.move_window(direction)
|
|
|
|
act = act[1:]
|
|
if act == "split":
|
|
split(args[2])
|
|
elif act == "close":
|
|
close()
|
|
elif act == "quit":
|
|
quit()
|
|
elif act == "jump":
|
|
jump(args[2])
|
|
elif act == "resize":
|
|
resize(args[2])
|
|
elif act == "move":
|
|
move(args[2])
|