-/* $OpenBSD: tmux.h,v 1.736 2017/04/18 15:44:17 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.737 2017/04/18 18:21:37 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
TTY_VT220,
TTY_VT320,
TTY_VT420,
+ TTY_ITERM2,
TTY_UNKNOWN
} term_type;
struct tty_key *key_tree;
};
#define TTY_TYPES \
- { "VT100", "VT101", "VT102", "VT220", "VT320", "VT420", "UNKNOWN" }
+ { "VT100", "VT101", "VT102", "VT220", "VT320", "VT420", "iTerm2", \
+ "Unknown" }
/* TTY command context. */
struct tty_ctx {
-/* $OpenBSD: tty-keys.c,v 1.94 2017/04/18 13:34:04 nicm Exp $ */
+/* $OpenBSD: tty-keys.c,v 1.95 2017/04/18 18:21:37 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
static int tty_keys_mouse(struct tty *, const char *, size_t, size_t *);
static int tty_keys_device_attributes(struct tty *, const char *, size_t,
size_t *);
+static int tty_keys_iterm2_version(struct tty *, const char *, size_t,
+ size_t *);
/* Default raw keys. */
struct tty_default_key_raw {
goto partial_key;
}
+ /* Or a response from iTerm2? */
+ switch (tty_keys_iterm2_version(tty, buf, len, &size)) {
+ case 0: /* yes */
+ key = KEYC_UNKNOWN;
+ goto complete_key;
+ case -1: /* no, or not valid */
+ break;
+ case 1: /* partial */
+ goto partial_key;
+ }
+
/* Is this a mouse key press? */
switch (tty_keys_mouse(tty, buf, len, &size)) {
case 0: /* yes */
types[type]);
return (0);
}
+
+/*
+ * Handle a version response from iTerm2. Returns 0 for success, -1 for
+ * failure, 1 for partial.
+ */
+static int
+tty_keys_iterm2_version(struct tty *tty, const char *buf, size_t len,
+ size_t *size)
+{
+ struct client *c = tty->client;
+ u_int i;
+
+ *size = 0;
+
+ if (memcmp("\033[ITERM2 ", buf, (len > 9) ? 9 : len) != 0)
+ return (-1);
+ if (len < 10)
+ return (1);
+ for (i = 9; i < len; i++) {
+ if (buf[i] == 'n')
+ break;
+ }
+ if (i == len)
+ return (1);
+ *size = i + 1;
+
+ tty_set_type(tty, TTY_ITERM2);
+
+ log_debug("%s: this is iTerm2", c->name);
+ return (0);
+}
-/* $OpenBSD: tty.c,v 1.263 2017/04/18 15:44:17 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.264 2017/04/18 18:21:37 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
#define tty_use_acs(tty) \
(tty_term_has((tty)->term, TTYC_ACSC) && !((tty)->flags & TTY_UTF8))
#define tty_use_margin(tty) \
- ((tty)->term_type == TTY_VT420)
+ ((tty)->term_type == TTY_VT420 || (tty)->term_type == TTY_ITERM2)
-#define tty_pane_full_width(tty, ctx) \
+#define tty_pane_full_width(tty, ctx) \
((ctx)->xoff == 0 && screen_size_x((ctx)->wp->screen) >= (tty)->sx)
void
tty->flags |= TTY_FOCUS;
tty_puts(tty, "\033[?1004h");
}
- tty_puts(tty, "\033[c");
+ tty_puts(tty, "\033[c\033[1337n");
}
tty->flags |= TTY_STARTED;