aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demo.c12
-rw-r--r--termkey.c15
-rw-r--r--termkey.h1
3 files changed, 20 insertions, 8 deletions
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);