Allow formatting the mouse position when rendering an event to a string

This commit is contained in:
Paul LeoNerd Evans 2009-11-27 15:07:05 +00:00
parent 571e5b701f
commit ba0c32e8d8
4 changed files with 18 additions and 2 deletions

5
demo.c
View File

@ -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 &&

View File

@ -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;
} }

View File

@ -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

View File

@ -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