From 3fa768d7ef9a04ddc2d524a4cd0b2ecfd0be6714 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2024 12:23:50 +0530 Subject: [PATCH] get multiple JSON messages working --- kitty/fonts/list.py | 8 ++++++-- tools/cmd/list_fonts/main.go | 8 ++++++++ tools/cmd/list_fonts/ui.go | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/kitty/fonts/list.py b/kitty/fonts/list.py index d141bdaf0..96a1cdeac 100644 --- a/kitty/fonts/list.py +++ b/kitty/fonts/list.py @@ -40,10 +40,10 @@ def handle_io(from_kitten: BinaryIO, to_kitten: BinaryIO) -> None: def send_to_kitten(x: Any) -> None: to_kitten.write(json.dumps(x).encode()) to_kitten.write(b'\n') + to_kitten.flush() try: send_to_kitten(create_family_groups(add_variable_data=True)) - to_kitten.write(as_json().encode()) for line in from_kitten: cmd = json.loads(line) action = cmd['action'] @@ -54,6 +54,7 @@ def send_to_kitten(x: Any) -> None: def main(argv: Sequence[str]) -> None: + import os import subprocess import sys from threading import Thread @@ -62,7 +63,10 @@ def main(argv: Sequence[str]) -> None: argv = list(argv) if '--psnames' in argv: argv.remove('--psnames') - p = subprocess.Popen([kitten_exe(), '__list_fonts__'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) + pass_fds = [] + if os.environ.get('KITTY_STDIO_FORWARDED'): + pass_fds.append(int(os.environ['KITTY_STDIO_FORWARDED'])) + p = subprocess.Popen([kitten_exe(), '__list_fonts__'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, pass_fds=pass_fds) Thread(target=handle_io, args=(p.stdout, p.stdin), daemon=True).start() try: raise SystemExit(p.wait()) diff --git a/tools/cmd/list_fonts/main.go b/tools/cmd/list_fonts/main.go index 2935f7c21..62dbc1b02 100644 --- a/tools/cmd/list_fonts/main.go +++ b/tools/cmd/list_fonts/main.go @@ -12,8 +12,16 @@ import ( var _ = fmt.Print var debugprintln = tty.DebugPrintln + var json_decoder *json.Decoder +func json_decode(v any) error { + if err := json_decoder.Decode(v); err != nil { + return fmt.Errorf("Failed to decode JSON from kitty with error: %w", err) + } + return nil +} + func main() (rc int, err error) { json_decoder = json.NewDecoder(os.Stdin) lp, err := loop.New() diff --git a/tools/cmd/list_fonts/ui.go b/tools/cmd/list_fonts/ui.go index f574b80b3..4f3a97696 100644 --- a/tools/cmd/list_fonts/ui.go +++ b/tools/cmd/list_fonts/ui.go @@ -187,7 +187,7 @@ func (h *handler) initialize() { h.rl = readline.New(h.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "Family: "}) h.draw_screen() go func() { - h.set_worker_error(json_decoder.Decode(&h.fonts)) + h.set_worker_error(json_decode(&h.fonts)) h.lp.WakeupMainThread() }() }