From 9cffe48359d44a965b5c69743ea950395d79d243 Mon Sep 17 00:00:00 2001 From: OBrutus <37221337+OBrutus@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:16:05 +0530 Subject: [PATCH] resize_window kitten: wrap as Go kitten, remove Python implementation --- kittens/resize_window/cli_generated.go | 2 +- kittens/resize_window/main.py | 116 +------------------------ shell-integration/ssh/kitty | 2 +- 3 files changed, 4 insertions(+), 116 deletions(-) diff --git a/kittens/resize_window/cli_generated.go b/kittens/resize_window/cli_generated.go index 411c6e9a3..d25947b44 100644 --- a/kittens/resize_window/cli_generated.go +++ b/kittens/resize_window/cli_generated.go @@ -7,7 +7,7 @@ var _ = fmt.Sprintf func create_cmd(root *cli.Command, run_func func(*cli.Command, *Options, []string)(int, error)) { ans := root.AddSubCommand(&cli.Command{ Name: "resize_window", -ShortDescription: "Resize the current window", +ShortDescription: "Resize the current window interactively", HelpText: "Resize the current window", Run: func(cmd *cli.Command, args []string) (int, error) { opts := Options{} diff --git a/kittens/resize_window/main.py b/kittens/resize_window/main.py index 0f9dfeff8..614cc49f5 100644 --- a/kittens/resize_window/main.py +++ b/kittens/resize_window/main.py @@ -1,104 +1,7 @@ #!/usr/bin/env python # License: GPL v3 Copyright: 2018, Kovid Goyal - import sys -from typing import Any - -from kitty.cli import parse_args -from kitty.cli_stub import RCOptions, ResizeCLIOptions -from kitty.constants import version -from kitty.key_encoding import CTRL, EventType, KeyEvent -from kitty.rc.base import command_for_name, parse_subcommand_cli -from kitty.remote_control import encode_send, parse_rc_args -from kitty.utils import ScreenSize - -from ..tui.handler import Handler -from ..tui.loop import Loop -from ..tui.operations import styled - -global_opts = RCOptions() - - -class Resize(Handler): - - print_on_fail: str | None = None - - def __init__(self, opts: ResizeCLIOptions): - self.opts = opts - - def initialize(self) -> None: - global global_opts - global_opts = parse_rc_args(['kitty', '@resize-window'])[0] - self.original_size = self.screen_size - self.cmd.set_cursor_visible(False) - self.cmd.set_line_wrapping(False) - self.draw_screen() - - def do_window_resize(self, is_decrease: bool = False, is_horizontal: bool = True, reset: bool = False, multiplier: int = 1) -> None: - resize_window = command_for_name('resize_window') - increment = self.opts.horizontal_increment if is_horizontal else self.opts.vertical_increment - increment *= multiplier - if is_decrease: - increment *= -1 - axis = 'reset' if reset else ('horizontal' if is_horizontal else 'vertical') - cmdline = [resize_window.name, '--self', f'--increment={increment}', '--axis=' + axis] - opts, items = parse_subcommand_cli(resize_window, cmdline) - payload = resize_window.message_to_kitty(global_opts, opts, items) - send = {'cmd': resize_window.name, 'version': version, 'payload': payload, 'no_response': False} - self.write(encode_send(send)) - - def on_kitty_cmd_response(self, response: dict[str, Any]) -> None: - if not response.get('ok'): - err = response['error'] - if response.get('tb'): - err += '\n' + response['tb'] - self.print_on_fail = err - self.quit_loop(1) - return - res = response.get('data') - if res: - self.cmd.bell() - - def on_text(self, text: str, in_bracketed_paste: bool = False) -> None: - text = text.upper() - if text in 'WNTSR': - self.do_window_resize(is_decrease=text in 'NS', is_horizontal=text in 'WN', reset=text == 'R') - elif text == 'Q': - self.quit_loop(0) - - def on_key(self, key_event: KeyEvent) -> None: - if key_event.type is EventType.RELEASE: - return - if key_event.matches('esc'): - self.quit_loop(0) - return - if key_event.key in ('w', 'n', 't', 's') and key_event.mods_without_locks == CTRL: - self.do_window_resize(is_decrease=key_event.key in 'ns', is_horizontal=key_event.key in 'wn', multiplier=2) - - def on_resize(self, new_size: ScreenSize) -> None: - self.draw_screen() - - def draw_screen(self) -> None: - self.cmd.clear_screen() - print = self.print - print(styled('Resize this window', bold=True, fg='gray', fg_intense=True)) - print() - print('Press one of the following keys:') - print(' {}ider'.format(styled('W', fg='green'))) - print(' {}arrower'.format(styled('N', fg='green'))) - print(' {}aller'.format(styled('T', fg='green'))) - print(' {}horter'.format(styled('S', fg='green'))) - print(' {}eset'.format(styled('R', fg='red'))) - print() - print('Press {} to quit resize mode'.format(styled('Esc', italic=True))) - print('Hold down {} to double step size'.format(styled('Ctrl', italic=True))) - print() - print(styled('Sizes', bold=True, fg='white', fg_intense=True)) - print(f'Original: {self.original_size.rows} rows {self.original_size.cols} cols') - print('Current: {} rows {} cols'.format( - styled(str(self.screen_size.rows), fg='magenta'), styled(str(self.screen_size.cols), fg='magenta'))) - OPTIONS = r''' --horizontal-increment @@ -117,22 +20,7 @@ usage = '' def main(args: list[str]) -> None: - msg = help_text - try: - cli_opts, items = parse_args(args[1:], OPTIONS, '', msg, 'resize_window', result_class=ResizeCLIOptions) - except SystemExit as e: - if e.code != 0: - print(e.args[0], file=sys.stderr) - input('Press Enter to quit') - return - - loop = Loop() - handler = Resize(cli_opts) - loop.loop(handler) - if handler.print_on_fail: - print(handler.print_on_fail, file=sys.stderr) - input('Press Enter to quit') - raise SystemExit(loop.return_code) + raise SystemExit('This should be run as kitten resize-window') if __name__ == '__main__': @@ -142,4 +30,4 @@ elif __name__ == '__doc__': cd['usage'] = usage cd['options'] = OPTIONS cd['help_text'] = help_text - cd['short_desc'] = help_text + cd['short_desc'] = 'Resize the current window interactively' diff --git a/shell-integration/ssh/kitty b/shell-integration/ssh/kitty index 0d1cda9a5..6da89be7c 100755 --- a/shell-integration/ssh/kitty +++ b/shell-integration/ssh/kitty @@ -24,7 +24,7 @@ exec_kitty() { is_wrapped_kitten() { - wrapped_kittens="clipboard icat hyperlinked_grep ask hints unicode_input ssh themes diff show_key transfer query_terminal choose-files command-palette" + wrapped_kittens="clipboard icat hyperlinked_grep ask hints unicode_input ssh themes diff show_key transfer query_terminal choose-files command-palette resize_window" [ -n "$1" ] && { case " $wrapped_kittens " in *" $1 "*) printf "%s" "$1" ;;