diff options
author | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-10-06 22:22:09 +0100 |
---|---|---|
committer | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-10-06 22:22:09 +0100 |
commit | 5b24e42d90a57479c702b0e6b53271dd5188db70 (patch) | |
tree | 1256f67d246b48e50227a9409b2b56900771011a | |
parent | f54687c5837cacfa440a44c8549a1de0b3dd56ff (diff) | |
download | termo-5b24e42d90a57479c702b0e6b53271dd5188db70.tar.gz termo-5b24e42d90a57479c702b0e6b53271dd5188db70.tar.xz termo-5b24e42d90a57479c702b0e6b53271dd5188db70.zip |
Added two more formatting options; CARETCTRL and ALTISMETA
-rw-r--r-- | demo.c | 4 | ||||
-rw-r--r-- | termkey.c | 19 | ||||
-rw-r--r-- | termkey.h | 4 |
3 files changed, 24 insertions, 3 deletions
@@ -13,7 +13,9 @@ int main(int argc, char *argv[]) { if(key.type == TERMKEY_TYPE_UNICODE && !key.modifiers) printf("%s\n", key.utf8); else { - termkey_snprint_key(tk, buffer, sizeof buffer, &key, 1); + termkey_snprint_key(tk, buffer, sizeof buffer, &key, 0); + printf("<%s> or ", buffer); + termkey_snprint_key(tk, buffer, sizeof buffer, &key, ~0); printf("<%s>\n", buffer); } @@ -863,6 +863,18 @@ size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key int longmod = format & TERMKEY_FORMAT_LONGMOD; + if(format & TERMKEY_FORMAT_CARETCTRL) { + if(key->type == TERMKEY_TYPE_UNICODE && + key->modifiers == TERMKEY_KEYMOD_CTRL && + key->code.number >= '@' && + key->code.number <= '_') { + l = snprintf(buffer + pos, len - pos, "^"); + if(l <= 0) return pos; + pos += l; + goto do_codepoint; + } + } + if(key->modifiers & TERMKEY_KEYMOD_CTRL) { l = snprintf(buffer + pos, len - pos, longmod ? "Ctrl-" : "C-"); if(l <= 0) return pos; @@ -870,7 +882,10 @@ size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key } if(key->modifiers & TERMKEY_KEYMOD_ALT) { - l = snprintf(buffer + pos, len - pos, longmod ? "Alt-" : "A-"); + int altismeta = format & TERMKEY_FORMAT_ALTISMETA; + + l = snprintf(buffer + pos, len - pos, longmod ? ( altismeta ? "Meta-" : "Alt-" ) + : ( altismeta ? "M-" : "A-" )); if(l <= 0) return pos; pos += l; } @@ -881,6 +896,8 @@ size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key pos += l; } +do_codepoint: + switch(key->type) { case TERMKEY_TYPE_UNICODE: l = snprintf(buffer + pos, len - pos, "%s", key->utf8); @@ -133,7 +133,9 @@ termkey_keysym termkey_register_ss3kpalt_full(termkey_t *tk, termkey_type type, termkey_keysym termkey_register_csifunc_full(termkey_t *tk, termkey_type type, termkey_keysym sym, int modifier_set, int modifier_mask, int number, const char *name); typedef enum { - TERMKEY_FORMAT_LONGMOD = 1 + TERMKEY_FORMAT_LONGMOD = 1, + TERMKEY_FORMAT_CARETCTRL = 2, + TERMKEY_FORMAT_ALTISMETA = 4, } termkey_format; size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key *key, termkey_format format); |