From: nicm Date: Fri, 15 Sep 2023 06:28:15 +0000 (+0000) Subject: Add some more WINOPS and a placeholder for SMGRAPHICS. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=7b23d14c3efe1f8c94bf55ff7ce26a4dfadda322;p=openbsd Add some more WINOPS and a placeholder for SMGRAPHICS. --- diff --git a/usr.bin/tmux/input.c b/usr.bin/tmux/input.c index 41826662b17..ae9f6f27d54 100644 --- a/usr.bin/tmux/input.c +++ b/usr.bin/tmux/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.220 2023/08/23 08:30:07 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.221 2023/09/15 06:28:15 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -169,6 +169,7 @@ static void input_csi_dispatch_rm(struct input_ctx *); static void input_csi_dispatch_rm_private(struct input_ctx *); static void input_csi_dispatch_sm(struct input_ctx *); static void input_csi_dispatch_sm_private(struct input_ctx *); +static void input_csi_dispatch_sm_graphics(struct input_ctx *); static void input_csi_dispatch_winops(struct input_ctx *); static void input_csi_dispatch_sgr_256(struct input_ctx *, int, u_int *); static void input_csi_dispatch_sgr_rgb(struct input_ctx *, int, u_int *); @@ -203,7 +204,7 @@ enum input_esc_type { INPUT_ESC_SCSG0_ON, INPUT_ESC_SCSG1_OFF, INPUT_ESC_SCSG1_ON, - INPUT_ESC_ST, + INPUT_ESC_ST }; /* Escape command table. */ @@ -259,11 +260,12 @@ enum input_csi_type { INPUT_CSI_SGR, INPUT_CSI_SM, INPUT_CSI_SM_PRIVATE, + INPUT_CSI_SM_GRAPHICS, INPUT_CSI_SU, INPUT_CSI_TBC, INPUT_CSI_VPA, INPUT_CSI_WINOPS, - INPUT_CSI_XDA, + INPUT_CSI_XDA }; /* Control (CSI) command table. */ @@ -283,6 +285,7 @@ static const struct input_table_entry input_csi_table[] = { { 'M', "", INPUT_CSI_DL }, { 'P', "", INPUT_CSI_DCH }, { 'S', "", INPUT_CSI_SU }, + { 'S', "?", INPUT_CSI_SM_GRAPHICS }, { 'T', "", INPUT_CSI_SD }, { 'X', "", INPUT_CSI_ECH }, { 'Z', "", INPUT_CSI_CBT }, @@ -306,7 +309,7 @@ static const struct input_table_entry input_csi_table[] = { { 'r', "", INPUT_CSI_DECSTBM }, { 's', "", INPUT_CSI_SCP }, { 't', "", INPUT_CSI_WINOPS }, - { 'u', "", INPUT_CSI_RCP }, + { 'u', "", INPUT_CSI_RCP } }; /* Input transition. */ @@ -1595,6 +1598,9 @@ input_csi_dispatch(struct input_ctx *ictx) case INPUT_CSI_SM_PRIVATE: input_csi_dispatch_sm_private(ictx); break; + case INPUT_CSI_SM_GRAPHICS: + input_csi_dispatch_sm_graphics(ictx); + break; case INPUT_CSI_SU: n = input_get(ictx, 0, 1, 1); if (n != -1) @@ -1827,6 +1833,12 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx) } } +/* Handle CSI graphics SM. */ +static void +input_csi_dispatch_sm_graphics(struct input_ctx *ictx) +{ +} + /* Handle CSI window operations. */ static void input_csi_dispatch_winops(struct input_ctx *ictx) @@ -1834,6 +1846,7 @@ input_csi_dispatch_winops(struct input_ctx *ictx) struct screen_write_ctx *sctx = &ictx->ctx; struct screen *s = sctx->s; struct window_pane *wp = ictx->wp; + struct window *w = wp->window; u_int x = screen_size_x(s), y = screen_size_y(s); int n, m; @@ -1847,8 +1860,6 @@ input_csi_dispatch_winops(struct input_ctx *ictx) case 7: case 11: case 13: - case 14: - case 19: case 20: case 21: case 24: @@ -1866,6 +1877,21 @@ input_csi_dispatch_winops(struct input_ctx *ictx) if (input_get(ictx, m, 0, -1) == -1) return; break; + case 14: + input_reply(ictx, "\033[4;%u;%ut", y * w->ypixel, x * w->xpixel); + break; + case 15: + input_reply(ictx, "\033[5;%u;%ut", y * w->ypixel, x * w->xpixel); + break; + case 16: + input_reply(ictx, "\033[6;%u;%ut", w->ypixel, w->xpixel); + break; + case 18: + input_reply(ictx, "\033[8;%u;%ut", y, x); + break; + case 19: + input_reply(ictx, "\033[9;%u;%ut", y, x); + break; case 22: m++; switch (input_get(ictx, m, 0, -1)) { @@ -1893,9 +1919,6 @@ input_csi_dispatch_winops(struct input_ctx *ictx) break; } break; - case 18: - input_reply(ictx, "\033[8;%u;%ut", y, x); - break; default: log_debug("%s: unknown '%c'", __func__, ictx->ch); break;