Use a macro-based mask for obtaining a key or modifier-set from the combination.

Display C-@, etc, as C-Space, in list-keys.
This commit is contained in:
Micah Cowan
2010-06-05 20:29:11 +00:00
parent 89eb95265a
commit 227e458ebb
3 changed files with 20 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $Id: key-string.c,v 1.33 2010-06-05 06:27:19 micahcowan Exp $ */
/* $Id: key-string.c,v 1.34 2010-06-05 20:29:11 micahcowan Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -184,6 +184,15 @@ key_string_lookup_key(int key)
*out = '\0';
/*
* Special case: display C-@ as C-Space. Could do this below in
* the (key >= 0 && key <= 32), but this way we let it be found
* in key_string_table, for the unlikely chance that we might
* change its name.
*/
if ((key & KEYC_MASK_KEY) == 0)
key = ' ' | KEYC_CTRL | (key & KEYC_MASK_MOD);
/* Fill in the modifiers. */
if (key & KEYC_CTRL)
strlcat(out, "C-", sizeof out);
@ -191,7 +200,7 @@ key_string_lookup_key(int key)
strlcat(out, "M-", sizeof out);
if (key & KEYC_SHIFT)
strlcat(out, "S-", sizeof out);
key &= ~(KEYC_CTRL|KEYC_ESCAPE|KEYC_SHIFT);
key &= KEYC_MASK_KEY;
/* Try the key against the string table. */
for (i = 0; i < nitems(key_string_table); i++) {