mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Sync OpenBSD patchset 757:
Simplify xterm modifier detection by treating as a bitmask + 1. Spotted by and diff from Emanuele Giaquinta.
This commit is contained in:
		
							
								
								
									
										57
									
								
								xterm-keys.c
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								xterm-keys.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: xterm-keys.c,v 1.5 2009-12-04 22:14:47 tcunha Exp $ */
 | 
			
		||||
/* $Id: xterm-keys.c,v 1.6 2010-09-07 13:21:18 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -114,27 +114,21 @@ int
 | 
			
		||||
xterm_keys_modifiers(const char *template, const char *buf, size_t len)
 | 
			
		||||
{
 | 
			
		||||
	size_t	idx;
 | 
			
		||||
	int     param, modifiers;
 | 
			
		||||
 | 
			
		||||
	idx = strcspn(template, "_");
 | 
			
		||||
	if (idx >= len)
 | 
			
		||||
		return (0);
 | 
			
		||||
	switch (buf[idx]) {
 | 
			
		||||
	case '2':
 | 
			
		||||
		return (KEYC_SHIFT);
 | 
			
		||||
	case '3':
 | 
			
		||||
		return (KEYC_ESCAPE);
 | 
			
		||||
	case '4':
 | 
			
		||||
		return (KEYC_SHIFT|KEYC_ESCAPE);
 | 
			
		||||
	case '5':
 | 
			
		||||
		return (KEYC_CTRL);
 | 
			
		||||
	case '6':
 | 
			
		||||
		return (KEYC_SHIFT|KEYC_CTRL);
 | 
			
		||||
	case '7':
 | 
			
		||||
		return (KEYC_ESCAPE|KEYC_CTRL);
 | 
			
		||||
	case '8':
 | 
			
		||||
		return (KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL);
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
	param = buf[idx] - '1';
 | 
			
		||||
 | 
			
		||||
	modifiers = 0;
 | 
			
		||||
	if (param & 1)
 | 
			
		||||
		modifiers |= KEYC_SHIFT;
 | 
			
		||||
	if (param & 2)
 | 
			
		||||
		modifiers |= KEYC_ESCAPE;
 | 
			
		||||
	if (param & 4)
 | 
			
		||||
		modifiers |= KEYC_CTRL;
 | 
			
		||||
	return (modifiers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -171,30 +165,19 @@ xterm_keys_lookup(int key)
 | 
			
		||||
	int			 modifiers;
 | 
			
		||||
	char			*out;
 | 
			
		||||
 | 
			
		||||
#define KEY_MODIFIERS(key, modifiers) \
 | 
			
		||||
	(((key) & (KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL)) == (modifiers))
 | 
			
		||||
	modifiers = 0;
 | 
			
		||||
	if (KEY_MODIFIERS(key, KEYC_SHIFT))
 | 
			
		||||
		modifiers = 2;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_ESCAPE))
 | 
			
		||||
		modifiers = 3;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_SHIFT|KEYC_ESCAPE))
 | 
			
		||||
		modifiers = 4;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_CTRL))
 | 
			
		||||
		modifiers = 5;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_SHIFT|KEYC_CTRL))
 | 
			
		||||
		modifiers = 6;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_ESCAPE|KEYC_CTRL))
 | 
			
		||||
		modifiers = 7;
 | 
			
		||||
	else if (KEY_MODIFIERS(key, KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL))
 | 
			
		||||
		modifiers = 8;
 | 
			
		||||
#undef KEY_MODIFIERS
 | 
			
		||||
	modifiers = 1;
 | 
			
		||||
	if (key & KEYC_SHIFT)
 | 
			
		||||
		modifiers += 1;
 | 
			
		||||
	if (key & KEYC_ESCAPE)
 | 
			
		||||
		modifiers += 2;
 | 
			
		||||
	if (key & KEYC_CTRL)
 | 
			
		||||
		modifiers += 4;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If the key has no modifiers, return NULL and let it fall through to
 | 
			
		||||
	 * the normal lookup.
 | 
			
		||||
	 */
 | 
			
		||||
	if (modifiers == 0)
 | 
			
		||||
	if (modifiers == 1)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
 | 
			
		||||
	/* Otherwise, find the key in the table. */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user