diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2011-01-03 23:35:21 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2011-01-03 23:35:21 +0000 |
commit | ac3b78a84178a308536a56ea114b0f6f8ce6fb47 (patch) | |
tree | 71c4a4c1030c29d670c965315b0c87dccf9c8972 /input-keys.c | |
parent | 5158dd9a8dddf34a00ec6359840488d34faabd88 (diff) | |
download | rtmux-ac3b78a84178a308536a56ea114b0f6f8ce6fb47.tar.gz rtmux-ac3b78a84178a308536a56ea114b0f6f8ce6fb47.tar.bz2 rtmux-ac3b78a84178a308536a56ea114b0f6f8ce6fb47.zip |
Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.
If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.
With help and based on code from hsim at gmx.li.
Diffstat (limited to 'input-keys.c')
-rw-r--r-- | input-keys.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/input-keys.c b/input-keys.c index ac759684..f73ce397 100644 --- a/input-keys.c +++ b/input-keys.c @@ -202,11 +202,23 @@ input_key(struct window_pane *wp, int key) void input_mouse(struct window_pane *wp, struct mouse_event *m) { - char out[8]; + char buf[10]; + size_t len; if (wp->screen->mode & ALL_MOUSE_MODES) { - xsnprintf(out, sizeof out, - "\033[M%c%c%c", m->b + 32, m->x + 33, m->y + 33); - bufferevent_write(wp->event, out, strlen(out)); + if (wp->screen->mode & MODE_MOUSE_UTF8) { + len = xsnprintf(buf, sizeof buf, "\033[M"); + len += utf8_split2(m->b + 32, &buf[len]); + len += utf8_split2(m->x + 33, &buf[len]); + len += utf8_split2(m->y + 33, &buf[len]); + } else { + if (m->b > 223 || m->x >= 222 || m->y > 222) + return; + len = xsnprintf(buf, sizeof buf, "\033[M"); + buf[len++] = m->b + 32; + buf[len++] = m->x + 33; + buf[len++] = m->y + 33; + } + bufferevent_write(wp->event, buf, len); } } |