aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/termkey_strfkey.33
-rw-r--r--man/termkey_strpkey.33
-rw-r--r--t/11strfkey.c12
-rw-r--r--t/12strpkey.c12
-rw-r--r--termkey.c10
-rw-r--r--termkey.h.in1
6 files changed, 32 insertions, 9 deletions
diff --git a/man/termkey_strfkey.3 b/man/termkey_strfkey.3
index 60c5f3d..99780b6 100644
--- a/man/termkey_strfkey.3
+++ b/man/termkey_strfkey.3
@@ -30,6 +30,9 @@ If the key event is a special key instead of unmodified Unicode, wrap it in "\f(
.B TERMKEY_FORMAT_SPACEMOD
Use spaces instead of hyphens to separate the modifier name(s) from the base key name.
.TP
+.B TERMKEY_FORMAT_LOWERMOD
+Use lowercase for the modifier name
+.TP
.B TERMKEY_FORMAT_MOUSE_POS
If the event is a mouse event, include the position rendered as "\f(CW@ (col,line)\fP".
.PP
diff --git a/man/termkey_strpkey.3 b/man/termkey_strpkey.3
index 6c7d0b0..89efb1c 100644
--- a/man/termkey_strpkey.3
+++ b/man/termkey_strpkey.3
@@ -26,6 +26,9 @@ Use the name "\f(CWMeta\fP" or the letter "\f(CWM\fP" instead of "\f(CWAlt\fP" o
.TP
.B TERMKEY_FORMAT_SPACEMOD
Expect spaces instead of hyphens to separate the modifer name(s) from the base key name.
+.TP
+.B TERMKEY_FORMAT_LOWERMOD
+Expect lowercase for the modifier name
.PP
Before returning, this function canonicalises the \fIkey\fP structure according to the rules given for \fBtermkey_canonicalise\fP(3).
.PP
diff --git a/t/11strfkey.c b/t/11strfkey.c
index 20d822f..3125553 100644
--- a/t/11strfkey.c
+++ b/t/11strfkey.c
@@ -8,7 +8,7 @@ int main(int argc, char *argv[])
char buffer[16];
size_t len;
- plan_tests(32);
+ plan_tests(36);
tk = termkey_new_abstract("vt100", 0);
@@ -43,6 +43,16 @@ int main(int argc, char *argv[])
is_int(len, 6, "length for unicode/b/CTRL longmod|spacemod");
is_str(buffer, "Ctrl b", "buffer for unicode/b/CTRL longmod|spacemod");
+ len = termkey_strfkey(tk, buffer, sizeof buffer, &key,
+ TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_LOWERMOD);
+ is_int(len, 6, "length for unicode/b/CTRL longmod|lowermod");
+ is_str(buffer, "ctrl-b", "buffer for unicode/b/CTRL longmod|lowermod");
+
+ len = termkey_strfkey(tk, buffer, sizeof buffer, &key,
+ TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_SPACEMOD|TERMKEY_FORMAT_LOWERMOD);
+ is_int(len, 6, "length for unicode/b/CTRL longmod|spacemod|lowermode");
+ is_str(buffer, "ctrl b", "buffer for unicode/b/CTRL longmod|spacemod|lowermode");
+
len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_CARETCTRL);
is_int(len, 2, "length for unicode/b/CTRL caretctrl");
is_str(buffer, "^B", "buffer for unicode/b/CTRL caretctrl");
diff --git a/t/12strpkey.c b/t/12strpkey.c
index 9f20883..099fe9a 100644
--- a/t/12strpkey.c
+++ b/t/12strpkey.c
@@ -86,12 +86,12 @@ int main(int argc, char *argv[])
is_str(endp, "", "consumed entire input for unicode/c/ALT altismeta+longmod");
CLEAR_KEY;
- endp = termkey_strpkey(tk, "Meta c", &key, TERMKEY_FORMAT_ALTISMETA|TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_SPACEMOD);
- is_int(key.type, TERMKEY_TYPE_UNICODE, "key.type for unicode/c/ALT altismeta+long/lowermod");
- is_int(key.code.codepoint, 'c', "key.code.codepoint for unicode/c/ALT altismeta+long/lowermod");
- is_int(key.modifiers, TERMKEY_KEYMOD_ALT, "key.modifiers for unicode/c/ALT altismeta+long/lowermod");
- is_str(key.utf8, "c", "key.utf8 for unicode/c/ALT altismeta+long/lowermod");
- is_str(endp, "", "consumed entire input for unicode/c/ALT altismeta+longmod");
+ endp = termkey_strpkey(tk, "meta c", &key, TERMKEY_FORMAT_ALTISMETA|TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_SPACEMOD|TERMKEY_FORMAT_LOWERMOD);
+ is_int(key.type, TERMKEY_TYPE_UNICODE, "key.type for unicode/c/ALT altismeta+long/space+lowermod");
+ is_int(key.code.codepoint, 'c', "key.code.codepoint for unicode/c/ALT altismeta+long/space+lowermod");
+ is_int(key.modifiers, TERMKEY_KEYMOD_ALT, "key.modifiers for unicode/c/ALT altismeta+long/space+lowermod");
+ is_str(key.utf8, "c", "key.utf8 for unicode/c/ALT altismeta+long/space_lowermod");
+ is_str(endp, "", "consumed entire input for unicode/c/ALT altismeta+long/space+lowermod");
CLEAR_KEY;
endp = termkey_strpkey(tk, "Up", &key, 0);
diff --git a/termkey.c b/termkey.c
index a45dc56..c8388df 100644
--- a/termkey.c
+++ b/termkey.c
@@ -1178,6 +1178,10 @@ modnames[] = {
{ "Shift", "Alt", "Ctrl" }, // LONGMOD
{ "S", "M", "C" }, // ALTISMETA
{ "Shift", "Meta", "Ctrl" }, // ALTISMETA+LONGMOD
+ { "s", "a", "c" }, // LOWERMOD
+ { "shift", "alt", "ctrl" }, // LOWERMOD+LONGMOD
+ { "s", "m", "c" }, // LOWERMOD+ALTISMETA
+ { "shift", "meta", "ctrl" }, // LOWERMOD+ALTISMETA+LONGMOD
};
size_t termkey_strfkey(TermKey *tk, char *buffer, size_t len, TermKeyKey *key, TermKeyFormat format)
@@ -1186,7 +1190,8 @@ size_t termkey_strfkey(TermKey *tk, char *buffer, size_t len, TermKeyKey *key, T
size_t l = 0;
struct modnames *mods = &modnames[!!(format & TERMKEY_FORMAT_LONGMOD) +
- !!(format & TERMKEY_FORMAT_ALTISMETA) * 2];
+ !!(format & TERMKEY_FORMAT_ALTISMETA) * 2 +
+ !!(format & TERMKEY_FORMAT_LOWERMOD) * 4];
int wrapbracket = (format & TERMKEY_FORMAT_WRAPBRACKET) &&
(key->type != TERMKEY_TYPE_UNICODE || key->modifiers != 0);
@@ -1302,7 +1307,8 @@ size_t termkey_strfkey(TermKey *tk, char *buffer, size_t len, TermKeyKey *key, T
const char *termkey_strpkey(TermKey *tk, const char *str, TermKeyKey *key, TermKeyFormat format)
{
struct modnames *mods = &modnames[!!(format & TERMKEY_FORMAT_LONGMOD) +
- !!(format & TERMKEY_FORMAT_ALTISMETA) * 2];
+ !!(format & TERMKEY_FORMAT_ALTISMETA) * 2 +
+ !!(format & TERMKEY_FORMAT_LOWERMOD) * 4];
key->modifiers = 0;
diff --git a/termkey.h.in b/termkey.h.in
index b893cbc..04e0418 100644
--- a/termkey.h.in
+++ b/termkey.h.in
@@ -216,6 +216,7 @@ typedef enum {
TERMKEY_FORMAT_ALTISMETA = 1 << 2, /* Meta- or M- instead of Alt- or A- */
TERMKEY_FORMAT_WRAPBRACKET = 1 << 3, /* Wrap special keys in brackets like <Escape> */
TERMKEY_FORMAT_SPACEMOD = 1 << 4, /* M Foo instead of M-Foo */
+ TERMKEY_FORMAT_LOWERMOD = 1 << 5, /* meta or m instead of Meta or M */
TERMKEY_FORMAT_MOUSE_POS = 1 << 8 /* Include mouse position if relevant; @ col,line */
} TermKeyFormat;