summaryrefslogtreecommitdiffstats
path: root/tty-keys.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2013-03-24 09:28:59 +0000
committerNicholas Marriott <nicm@openbsd.org>2013-03-24 09:28:59 +0000
commita60687f9ba924abcb2934f1e7b603e3885dcd2ef (patch)
treeb606426bf3c1dbacce01ea9f961fc0b4b07fb928 /tty-keys.c
parentbb8457b166635bc8d069012bb33d94e44178bfdc (diff)
Handle focus events from the terminal, from Aaron Jensen.
Diffstat (limited to 'tty-keys.c')
-rw-r--r--tty-keys.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/tty-keys.c b/tty-keys.c
index cb34df93..fc79c89b 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -174,6 +174,10 @@ const struct tty_default_key_raw tty_default_raw_keys[] = {
{ "\033[8@", KEYC_END|KEYC_CTRL|KEYC_SHIFT },
{ "\033[6@", KEYC_NPAGE|KEYC_CTRL|KEYC_SHIFT },
{ "\033[5@", KEYC_PPAGE|KEYC_CTRL|KEYC_SHIFT },
+
+ /* Focus tracking. */
+ { "\033[I", KEYC_FOCUS_IN },
+ { "\033[O", KEYC_FOCUS_OUT },
};
/* Default terminfo(5) keys. */
@@ -559,6 +563,15 @@ complete_key:
evtimer_del(&tty->key_timer);
tty->flags &= ~TTY_TIMER;
+ /* Check for focus events. */
+ if (key == KEYC_FOCUS_OUT) {
+ tty->client->flags &= ~CLIENT_FOCUSED;
+ return (1);
+ } else if (key == KEYC_FOCUS_IN) {
+ tty->client->flags |= CLIENT_FOCUSED;
+ return (1);
+ }
+
/* Fire the key. */
if (key != KEYC_NONE)
server_client_handle_key(tty->client, key);