mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Make prefix work in all tables (except the prefix table). Users who want
to avoid this can set prefix to "none" and bind send-prefix themselves. Allows C-b t be bound in the copy mode tables again, pointed out by millert@.
This commit is contained in:
		@@ -238,6 +238,7 @@ key_bindings_init(void)
 | 
			
		||||
		"bind -Tcopy-mode C-c send -X cancel",
 | 
			
		||||
		"bind -Tcopy-mode C-e send -X end-of-line",
 | 
			
		||||
		"bind -Tcopy-mode C-f send -X cursor-right",
 | 
			
		||||
		"bind -Tcopy-mode C-b send -X cursor-left",
 | 
			
		||||
		"bind -Tcopy-mode C-g send -X clear-selection",
 | 
			
		||||
		"bind -Tcopy-mode C-k send -X copy-end-of-line",
 | 
			
		||||
		"bind -Tcopy-mode C-n send -X cursor-down",
 | 
			
		||||
@@ -300,6 +301,7 @@ key_bindings_init(void)
 | 
			
		||||
		"bind -Tcopy-mode-vi C-c send -X cancel",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-d send -X halfpage-down",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-e send -X scroll-down",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-b send -X page-up",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-f send -X page-down",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-h send -X cursor-left",
 | 
			
		||||
		"bind -Tcopy-mode-vi C-j send -X copy-selection-and-cancel",
 | 
			
		||||
 
 | 
			
		||||
@@ -782,6 +782,18 @@ retry:
 | 
			
		||||
	else
 | 
			
		||||
		log_debug("key table %s (pane %%%u)", table->name, wp->id);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * The prefix always takes precedence and forces a switch to the prefix
 | 
			
		||||
	 * table, unless we are already there.
 | 
			
		||||
	 */
 | 
			
		||||
	if ((key == (key_code)options_get_number(s->options, "prefix") ||
 | 
			
		||||
	    key == (key_code)options_get_number(s->options, "prefix2")) &&
 | 
			
		||||
	    strcmp(table->name, "prefix") != 0) {
 | 
			
		||||
		server_client_set_key_table(c, "prefix");
 | 
			
		||||
		server_status_client(c);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Try to see if there is a key binding in the current table. */
 | 
			
		||||
	bd_find.key = key;
 | 
			
		||||
	bd = RB_FIND(key_bindings, &table->key_bindings, &bd_find);
 | 
			
		||||
@@ -854,22 +866,12 @@ retry:
 | 
			
		||||
 | 
			
		||||
	/* If no match and we're not in the root table, that's it. */
 | 
			
		||||
	if (name == NULL && !server_client_is_default_key_table(c)) {
 | 
			
		||||
		log_debug("no key in key table %s", table->name);
 | 
			
		||||
		server_client_set_key_table(c, NULL);
 | 
			
		||||
		server_status_client(c);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * No match, but in the root table. Prefix switches to the prefix table
 | 
			
		||||
	 * and everything else is passed through.
 | 
			
		||||
	 */
 | 
			
		||||
	if (key == (key_code)options_get_number(s->options, "prefix") ||
 | 
			
		||||
	    key == (key_code)options_get_number(s->options, "prefix2")) {
 | 
			
		||||
		server_client_set_key_table(c, "prefix");
 | 
			
		||||
		server_status_client(c);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
forward:
 | 
			
		||||
	if (c->flags & CLIENT_READONLY)
 | 
			
		||||
		return;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user