diff --git a/demo.c b/demo.c index feac80c..6e55931 100644 --- a/demo.c +++ b/demo.c @@ -10,14 +10,10 @@ int main(int argc, char *argv[]) { termkey_key key; while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) { - if(key.type == TERMKEY_TYPE_UNICODE && !key.modifiers) - printf("%s\n", key.utf8); - else { - 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); - } + 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); if(key.type == TERMKEY_TYPE_UNICODE && key.modifiers & TERMKEY_KEYMOD_CTRL && diff --git a/termkey.c b/termkey.c index 273318c..4175ad0 100644 --- a/termkey.c +++ b/termkey.c @@ -863,6 +863,15 @@ size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key int longmod = format & TERMKEY_FORMAT_LONGMOD; + int wrapbracket = (format & TERMKEY_FORMAT_WRAPBRACKET) && + (key->type != TERMKEY_TYPE_UNICODE || key->modifiers != 0); + + if(wrapbracket) { + l = snprintf(buffer + pos, len - pos, "<"); + if(l <= 0) return pos; + pos += l; + } + if(format & TERMKEY_FORMAT_CARETCTRL) { if(key->type == TERMKEY_TYPE_UNICODE && key->modifiers == TERMKEY_KEYMOD_CTRL && @@ -913,5 +922,11 @@ do_codepoint: if(l <= 0) return pos; pos += l; + if(wrapbracket) { + l = snprintf(buffer + pos, len - pos, ">"); + if(l <= 0) return pos; + pos += l; + } + return pos; } diff --git a/termkey.h b/termkey.h index 51003bd..d2cfd12 100644 --- a/termkey.h +++ b/termkey.h @@ -136,6 +136,7 @@ typedef enum { TERMKEY_FORMAT_LONGMOD = 1, TERMKEY_FORMAT_CARETCTRL = 2, TERMKEY_FORMAT_ALTISMETA = 4, + TERMKEY_FORMAT_WRAPBRACKET = 8, } termkey_format; size_t termkey_snprint_key(termkey_t *tk, char *buffer, size_t len, termkey_key *key, termkey_format format);