mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Check for complete keys before escape prefix, allows keys to be defined
with a leading escape. GitHub issue 1048.
This commit is contained in:
		@@ -164,7 +164,7 @@ server_lock_client(struct client *c)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	cmd = options_get_string(c->session->options, "lock-command");
 | 
			
		||||
	if (strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
 | 
			
		||||
	if (*cmd == '\0' || strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	tty_stop_tty(&c->tty);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								tty-keys.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								tty-keys.c
									
									
									
									
									
								
							@@ -595,7 +595,17 @@ tty_keys_next(struct tty *tty)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
first_key:
 | 
			
		||||
	/* Handle keys starting with escape. */
 | 
			
		||||
	/* Try to lookup complete key. */
 | 
			
		||||
	n = tty_keys_next1(tty, buf, len, &key, &size, expired);
 | 
			
		||||
	if (n == 0)	/* found */
 | 
			
		||||
		goto complete_key;
 | 
			
		||||
	if (n == 1)
 | 
			
		||||
		goto partial_key;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If not a complete key, look for key with an escape prefix (meta
 | 
			
		||||
	 * modifier).
 | 
			
		||||
	 */
 | 
			
		||||
	if (*buf == '\033') {
 | 
			
		||||
		/* Look for a key without the escape. */
 | 
			
		||||
		n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired);
 | 
			
		||||
@@ -620,13 +630,6 @@ first_key:
 | 
			
		||||
			goto partial_key;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Try to lookup key. */
 | 
			
		||||
	n = tty_keys_next1(tty, buf, len, &key, &size, expired);
 | 
			
		||||
	if (n == 0)	/* found */
 | 
			
		||||
		goto complete_key;
 | 
			
		||||
	if (n == 1)
 | 
			
		||||
		goto partial_key;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * At this point, we know the key is not partial (with or without
 | 
			
		||||
	 * escape). So pass it through even if the timer has not expired.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user