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

Diff for /src/usr.bin/tmux/cmd-send-keys.c between version 1.59 and 1.60

version 1.59, 2020/04/13 14:46:04 version 1.60, 2020/04/13 20:51:57
Line 57 
Line 57 
 };  };
   
 static struct cmdq_item *  static struct cmdq_item *
 cmd_send_keys_inject_key(struct client *c, struct cmd_find_state *fs,  cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after,
     struct cmdq_item *item, key_code key)      key_code key)
 {  {
         struct cmd_find_state           *target = cmdq_get_target(item);          struct cmd_find_state           *target = cmdq_get_target(item);
         struct session                  *s = fs->s;          struct client                   *tc = cmdq_get_target_client(item);
         struct winlink                  *wl = fs->wl;          struct session                  *s = target->s;
         struct window_pane              *wp = fs->wp;          struct winlink                  *wl = target->wl;
           struct window_pane              *wp = target->wp;
         struct window_mode_entry        *wme;          struct window_mode_entry        *wme;
         struct key_table                *table;          struct key_table                *table;
         struct key_binding              *bd;          struct key_binding              *bd;
   
         wme = TAILQ_FIRST(&fs->wp->modes);          wme = TAILQ_FIRST(&wp->modes);
         if (wme == NULL || wme->mode->key_table == NULL) {          if (wme == NULL || wme->mode->key_table == NULL) {
                 if (options_get_number(fs->wp->window->options, "xterm-keys"))                  if (options_get_number(wp->window->options, "xterm-keys"))
                         key |= KEYC_XTERM;                          key |= KEYC_XTERM;
                 if (window_pane_key(wp, cmdq_get_client(item), s, wl, key,                  if (window_pane_key(wp, tc, s, wl, key, NULL) != 0)
                     NULL) != 0)  
                         return (NULL);                          return (NULL);
                 return (item);                  return (item);
         }          }
Line 82 
Line 82 
         bd = key_bindings_get(table, key & ~KEYC_XTERM);          bd = key_bindings_get(table, key & ~KEYC_XTERM);
         if (bd != NULL) {          if (bd != NULL) {
                 table->references++;                  table->references++;
                 item = key_bindings_dispatch(bd, item, c, NULL, target);                  after = key_bindings_dispatch(bd, after, tc, NULL, target);
                 key_bindings_unref_table(table);                  key_bindings_unref_table(table);
         }          }
         return (item);          return (after);
 }  }
   
 static struct cmdq_item *  static struct cmdq_item *
 cmd_send_keys_inject_string(struct client *c, struct cmd_find_state *fs,  cmd_send_keys_inject_string(struct cmdq_item *item, struct cmdq_item *after,
     struct cmdq_item *item, struct args *args, int i)      struct args *args, int i)
 {  {
         const char              *s = args->argv[i];          const char              *s = args->argv[i];
         struct cmdq_item        *new_item;  
         struct utf8_data        *ud, *uc;          struct utf8_data        *ud, *uc;
         wchar_t                  wc;          wchar_t                  wc;
         key_code                 key;          key_code                 key;
Line 105 
Line 104 
                 n = strtol(s, &endptr, 16);                  n = strtol(s, &endptr, 16);
                 if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0')                  if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0')
                         return (item);                          return (item);
                 return (cmd_send_keys_inject_key(c, fs, item, KEYC_LITERAL|n));                  return (cmd_send_keys_inject_key(item, after, KEYC_LITERAL|n));
         }          }
   
         literal = args_has(args, 'l');          literal = args_has(args, 'l');
         if (!literal) {          if (!literal) {
                 key = key_string_lookup_string(s);                  key = key_string_lookup_string(s);
                 if (key != KEYC_NONE && key != KEYC_UNKNOWN) {                  if (key != KEYC_NONE && key != KEYC_UNKNOWN) {
                         new_item = cmd_send_keys_inject_key(c, fs, item, key);                          after = cmd_send_keys_inject_key(item, after, key);
                         if (new_item != NULL)                          if (after != NULL)
                                 return (new_item);                                  return (after);
                 }                  }
                 literal = 1;                  literal = 1;
         }          }
         if (literal) {          if (literal) {
                 ud = utf8_fromcstr(s);                  ud = utf8_fromcstr(s);
                 for (uc = ud; uc->size != 0; uc++) {                  for (uc = ud; uc->size != 0; uc++) {
                         if (utf8_combine(uc, &wc) != UTF8_DONE)                          if (utf8_combine(uc, &wc) == UTF8_DONE)
                                 continue;                                  continue;
                         item = cmd_send_keys_inject_key(c, fs, item, wc);                          after = cmd_send_keys_inject_key(item, after, wc);
                 }                  }
                 free(ud);                  free(ud);
         }          }
         return (item);          return (after);
 }  }
   
 static enum cmd_retval  static enum cmd_retval
Line 135 
Line 134 
 {  {
         struct args                     *args = cmd_get_args(self);          struct args                     *args = cmd_get_args(self);
         struct cmd_find_state           *target = cmdq_get_target(item);          struct cmd_find_state           *target = cmdq_get_target(item);
         struct client                   *c = cmd_find_client(item, NULL, 1);          struct client                   *tc = cmdq_get_target_client(item);
         struct window_pane              *wp = target->wp;  
         struct session                  *s = target->s;          struct session                  *s = target->s;
         struct winlink                  *wl = target->wl;          struct winlink                  *wl = target->wl;
           struct window_pane              *wp = target->wp;
         struct key_event                *event = cmdq_get_event(item);          struct key_event                *event = cmdq_get_event(item);
         struct mouse_event              *m = &event->m;          struct mouse_event              *m = &event->m;
         struct window_mode_entry        *wme = TAILQ_FIRST(&wp->modes);          struct window_mode_entry        *wme = TAILQ_FIRST(&wp->modes);
           struct cmdq_item                *after = item;
         int                              i;          int                              i;
         key_code                         key;          key_code                         key;
         u_int                            np = 1;          u_int                            np = 1;
Line 170 
Line 170 
                 }                  }
                 if (!m->valid)                  if (!m->valid)
                         m = NULL;                          m = NULL;
                 wme->mode->command(wme, c, s, wl, args, m);                  wme->mode->command(wme, tc, s, wl, args, m);
                 return (CMD_RETURN_NORMAL);                  return (CMD_RETURN_NORMAL);
         }          }
   
Line 180 
Line 180 
                         cmdq_error(item, "no mouse target");                          cmdq_error(item, "no mouse target");
                         return (CMD_RETURN_ERROR);                          return (CMD_RETURN_ERROR);
                 }                  }
                 window_pane_key(wp, cmdq_get_client(item), s, wl, m->key, m);                  window_pane_key(wp, tc, s, wl, m->key, m);
                 return (CMD_RETURN_NORMAL);                  return (CMD_RETURN_NORMAL);
         }          }
   
Line 189 
Line 189 
                         key = options_get_number(s->options, "prefix2");                          key = options_get_number(s->options, "prefix2");
                 else                  else
                         key = options_get_number(s->options, "prefix");                          key = options_get_number(s->options, "prefix");
                 cmd_send_keys_inject_key(c, target, item, key);                  cmd_send_keys_inject_key(item, item, key);
                 return (CMD_RETURN_NORMAL);                  return (CMD_RETURN_NORMAL);
         }          }
   
Line 200 
Line 200 
   
         for (; np != 0; np--) {          for (; np != 0; np--) {
                 for (i = 0; i < args->argc; i++) {                  for (i = 0; i < args->argc; i++) {
                         item = cmd_send_keys_inject_string(c, target, item,                          after = cmd_send_keys_inject_string(item, after, args,
                             args, i);                              i);
                 }                  }
         }          }
   

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.60