[BACK]Return to input-keys.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/input-keys.c between version 1.73 and 1.74

version 1.73, 2020/05/16 16:33:16 version 1.74, 2020/05/16 16:35:13
Line 266 
Line 266 
         },          },
   
         /* Keys with an embedded modifier. */          /* Keys with an embedded modifier. */
         { .key = KEYC_F1|KEYC_XTERM,          { .key = KEYC_F1|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_P"            .data = "\033[1;_P"
         },          },
         { .key = KEYC_F2|KEYC_XTERM,          { .key = KEYC_F2|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_Q"            .data = "\033[1;_Q"
         },          },
         { .key = KEYC_F3|KEYC_XTERM,          { .key = KEYC_F3|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_R"            .data = "\033[1;_R"
         },          },
         { .key = KEYC_F4|KEYC_XTERM,          { .key = KEYC_F4|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_S"            .data = "\033[1;_S"
         },          },
         { .key = KEYC_F5|KEYC_XTERM,          { .key = KEYC_F5|KEYC_BUILD_MODIFIERS,
           .data = "\033[15;_~"            .data = "\033[15;_~"
         },          },
         { .key = KEYC_F6|KEYC_XTERM,          { .key = KEYC_F6|KEYC_BUILD_MODIFIERS,
           .data = "\033[17;_~"            .data = "\033[17;_~"
         },          },
         { .key = KEYC_F7|KEYC_XTERM,          { .key = KEYC_F7|KEYC_BUILD_MODIFIERS,
           .data = "\033[18;_~"            .data = "\033[18;_~"
         },          },
         { .key = KEYC_F8|KEYC_XTERM,          { .key = KEYC_F8|KEYC_BUILD_MODIFIERS,
           .data = "\033[19;_~"            .data = "\033[19;_~"
         },          },
         { .key = KEYC_F9|KEYC_XTERM,          { .key = KEYC_F9|KEYC_BUILD_MODIFIERS,
           .data = "\033[20;_~"            .data = "\033[20;_~"
         },          },
         { .key = KEYC_F10|KEYC_XTERM,          { .key = KEYC_F10|KEYC_BUILD_MODIFIERS,
           .data = "\033[21;_~"            .data = "\033[21;_~"
         },          },
         { .key = KEYC_F11|KEYC_XTERM,          { .key = KEYC_F11|KEYC_BUILD_MODIFIERS,
           .data = "\033[23;_~"            .data = "\033[23;_~"
         },          },
         { .key = KEYC_F12|KEYC_XTERM,          { .key = KEYC_F12|KEYC_BUILD_MODIFIERS,
           .data = "\033[24;_~"            .data = "\033[24;_~"
         },          },
         { .key = KEYC_UP|KEYC_XTERM,          { .key = KEYC_UP|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_A"            .data = "\033[1;_A"
         },          },
         { .key = KEYC_DOWN|KEYC_XTERM,          { .key = KEYC_DOWN|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_B"            .data = "\033[1;_B"
         },          },
         { .key = KEYC_RIGHT|KEYC_XTERM,          { .key = KEYC_RIGHT|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_C"            .data = "\033[1;_C"
         },          },
         { .key = KEYC_LEFT|KEYC_XTERM,          { .key = KEYC_LEFT|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_D"            .data = "\033[1;_D"
         },          },
         { .key = KEYC_HOME|KEYC_XTERM,          { .key = KEYC_HOME|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_H"            .data = "\033[1;_H"
         },          },
         { .key = KEYC_END|KEYC_XTERM,          { .key = KEYC_END|KEYC_BUILD_MODIFIERS,
           .data = "\033[1;_F"            .data = "\033[1;_F"
         },          },
         { .key = KEYC_PPAGE|KEYC_XTERM,          { .key = KEYC_PPAGE|KEYC_BUILD_MODIFIERS,
           .data = "\033[5;_~"            .data = "\033[5;_~"
         },          },
         { .key = KEYC_NPAGE|KEYC_XTERM,          { .key = KEYC_NPAGE|KEYC_BUILD_MODIFIERS,
           .data = "\033[6;_~"            .data = "\033[6;_~"
         },          },
         { .key = KEYC_IC|KEYC_XTERM,          { .key = KEYC_IC|KEYC_BUILD_MODIFIERS,
           .data = "\033[2;_~"            .data = "\033[2;_~"
         },          },
         { .key = KEYC_DC|KEYC_XTERM,          { .key = KEYC_DC|KEYC_BUILD_MODIFIERS,
           .data = "\033[3;_~" }            .data = "\033[3;_~" }
 };  };
 static const key_code input_key_modifiers[] = {  static const key_code input_key_modifiers[] = {
         0,          0,
         0,          0,
         KEYC_SHIFT|KEYC_XTERM,          KEYC_SHIFT,
         KEYC_META|KEYC_XTERM,          KEYC_META|KEYC_IMPLIED_META,
         KEYC_SHIFT|KEYC_META|KEYC_XTERM,          KEYC_SHIFT|KEYC_META|KEYC_IMPLIED_META,
         KEYC_CTRL|KEYC_XTERM,          KEYC_CTRL,
         KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM,          KEYC_SHIFT|KEYC_CTRL,
         KEYC_META|KEYC_CTRL|KEYC_XTERM,          KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL,
         KEYC_SHIFT|KEYC_META|KEYC_CTRL|KEYC_XTERM          KEYC_SHIFT|KEYC_META|KEYC_IMPLIED_META|KEYC_CTRL
 };  };
   
 /* Input key comparison function. */  /* Input key comparison function. */
Line 355 
Line 355 
         return (0);          return (0);
 }  }
   
   /* Look for key in tree. */
   static struct input_key_entry *
   input_key_get (key_code key)
   {
           struct input_key_entry  entry = { .key = key };
   
           return (RB_FIND(input_key_tree, &input_key_tree, &entry));
   }
   
 /* Split a character into two UTF-8 bytes. */  /* Split a character into two UTF-8 bytes. */
 static size_t  static size_t
 input_key_split2(u_int c, u_char *dst)  input_key_split2(u_int c, u_char *dst)
Line 375 
Line 384 
         struct input_key_entry  *ike, *new;          struct input_key_entry  *ike, *new;
         u_int                    i, j;          u_int                    i, j;
         char                    *data;          char                    *data;
           key_code                 key;
   
         for (i = 0; i < nitems(input_key_defaults); i++) {          for (i = 0; i < nitems(input_key_defaults); i++) {
                 ike = &input_key_defaults[i];                  ike = &input_key_defaults[i];
                 if (~ike->key & KEYC_XTERM) {                  if (~ike->key & KEYC_BUILD_MODIFIERS) {
                         RB_INSERT(input_key_tree, &input_key_tree, ike);                          RB_INSERT(input_key_tree, &input_key_tree, ike);
                         continue;                          continue;
                 }                  }
   
                 for (j = 2; j < nitems(input_key_modifiers); j++) {                  for (j = 2; j < nitems(input_key_modifiers); j++) {
                           key = (ike->key & ~KEYC_BUILD_MODIFIERS);
                         data = xstrdup(ike->data);                          data = xstrdup(ike->data);
                         data[strcspn(data, "_")] = '0' + j;                          data[strcspn(data, "_")] = '0' + j;
   
                         new = xcalloc(1, sizeof *new);                          new = xcalloc(1, sizeof *new);
                         new->key = ike->key|input_key_modifiers[j];                          new->key = key|input_key_modifiers[j];
                         new->data = data;                          new->data = data;
                         RB_INSERT(input_key_tree, &input_key_tree, new);                          RB_INSERT(input_key_tree, &input_key_tree, new);
                 }                  }
Line 396 
Line 407 
   
         RB_FOREACH(ike, input_key_tree, &input_key_tree) {          RB_FOREACH(ike, input_key_tree, &input_key_tree) {
                 log_debug("%s: 0x%llx (%s) is %s", __func__, ike->key,                  log_debug("%s: 0x%llx (%s) is %s", __func__, ike->key,
                     key_string_lookup_key(ike->key), ike->data);                      key_string_lookup_key(ike->key, 1), ike->data);
         }          }
 }  }
   
Line 406 
Line 417 
 {  {
         if (log_get_level() != 0) {          if (log_get_level() != 0) {
                 log_debug("writing key 0x%llx (%s) to %%%u", key,                  log_debug("writing key 0x%llx (%s) to %%%u", key,
                     key_string_lookup_key(key), wp->id);                      key_string_lookup_key(key, 1), wp->id);
         }          }
   
         if (KEYC_IS_MOUSE(key)) {          if (KEYC_IS_MOUSE(key)) {
Line 421 
Line 432 
 int  int
 input_key(struct screen *s, struct bufferevent *bev, key_code key)  input_key(struct screen *s, struct bufferevent *bev, key_code key)
 {  {
         struct input_key_entry  *ike, entry;          struct input_key_entry  *ike;
         size_t                   datalen;          size_t                   datalen;
         key_code                 justkey, newkey;          key_code                 justkey, newkey;
         struct utf8_data         ud;          struct utf8_data         ud;
Line 442 
Line 453 
                 newkey = options_get_number(global_options, "backspace");                  newkey = options_get_number(global_options, "backspace");
                 if (newkey >= 0x7f)                  if (newkey >= 0x7f)
                         newkey = '\177';                          newkey = '\177';
                 key = newkey|(key & KEYC_MASK_MOD);                  key = newkey|(key & (KEYC_MASK_MODIFIERS|KEYC_MASK_FLAGS));
         }          }
   
         /*          /*
          * If this is a normal 7-bit key, just send it, with a leading escape           * If this is a normal 7-bit key, just send it, with a leading escape
          * if necessary. If it is a UTF-8 key, split it and send it.           * if necessary. If it is a UTF-8 key, split it and send it.
          */           */
         justkey = (key & ~(KEYC_XTERM|KEYC_META));          justkey = (key & ~KEYC_META);
         if (justkey <= 0x7f) {          if (justkey <= 0x7f) {
                 if (key & KEYC_META)                  if (key & KEYC_META)
                         bufferevent_write(bev, "\033", 1);                          bufferevent_write(bev, "\033", 1);
Line 474 
Line 485 
                 key &= ~KEYC_KEYPAD;                  key &= ~KEYC_KEYPAD;
         if (~s->mode & MODE_KCURSOR)          if (~s->mode & MODE_KCURSOR)
                 key &= ~KEYC_CURSOR;                  key &= ~KEYC_CURSOR;
         entry.key = key;          ike = input_key_get(key);
         if ((ike = RB_FIND(input_key_tree, &input_key_tree, &entry)) == NULL) {          if (ike == NULL && (key & KEYC_META) && (~key & KEYC_IMPLIED_META))
                   ike = input_key_get(key & ~KEYC_META);
           if (ike == NULL) {
                 log_debug("key 0x%llx missing", key);                  log_debug("key 0x%llx missing", key);
                 return (-1);                  return (-1);
         }          }
Line 483 
Line 496 
         log_debug("found key 0x%llx: \"%s\"", key, ike->data);          log_debug("found key 0x%llx: \"%s\"", key, ike->data);
   
         /* Prefix a \033 for escape. */          /* Prefix a \033 for escape. */
         if (key & KEYC_META)          if (key & KEYC_META && (~key & KEYC_IMPLIED_META))
                 bufferevent_write(bev, "\033", 1);                  bufferevent_write(bev, "\033", 1);
         bufferevent_write(bev, ike->data, datalen);          bufferevent_write(bev, ike->data, datalen);
         return (0);          return (0);

Legend:
Removed from v.1.73  
changed lines
  Added in v.1.74