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

Diff for /src/usr.bin/tmux/cmd-unbind-key.c between version 1.4 and 1.5

version 1.4, 2009/07/26 12:58:44 version 1.5, 2009/07/28 17:05:10
Line 28 
Line 28 
 int     cmd_unbind_key_exec(struct cmd *, struct cmd_ctx *);  int     cmd_unbind_key_exec(struct cmd *, struct cmd_ctx *);
 void    cmd_unbind_key_free(struct cmd *);  void    cmd_unbind_key_free(struct cmd *);
   
   int     cmd_unbind_key_table(struct cmd *, struct cmd_ctx *);
   
 struct cmd_unbind_key_data {  struct cmd_unbind_key_data {
         int     key;          int     key;
   
           int     command_key;
           char   *tablename;
 };  };
   
 const struct cmd_entry cmd_unbind_key_entry = {  const struct cmd_entry cmd_unbind_key_entry = {
         "unbind-key", "unbind",          "unbind-key", "unbind",
         "[-n] key",          "[-cn] [-t key-table] key",
         0, 0,          0, 0,
         NULL,          NULL,
         cmd_unbind_key_parse,          cmd_unbind_key_parse,
Line 50 
Line 55 
         int                              opt, no_prefix = 0;          int                              opt, no_prefix = 0;
   
         self->data = data = xmalloc(sizeof *data);          self->data = data = xmalloc(sizeof *data);
           data->command_key = 0;
           data->tablename = NULL;
   
         while ((opt = getopt(argc, argv, "n")) != -1) {          while ((opt = getopt(argc, argv, "cnt:")) != -1) {
                 switch (opt) {                  switch (opt) {
                   case 'c':
                           data->command_key = 1;
                           break;
                 case 'n':                  case 'n':
                         no_prefix = 1;                          no_prefix = 1;
                         break;                          break;
                   case 't':
                           data->tablename = xstrdup(optarg);
                           break;
                 default:                  default:
                         goto usage;                          goto usage;
                 }                  }
Line 89 
Line 102 
   
         if (data == NULL)          if (data == NULL)
                 return (0);                  return (0);
           if (data->tablename != NULL)
                   return (cmd_unbind_key_table(self, ctx));
   
         key_bindings_remove(data->key);          key_bindings_remove(data->key);
   
         return (0);          return (0);
 }  }
   
   int
   cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx)
   {
           struct cmd_unbind_key_data      *data = self->data;
           const struct mode_key_table     *mtab;
           struct mode_key_binding         *mbind, mtmp;
   
           if ((mtab = mode_key_findtable(data->tablename)) == NULL) {
                   ctx->error(ctx, "unknown key table: %s", data->tablename);
                   return (-1);
           }
   
           mtmp.key = data->key & ~KEYC_PREFIX;
           mtmp.mode = data->command_key ? 1 : 0;
           if ((mbind = SPLAY_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
                   SPLAY_REMOVE(mode_key_tree, mtab->tree, mbind);
                   xfree(mbind);
           }
           return (0);
   }
   
 void  void
 cmd_unbind_key_free(struct cmd *self)  cmd_unbind_key_free(struct cmd *self)
 {  {
         struct cmd_unbind_key_data      *data = self->data;          struct cmd_unbind_key_data      *data = self->data;
   
           if (data->tablename != NULL)
                   xfree(data->tablename);
         xfree(data);          xfree(data);
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5