mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Make unbind-key -a work with -t, based on a diff from Kazuhiko Sakaguchi.
This commit is contained in:
		@@ -42,7 +42,7 @@ const struct cmd_entry cmd_unbind_key_entry = {
 | 
			
		||||
int
 | 
			
		||||
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);
 | 
			
		||||
	if (!args_has(args, 'a') && args->argc != 1)
 | 
			
		||||
		return (-1);
 | 
			
		||||
@@ -56,7 +56,19 @@ cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
 | 
			
		||||
	struct key_binding	*bd;
 | 
			
		||||
	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)) {
 | 
			
		||||
			bd = RB_ROOT(&key_bindings);
 | 
			
		||||
			key_bindings_remove(bd->key);
 | 
			
		||||
@@ -64,15 +76,6 @@ cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
 | 
			
		||||
		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'))
 | 
			
		||||
		key |= KEYC_PREFIX;
 | 
			
		||||
	key_bindings_remove(key);
 | 
			
		||||
@@ -93,6 +96,15 @@ cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
 | 
			
		||||
		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.mode = !!args_has(args, 'c');
 | 
			
		||||
	if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user