Signed-off-by: Hayaki Saito <u...@zuse.jp>
---
 input.c | 221 +++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 115 insertions(+), 106 deletions(-)

diff --git a/input.c b/input.c
index c3c85cd..02e3658 100644
--- a/input.c
+++ b/input.c
@@ -1074,6 +1074,7 @@ input_csi_dispatch(struct input_ctx *ictx)
        struct window_pane             *wp = ictx->wp;
        struct screen                  *s = sctx->s;
        struct input_table_entry       *entry;
+       u_int                           i; 
        int                             n, m;
 
        if (ictx->flags & INPUT_DISCARD)
@@ -1230,58 +1231,62 @@ input_csi_dispatch(struct input_ctx *ictx)
                screen_write_cursormove(sctx, ictx->old_cx, ictx->old_cy);
                break;
        case INPUT_CSI_RM:
-               switch (input_get(ictx, 0, 0, -1)) {
-               case 4:         /* IRM */
-                       screen_write_mode_clear(&ictx->ctx, MODE_INSERT);
-                       break;
-               default:
-                       log_debug("%s: unknown '%c'", __func__, ictx->ch);
-                       break;
+               for (i = 0; i < ictx->param_list_len; i++) {
+                       switch (input_get(ictx, i, 0, -1)) {
+                       case 4:         /* IRM */
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_INSERT);
+                               break;
+                       default:
+                               log_debug("%s: unknown '%c'", __func__, 
ictx->ch);
+                               break;
+                       }
                }
                break;
        case INPUT_CSI_RM_PRIVATE:
-               switch (input_get(ictx, 0, 0, -1)) {
-               case 1:         /* DECCKM */
-                       screen_write_mode_clear(&ictx->ctx, MODE_KCURSOR);
-                       break;
-               case 3:         /* DECCOLM */
-                       screen_write_cursormove(&ictx->ctx, 0, 0);
-                       screen_write_clearscreen(&ictx->ctx);
-                       break;
-               case 7:         /* DECAWM */
-                       screen_write_mode_clear(&ictx->ctx, MODE_WRAP);
-                       break;
-               case 25:        /* TCEM */
-                       screen_write_mode_clear(&ictx->ctx, MODE_CURSOR);
-                       break;
-               case 1000:
-               case 1001:
-               case 1002:
-               case 1003:
-                       screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES);
-                       break;
-               case 1004:
-                       screen_write_mode_clear(&ictx->ctx, MODE_FOCUSON);
-                       break;
-               case 1005:
-                       screen_write_mode_clear(&ictx->ctx, MODE_MOUSE_UTF8);
-                       break;
-               case 1006:
-                       screen_write_mode_clear(&ictx->ctx, MODE_MOUSE_SGR);
-                       break;
-               case 47:
-               case 1047:
-                       window_pane_alternate_off(wp, &ictx->cell, 0);
-                       break;
-               case 1049:
-                       window_pane_alternate_off(wp, &ictx->cell, 1);
-                       break;
-               case 2004:
-                       screen_write_mode_clear(&ictx->ctx, MODE_BRACKETPASTE);
-                       break;
-               default:
-                       log_debug("%s: unknown '%c'", __func__, ictx->ch);
-                       break;
+               for (i = 0; i < ictx->param_list_len; i++) {
+                       switch (input_get(ictx, i, 0, -1)) {
+                       case 1:         /* DECCKM */
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_KCURSOR);
+                               break;
+                       case 3:         /* DECCOLM */
+                               screen_write_cursormove(&ictx->ctx, 0, 0);
+                               screen_write_clearscreen(&ictx->ctx);
+                               break;
+                       case 7:         /* DECAWM */
+                               screen_write_mode_clear(&ictx->ctx, MODE_WRAP);
+                               break;
+                       case 25:        /* TCEM */
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_CURSOR);
+                               break;
+                       case 1000:
+                       case 1001:
+                       case 1002:
+                       case 1003:
+                               screen_write_mode_clear(&ictx->ctx, 
ALL_MOUSE_MODES);
+                               break;
+                       case 1004:
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_FOCUSON);
+                               break;
+                       case 1005:
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_MOUSE_UTF8);
+                               break;
+                       case 1006:
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_MOUSE_SGR);
+                               break;
+                       case 47:
+                       case 1047:
+                               window_pane_alternate_off(wp, &ictx->cell, 0);
+                               break;
+                       case 1049:
+                               window_pane_alternate_off(wp, &ictx->cell, 1);
+                               break;
+                       case 2004:
+                               screen_write_mode_clear(&ictx->ctx, 
MODE_BRACKETPASTE);
+                               break;
+                       default:
+                               log_debug("%s: unknown '%c'", __func__, 
ictx->ch);
+                               break;
+                       }
                }
                break;
        case INPUT_CSI_SCP:
@@ -1293,67 +1298,71 @@ input_csi_dispatch(struct input_ctx *ictx)
                input_csi_dispatch_sgr(ictx);
                break;
        case INPUT_CSI_SM:
-               switch (input_get(ictx, 0, 0, -1)) {
-               case 4:         /* IRM */
-                       screen_write_mode_set(&ictx->ctx, MODE_INSERT);
-                       break;
-               default:
-                       log_debug("%s: unknown '%c'", __func__, ictx->ch);
-                       break;
+               for (i = 0; i < ictx->param_list_len; i++) {
+                       switch (input_get(ictx, i, 0, -1)) {
+                       case 4:         /* IRM */
+                               screen_write_mode_set(&ictx->ctx, MODE_INSERT);
+                               break;
+                       default:
+                               log_debug("%s: unknown '%c'", __func__, 
ictx->ch);
+                               break;
+                       }
                }
                break;
        case INPUT_CSI_SM_PRIVATE:
-               switch (input_get(ictx, 0, 0, -1)) {
-               case 1:         /* DECCKM */
-                       screen_write_mode_set(&ictx->ctx, MODE_KCURSOR);
-                       break;
-               case 3:         /* DECCOLM */
-                       screen_write_cursormove(&ictx->ctx, 0, 0);
-                       screen_write_clearscreen(&ictx->ctx);
-                       break;
-               case 7:         /* DECAWM */
-                       screen_write_mode_set(&ictx->ctx, MODE_WRAP);
-                       break;
-               case 25:        /* TCEM */
-                       screen_write_mode_set(&ictx->ctx, MODE_CURSOR);
-                       break;
-               case 1000:
-                       screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES);
-                       screen_write_mode_set(&ictx->ctx, MODE_MOUSE_STANDARD);
-                       break;
-               case 1002:
-                       screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES);
-                       screen_write_mode_set(&ictx->ctx, MODE_MOUSE_BUTTON);
-                       break;
-               case 1003:
-                       screen_write_mode_clear(&ictx->ctx, ALL_MOUSE_MODES);
-                       screen_write_mode_set(&ictx->ctx, MODE_MOUSE_ANY);
-                       break;
-               case 1004:
-                       if (s->mode & MODE_FOCUSON)
+               for (i = 0; i < ictx->param_list_len; i++) {
+                       switch (input_get(ictx, i, 0, -1)) {
+                       case 1:         /* DECCKM */
+                               screen_write_mode_set(&ictx->ctx, MODE_KCURSOR);
                                break;
-                       screen_write_mode_set(&ictx->ctx, MODE_FOCUSON);
-                       wp->flags |= PANE_FOCUSPUSH; /* force update */
-                       break;
-               case 1005:
-                       screen_write_mode_set(&ictx->ctx, MODE_MOUSE_UTF8);
-                       break;
-               case 1006:
-                       screen_write_mode_set(&ictx->ctx, MODE_MOUSE_SGR);
-                       break;
-               case 47:
-               case 1047:
-                       window_pane_alternate_on(wp, &ictx->cell, 0);
-                       break;
-               case 1049:
-                       window_pane_alternate_on(wp, &ictx->cell, 1);
-                       break;
-               case 2004:
-                       screen_write_mode_set(&ictx->ctx, MODE_BRACKETPASTE);
-                       break;
-               default:
-                       log_debug("%s: unknown '%c'", __func__, ictx->ch);
-                       break;
+                       case 3:         /* DECCOLM */
+                               screen_write_cursormove(&ictx->ctx, 0, 0);
+                               screen_write_clearscreen(&ictx->ctx);
+                               break;
+                       case 7:         /* DECAWM */
+                               screen_write_mode_set(&ictx->ctx, MODE_WRAP);
+                               break;
+                       case 25:        /* TCEM */
+                               screen_write_mode_set(&ictx->ctx, MODE_CURSOR);
+                               break;
+                       case 1000:
+                               screen_write_mode_clear(&ictx->ctx, 
ALL_MOUSE_MODES);
+                               screen_write_mode_set(&ictx->ctx, 
MODE_MOUSE_STANDARD);
+                               break;
+                       case 1002:
+                               screen_write_mode_clear(&ictx->ctx, 
ALL_MOUSE_MODES);
+                               screen_write_mode_set(&ictx->ctx, 
MODE_MOUSE_BUTTON);
+                               break;
+                       case 1003:
+                               screen_write_mode_clear(&ictx->ctx, 
ALL_MOUSE_MODES);
+                               screen_write_mode_set(&ictx->ctx, 
MODE_MOUSE_ANY);
+                               break;
+                       case 1004:
+                               if (s->mode & MODE_FOCUSON)
+                                       break;
+                               screen_write_mode_set(&ictx->ctx, MODE_FOCUSON);
+                               wp->flags |= PANE_FOCUSPUSH; /* force update */
+                               break;
+                       case 1005:
+                               screen_write_mode_set(&ictx->ctx, 
MODE_MOUSE_UTF8);
+                               break;
+                       case 1006:
+                               screen_write_mode_set(&ictx->ctx, 
MODE_MOUSE_SGR);
+                               break;
+                       case 47:
+                       case 1047:
+                               window_pane_alternate_on(wp, &ictx->cell, 0);
+                               break;
+                       case 1049:
+                               window_pane_alternate_on(wp, &ictx->cell, 1);
+                               break;
+                       case 2004:
+                               screen_write_mode_set(&ictx->ctx, 
MODE_BRACKETPASTE);
+                               break;
+                       default:
+                               log_debug("%s: unknown '%c'", __func__, 
ictx->ch);
+                               break;
+                       }
                }
                break;
        case INPUT_CSI_TBC:
-- 
1.8.3.4


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to