Merge branch 'obsd-master'

Sync from OpenBSD.
This commit is contained in:
Thomas Adam 2012-11-22 22:19:04 +00:00
commit 1bc910a963
4 changed files with 19 additions and 28 deletions

View File

@ -89,10 +89,10 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx)
continue; continue;
ctx->print(ctx,"%2d: %s (%d, %d): %s [%ux%u %s bs=%hho " ctx->print(ctx,"%2d: %s (%d, %d): %s [%ux%u %s bs=%hho "
"xterm=%u] [flags=0x%x/0x%x, references=%u]", i, "class=%u] [flags=0x%x/0x%x, references=%u]", i,
c->tty.path, c->ibuf.fd, c->tty.fd, c->session->name, c->tty.path, c->ibuf.fd, c->tty.fd, c->session->name,
c->tty.sx, c->tty.sy, c->tty.termname, c->tty.sx, c->tty.sy, c->tty.termname,
c->tty.tio.c_cc[VERASE], c->tty.xterm_version, c->tty.tio.c_cc[VERASE], c->tty.class,
c->flags, c->tty.flags, c->references); c->flags, c->tty.flags, c->references);
} }
ctx->print(ctx, "%s", ""); ctx->print(ctx, "%s", "");

4
tmux.h
View File

@ -1189,7 +1189,7 @@ struct tty {
struct client *client; struct client *client;
char *path; char *path;
u_int xterm_version; u_int class;
u_int sx; u_int sx;
u_int sy; u_int sy;
@ -1633,8 +1633,8 @@ void tty_pututf8(struct tty *, const struct grid_utf8 *);
void tty_init(struct tty *, struct client *, int, char *); void tty_init(struct tty *, struct client *, int, char *);
int tty_resize(struct tty *); int tty_resize(struct tty *);
int tty_set_size(struct tty *, u_int, u_int); int tty_set_size(struct tty *, u_int, u_int);
void tty_set_class(struct tty *, u_int);
void tty_start_tty(struct tty *); void tty_start_tty(struct tty *);
void tty_set_version(struct tty *, u_int);
void tty_stop_tty(struct tty *); void tty_stop_tty(struct tty *);
void tty_set_title(struct tty *, const char *); void tty_set_title(struct tty *, const char *);
void tty_update_mode(struct tty *, int, struct screen *); void tty_update_mode(struct tty *, int, struct screen *);

View File

@ -724,18 +724,17 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size)
int int
tty_keys_device(struct tty *tty, const char *buf, size_t len, size_t *size) tty_keys_device(struct tty *tty, const char *buf, size_t len, size_t *size)
{ {
u_int i, a, b; u_int i, class;
char tmp[64], *endptr; char tmp[64], *endptr;
/* /*
* Primary device attributes are \033[?a;b and secondary are * Primary device attributes are \033[?a;b and secondary are
* \033[>a;b;c. We only request attributes on xterm, so we only care * \033[>a;b;c.
* about the middle values which is the xterm version.
*/ */
*size = 0; *size = 0;
/* First three bytes are always \033[>. */ /* First three bytes are always \033[?. */
if (buf[0] != '\033') if (buf[0] != '\033')
return (-1); return (-1);
if (len == 1) if (len == 1)
@ -760,22 +759,17 @@ tty_keys_device(struct tty *tty, const char *buf, size_t len, size_t *size)
tmp[i] = '\0'; tmp[i] = '\0';
*size = 4 + i; *size = 4 + i;
/* Only secondary is of interest. */ /* Only primary is of interest. */
if (buf[2] != '>') if (buf[2] != '?')
return (0); return (0);
/* Convert version numbers. */ /* Convert service class. */
a = strtoul(tmp, &endptr, 10); class = strtoul(tmp, &endptr, 10);
if (*endptr == ';') { if (*endptr != ';')
b = strtoul(endptr + 1, &endptr, 10); class = 0;
if (*endptr != '\0' && *endptr != ';')
b = 0;
} else
a = b = 0;
log_debug("received xterm version %u", b); log_debug("received service class %u", class);
if (b < 500) tty_set_class(tty, class);
tty_set_version(tty, b);
return (0); return (0);
} }

11
tty.c
View File

@ -224,7 +224,7 @@ tty_start_tty(struct tty *tty)
tty_puts(tty, "\033[?1000l"); tty_puts(tty, "\033[?1000l");
if (tty_term_has(tty->term, TTYC_XT)) if (tty_term_has(tty->term, TTYC_XT))
tty_puts(tty, "\033[>c"); tty_puts(tty, "\033[c");
tty->cx = UINT_MAX; tty->cx = UINT_MAX;
tty->cy = UINT_MAX; tty->cy = UINT_MAX;
@ -240,11 +240,11 @@ tty_start_tty(struct tty *tty)
} }
void void
tty_set_version(struct tty *tty, u_int version) tty_set_class(struct tty *tty, u_int class)
{ {
if (tty->xterm_version != 0) if (tty->class != 0)
return; return;
tty->xterm_version = version; tty->class = class;
} }
void void
@ -289,9 +289,6 @@ tty_stop_tty(struct tty *tty)
tty_raw(tty, "\033[?1000l"); tty_raw(tty, "\033[?1000l");
tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP)); tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP));
if (tty->xterm_version > 270)
tty_raw(tty, "\033[61;1\"p");
} }
void void