version 1.7, 2010/01/23 17:50:56 |
version 1.8, 2010/11/11 20:54:06 |
|
|
struct cmd_unbind_key_data { |
struct cmd_unbind_key_data { |
int key; |
int key; |
|
|
|
int flag_all; |
int command_key; |
int command_key; |
char *tablename; |
char *tablename; |
}; |
}; |
|
|
const struct cmd_entry cmd_unbind_key_entry = { |
const struct cmd_entry cmd_unbind_key_entry = { |
"unbind-key", "unbind", |
"unbind-key", "unbind", |
"[-cn] [-t key-table] key", |
"[-acn] [-t key-table] key", |
0, "", |
0, "", |
NULL, |
NULL, |
cmd_unbind_key_parse, |
cmd_unbind_key_parse, |
|
|
int opt, no_prefix = 0; |
int opt, no_prefix = 0; |
|
|
self->data = data = xmalloc(sizeof *data); |
self->data = data = xmalloc(sizeof *data); |
|
data->flag_all = 0; |
data->command_key = 0; |
data->command_key = 0; |
data->tablename = NULL; |
data->tablename = NULL; |
|
|
while ((opt = getopt(argc, argv, "cnt:")) != -1) { |
while ((opt = getopt(argc, argv, "acnt:")) != -1) { |
switch (opt) { |
switch (opt) { |
|
case 'a': |
|
data->flag_all = 1; |
|
break; |
case 'c': |
case 'c': |
data->command_key = 1; |
data->command_key = 1; |
break; |
break; |
|
|
} |
} |
argc -= optind; |
argc -= optind; |
argv += optind; |
argv += optind; |
if (argc != 1) |
if (data->flag_all && (argc != 0 || data->tablename)) |
goto usage; |
goto usage; |
|
if (!data->flag_all && argc != 1) |
|
goto usage; |
|
|
if ((data->key = key_string_lookup_string(argv[0])) == KEYC_NONE) { |
if (!data->flag_all) { |
xasprintf(cause, "unknown key: %s", argv[0]); |
data->key = key_string_lookup_string(argv[0]); |
goto error; |
if (data->key == KEYC_NONE) { |
|
xasprintf(cause, "unknown key: %s", argv[0]); |
|
goto error; |
|
} |
|
if (!no_prefix) |
|
data->key |= KEYC_PREFIX; |
} |
} |
if (!no_prefix) |
|
data->key |= KEYC_PREFIX; |
|
|
|
return (0); |
return (0); |
|
|
|
|
cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx) |
cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx) |
{ |
{ |
struct cmd_unbind_key_data *data = self->data; |
struct cmd_unbind_key_data *data = self->data; |
|
struct key_binding *bd; |
|
|
if (data == NULL) |
if (data == NULL) |
return (0); |
return (0); |
if (data->tablename != NULL) |
if (data->flag_all) { |
return (cmd_unbind_key_table(self, ctx)); |
while (!SPLAY_EMPTY(&key_bindings)) { |
|
bd = SPLAY_ROOT(&key_bindings); |
|
SPLAY_REMOVE(key_bindings, &key_bindings, bd); |
|
cmd_list_free(bd->cmdlist); |
|
xfree(bd); |
|
} |
|
} else { |
|
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); |
} |
} |