Allow formatting the mouse position when rendering an event to a string
This commit is contained in:
parent
571e5b701f
commit
ba0c32e8d8
5
demo.c
5
demo.c
|
@ -8,6 +8,7 @@ int main(int argc, char *argv[])
|
||||||
TERMKEY_CHECK_VERSION;
|
TERMKEY_CHECK_VERSION;
|
||||||
|
|
||||||
int mouse = 0;
|
int mouse = 0;
|
||||||
|
TermKeyFormat format = TERMKEY_FORMAT_VIM;
|
||||||
|
|
||||||
char buffer[50];
|
char buffer[50];
|
||||||
TermKey *tk;
|
TermKey *tk;
|
||||||
|
@ -20,6 +21,8 @@ int main(int argc, char *argv[])
|
||||||
mouse = atoi(optarg);
|
mouse = atoi(optarg);
|
||||||
else
|
else
|
||||||
mouse = 1000;
|
mouse = 1000;
|
||||||
|
format |= TERMKEY_FORMAT_MOUSE_POS;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Usage: %s [-m]\n", argv[0]);
|
fprintf(stderr, "Usage: %s [-m]\n", argv[0]);
|
||||||
|
@ -41,7 +44,7 @@ int main(int argc, char *argv[])
|
||||||
printf("\e[?%dhMouse mode active\n", mouse);
|
printf("\e[?%dhMouse mode active\n", mouse);
|
||||||
|
|
||||||
while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) {
|
while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) {
|
||||||
termkey_snprint_key(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_VIM);
|
termkey_snprint_key(tk, buffer, sizeof buffer, &key, format);
|
||||||
printf("%s\n", buffer);
|
printf("%s\n", buffer);
|
||||||
|
|
||||||
if(key.type == TERMKEY_TYPE_UNICODE &&
|
if(key.type == TERMKEY_TYPE_UNICODE &&
|
||||||
|
|
10
termkey.c
10
termkey.c
|
@ -1002,12 +1002,20 @@ size_t termkey_snprint_key(TermKey *tk, char *buffer, size_t len, TermKeyKey *ke
|
||||||
{
|
{
|
||||||
TermKeyMouseEvent ev;
|
TermKeyMouseEvent ev;
|
||||||
int button;
|
int button;
|
||||||
termkey_interpret_mouse(tk, key, &ev, &button, NULL, NULL);
|
int line, col;
|
||||||
|
termkey_interpret_mouse(tk, key, &ev, &button, &line, &col);
|
||||||
|
|
||||||
static char *evnames[] = { "Unknown", "Press", "Drag", "Release" };
|
static char *evnames[] = { "Unknown", "Press", "Drag", "Release" };
|
||||||
|
|
||||||
l = snprintf(buffer + pos, len - pos, "Mouse%s(%d)",
|
l = snprintf(buffer + pos, len - pos, "Mouse%s(%d)",
|
||||||
evnames[ev], button);
|
evnames[ev], button);
|
||||||
|
|
||||||
|
if(format & TERMKEY_FORMAT_MOUSE_POS) {
|
||||||
|
if(l <= 0) return pos;
|
||||||
|
pos += l;
|
||||||
|
|
||||||
|
l = snprintf(buffer + pos, len - pos, " @ (%d,%d)", col, line);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,8 @@ typedef enum {
|
||||||
TERMKEY_FORMAT_CARETCTRL = 1 << 1, // ^X instead of C-X
|
TERMKEY_FORMAT_CARETCTRL = 1 << 1, // ^X instead of C-X
|
||||||
TERMKEY_FORMAT_ALTISMETA = 1 << 2, // Meta- or M- instead of Alt- or A-
|
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_WRAPBRACKET = 1 << 3, // Wrap special keys in brackets like <Escape>
|
||||||
|
|
||||||
|
TERMKEY_FORMAT_MOUSE_POS = 1 << 8, // Include mouse position if relevant; @ col,line
|
||||||
} TermKeyFormat;
|
} TermKeyFormat;
|
||||||
|
|
||||||
// Some useful combinations
|
// Some useful combinations
|
||||||
|
|
|
@ -26,6 +26,9 @@ Use the name "Meta" or the letter "M" instead of "Alt" or "A".
|
||||||
.TP
|
.TP
|
||||||
.B TERMKEY_FORMAT_WRAPBRACKET
|
.B TERMKEY_FORMAT_WRAPBRACKET
|
||||||
If the key event is a special key instead of unmodified Unicode, wrap it in "<brackets>".
|
If the key event is a special key instead of unmodified Unicode, wrap it in "<brackets>".
|
||||||
|
.TP
|
||||||
|
.B TERMKEY_FORMAT_MOUSE_POS
|
||||||
|
If the event is a mouse event, include the position rendered as "@ (col,line)".
|
||||||
.PP
|
.PP
|
||||||
The following shortcuts are provided for common combinations of format bits:
|
The following shortcuts are provided for common combinations of format bits:
|
||||||
.TP
|
.TP
|
||||||
|
|
Loading…
Reference in New Issue