From eff881f4bb33491a08a9f21025e00e521a96df54 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 7 Jan 2018 17:29:08 +0530 Subject: [PATCH] Allow sending arbitrary sized escpae codes to children --- kitty/screen.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/kitty/screen.c b/kitty/screen.c index 524d33f4c..e6b9b6023 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -387,28 +387,29 @@ write_to_child(Screen *self, const char *data, size_t sz) { void write_escape_code_to_child(Screen *self, unsigned char which, const char *data) { - static char buf[512]; - size_t sz; + const char *prefix, *suffix = self->modes.eight_bit_controls ? "\x9c" : "\033\\"; switch(which) { case DCS: - sz = snprintf(buf, sizeof(buf) - 1, "%s%s%s", self->modes.eight_bit_controls ? "\x90" : "\033P", data, self->modes.eight_bit_controls ? "\x9c" : "\033\\"); + prefix = self->modes.eight_bit_controls ? "\x90" : "\033P"; break; case CSI: - sz = snprintf(buf, sizeof(buf) - 1, "%s%s", self->modes.eight_bit_controls ? "\x9b" : "\033[", data); + prefix = self->modes.eight_bit_controls ? "\x9b" : "\033["; suffix = ""; break; case OSC: - sz = snprintf(buf, sizeof(buf) - 1, "%s%s%s", self->modes.eight_bit_controls ? "\x9d" : "\033]", data, self->modes.eight_bit_controls ? "\x9c" : "\033\\"); + prefix = self->modes.eight_bit_controls ? "\x9d" : "\033]"; break; case PM: - sz = snprintf(buf, sizeof(buf) - 1, "%s%s%s", self->modes.eight_bit_controls ? "\x9e" : "\033^", data, self->modes.eight_bit_controls ? "\x9c" : "\033\\"); + prefix = self->modes.eight_bit_controls ? "\x9e" : "\033^"; break; case APC: - sz = snprintf(buf, sizeof(buf) - 1, "%s%s%s", self->modes.eight_bit_controls ? "\x9f" : "\033_", data, self->modes.eight_bit_controls ? "\x9c" : "\033\\"); + prefix = self->modes.eight_bit_controls ? "\x9f" : "\033_"; break; default: fatal("Unknown escape code to write: %u", which); } - write_to_child(self, buf, sz); + write_to_child(self, prefix, strlen(prefix)); + write_to_child(self, data, strlen(data)); + if (suffix[0]) write_to_child(self, suffix, strlen(suffix)); } void