mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 18:38:48 +00:00
Make unbind-key -a work with -t, based on a diff from Kazuhiko Sakaguchi.
This commit is contained in:
parent
cc979bda0f
commit
f66b105c21
@ -42,7 +42,7 @@ const struct cmd_entry cmd_unbind_key_entry = {
|
|||||||
int
|
int
|
||||||
cmd_unbind_key_check(struct args *args)
|
cmd_unbind_key_check(struct args *args)
|
||||||
{
|
{
|
||||||
if (args_has(args, 'a') && (args->argc != 0 || args_has(args, 't')))
|
if (args_has(args, 'a') && args->argc != 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (!args_has(args, 'a') && args->argc != 1)
|
if (!args_has(args, 'a') && args->argc != 1)
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -56,7 +56,19 @@ cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
|
|||||||
struct key_binding *bd;
|
struct key_binding *bd;
|
||||||
int key;
|
int key;
|
||||||
|
|
||||||
if (args_has(args, 'a')) {
|
if (!args_has(args, 'a')) {
|
||||||
|
key = key_string_lookup_string(args->argv[0]);
|
||||||
|
if (key == KEYC_NONE) {
|
||||||
|
ctx->error(ctx, "unknown key: %s", args->argv[0]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
key = KEYC_NONE;
|
||||||
|
|
||||||
|
if (args_has(args, 't'))
|
||||||
|
return (cmd_unbind_key_table(self, ctx, key));
|
||||||
|
|
||||||
|
if (key == KEYC_NONE) {
|
||||||
while (!RB_EMPTY(&key_bindings)) {
|
while (!RB_EMPTY(&key_bindings)) {
|
||||||
bd = RB_ROOT(&key_bindings);
|
bd = RB_ROOT(&key_bindings);
|
||||||
key_bindings_remove(bd->key);
|
key_bindings_remove(bd->key);
|
||||||
@ -64,15 +76,6 @@ cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
key = key_string_lookup_string(args->argv[0]);
|
|
||||||
if (key == KEYC_NONE) {
|
|
||||||
ctx->error(ctx, "unknown key: %s", args->argv[0]);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args_has(args, 't'))
|
|
||||||
return (cmd_unbind_key_table(self, ctx, key));
|
|
||||||
|
|
||||||
if (!args_has(args, 'n'))
|
if (!args_has(args, 'n'))
|
||||||
key |= KEYC_PREFIX;
|
key |= KEYC_PREFIX;
|
||||||
key_bindings_remove(key);
|
key_bindings_remove(key);
|
||||||
@ -93,6 +96,15 @@ cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key == KEYC_NONE) {
|
||||||
|
while (!RB_EMPTY(mtab->tree)) {
|
||||||
|
mbind = RB_ROOT(mtab->tree);
|
||||||
|
RB_REMOVE(mode_key_tree, mtab->tree, mbind);
|
||||||
|
xfree(mbind);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
mtmp.key = key;
|
mtmp.key = key;
|
||||||
mtmp.mode = !!args_has(args, 'c');
|
mtmp.mode = !!args_has(args, 'c');
|
||||||
if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
|
if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user