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

Diff for /src/usr.bin/tmux/server-client.c between version 1.177 and 1.178

version 1.177, 2015/12/12 18:19:00 version 1.178, 2015/12/12 18:32:24
Line 32 
Line 32 
   
 #include "tmux.h"  #include "tmux.h"
   
 void            server_client_key_table(struct client *, const char *);  
 void            server_client_free(int, short, void *);  void            server_client_free(int, short, void *);
 void            server_client_check_focus(struct window_pane *);  void            server_client_check_focus(struct window_pane *);
 void            server_client_check_resize(struct window_pane *);  void            server_client_check_resize(struct window_pane *);
Line 72 
Line 71 
   
 /* Set client key table. */  /* Set client key table. */
 void  void
 server_client_key_table(struct client *c, const char *name)  server_client_set_key_table(struct client *c, const char *name)
 {  {
           if (name == NULL)
                   name = server_client_get_key_table(c);
   
         key_bindings_unref_table(c->keytable);          key_bindings_unref_table(c->keytable);
         c->keytable = key_bindings_get_table(name, 1);          c->keytable = key_bindings_get_table(name, 1);
         c->keytable->references++;          c->keytable->references++;
 }  }
   
   /* Get default key table. */
   const char *
   server_client_get_key_table(struct client *c)
   {
           struct session  *s = c->session;
           const char      *name;
   
           if (s == NULL)
                   return ("root");
   
           name = options_get_string(s->options, "key-table");
           if (*name == '\0')
                   return ("root");
           return (name);
   }
   
 /* Create a new client. */  /* Create a new client. */
 void  void
 server_client_create(int fd)  server_client_create(int fd)
Line 598 
Line 616 
                  * again in the root table.                   * again in the root table.
                  */                   */
                 if ((c->flags & CLIENT_REPEAT) && !bd->can_repeat) {                  if ((c->flags & CLIENT_REPEAT) && !bd->can_repeat) {
                         server_client_key_table(c, "root");                          server_client_set_key_table(c, NULL);
                         c->flags &= ~CLIENT_REPEAT;                          c->flags &= ~CLIENT_REPEAT;
                         server_status_client(c);                          server_status_client(c);
                         goto retry;                          goto retry;
Line 625 
Line 643 
                         evtimer_add(&c->repeat_timer, &tv);                          evtimer_add(&c->repeat_timer, &tv);
                 } else {                  } else {
                         c->flags &= ~CLIENT_REPEAT;                          c->flags &= ~CLIENT_REPEAT;
                         server_client_key_table(c, "root");                          server_client_set_key_table(c, NULL);
                 }                  }
                 server_status_client(c);                  server_status_client(c);
   
Line 640 
Line 658 
          * root table and try again.           * root table and try again.
          */           */
         if (c->flags & CLIENT_REPEAT) {          if (c->flags & CLIENT_REPEAT) {
                 server_client_key_table(c, "root");                  server_client_set_key_table(c, NULL);
                 c->flags &= ~CLIENT_REPEAT;                  c->flags &= ~CLIENT_REPEAT;
                 server_status_client(c);                  server_status_client(c);
                 goto retry;                  goto retry;
         }          }
   
         /* If no match and we're not in the root table, that's it. */          /* If no match and we're not in the root table, that's it. */
         if (strcmp(c->keytable->name, "root") != 0) {          if (strcmp(c->keytable->name, server_client_get_key_table(c)) != 0) {
                 server_client_key_table(c, "root");                  server_client_set_key_table(c, NULL);
                 server_status_client(c);                  server_status_client(c);
                 return;                  return;
         }          }
Line 659 
Line 677 
          */           */
         if (key == (key_code)options_get_number(s->options, "prefix") ||          if (key == (key_code)options_get_number(s->options, "prefix") ||
             key == (key_code)options_get_number(s->options, "prefix2")) {              key == (key_code)options_get_number(s->options, "prefix2")) {
                 server_client_key_table(c, "prefix");                  server_client_set_key_table(c, "prefix");
                 server_status_client(c);                  server_status_client(c);
                 return;                  return;
         }          }
Line 834 
Line 852 
         struct client   *c = data;          struct client   *c = data;
   
         if (c->flags & CLIENT_REPEAT) {          if (c->flags & CLIENT_REPEAT) {
                 server_client_key_table(c, "root");                  server_client_set_key_table(c, NULL);
                 c->flags &= ~CLIENT_REPEAT;                  c->flags &= ~CLIENT_REPEAT;
                 server_status_client(c);                  server_status_client(c);
         }          }

Legend:
Removed from v.1.177  
changed lines
  Added in v.1.178