aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcorvid <corvid@lavabit.com>2009-05-05 08:36:16 -0400
committercorvid <corvid@lavabit.com>2009-05-05 08:36:16 -0400
commit109a96be7f4d6b6ec2976eb2331635e3e0155ef6 (patch)
treea3d684c57f0e597a21714fd93b9a5533c6b92d22 /src
parentcc8b3b59bd48b7c9a7487092885206c14d2c0547 (diff)
Keybindings: allow shifted characters as keynames
Diffstat (limited to 'src')
-rw-r--r--src/keys.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/keys.cc b/src/keys.cc
index c57e3566..b6c3efd4 100644
--- a/src/keys.cc
+++ b/src/keys.cc
@@ -154,9 +154,18 @@ int Keys::getKeyCmd()
{
int ret = KEYS_NOP;
KeyBinding_t keyNode;
- keyNode.key = fltk::event_key();
- keyNode.modifier = fltk::event_state();
+ if (fltk::event_state() == fltk::SHIFT &&
+ ispunct(fltk::event_text()[0])) {
+ // Get key code for a shifted character
+ keyNode.key = fltk::event_text()[0];
+ keyNode.modifier = 0;
+ } else {
+ keyNode.key = fltk::event_key();
+ keyNode.modifier = fltk::event_state();
+ }
+
+ _MSG("getKeyCmd: key=%d, mod=%d\n", keyNode.key, keyNode.modifier);
void *data = dList_find_sorted(bindings, &keyNode, nodeByKeyCmp);
if (data)
ret = ((KeyBinding_t*)data)->cmd;
@@ -249,7 +258,8 @@ void Keys::parseKey(char *key, char *commandName)
// Skip space
for ( ; isspace(*key); ++key) ;
// Get modifiers
- while(*key == '<' && (p = strchr(++key, '>'))) {
+ while(*key == '<' && (p = strchr(key, '>'))) {
+ ++key;
modstr = dStrndup(key, p - key);
if ((st = getModifier(modstr)) == -1) {
MSG("Keys::parseKey unknown modifier: %s\n", modstr);
@@ -282,6 +292,7 @@ void Keys::parseKey(char *key, char *commandName)
node->modifier = keymod;
node->key = keycode;
dList_insert_sorted(bindings, node, nodeByKeyCmp);
+ _MSG("parseKey: Adding key=%d, mod=%d\n", node->key, node->modifier);
}
}
}