query.
-/* $OpenBSD: cmd-refresh-client.c,v 1.45 2021/08/27 17:15:57 nicm Exp $ */
+/* $OpenBSD: cmd-refresh-client.c,v 1.46 2022/02/15 13:03:02 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
}
if (args_has(args, 'l')) {
- tty_putcode_ptr2(&tc->tty, TTYC_MS, "", "?");
+ tty_send_osc52_query(&tc->tty);
return (CMD_RETURN_NORMAL);
}
-/* $OpenBSD: tmux.h,v 1.1158 2022/02/01 14:46:42 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1159 2022/02/15 13:03:02 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
struct tty {
struct client *client;
struct event start_timer;
+ struct event query_timer;
u_int sx;
u_int sy;
#define TTY_NOBLOCK 0x8
#define TTY_STARTED 0x10
#define TTY_OPENED 0x20
-/* 0x40 unused */
+#define TTY_OSC52QUERY 0x40
#define TTY_BLOCK 0x80
#define TTY_HAVEDA 0x100
#define TTY_HAVEXDA 0x200
void tty_region_off(struct tty *);
void tty_margin_off(struct tty *);
void tty_cursor(struct tty *, u_int, u_int);
+void tty_send_osc52_query(struct tty *);
void tty_putcode(struct tty *, enum tty_code_code);
void tty_putcode1(struct tty *, enum tty_code_code, int);
void tty_putcode2(struct tty *, enum tty_code_code, int, int);
-/* $OpenBSD: tty-keys.c,v 1.151 2021/10/21 08:36:51 nicm Exp $ */
+/* $OpenBSD: tty-keys.c,v 1.152 2022/02/15 13:03:02 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
buf++;
end--;
+ /* If we did not request this, ignore it. */
+ if (~tty->flags & TTY_OSC52QUERY)
+ return (0);
+ tty->flags &= ~TTY_OSC52QUERY;
+
/* It has to be a string so copy it. */
copy = xmalloc(end + 1);
memcpy(copy, buf, end);
-/* $OpenBSD: tty.c,v 1.415 2021/12/31 11:35:49 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.416 2022/02/15 13:03:02 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
#define TTY_BLOCK_START(tty) (1 + ((tty)->sx * (tty)->sy) * 8)
#define TTY_BLOCK_STOP(tty) (1 + ((tty)->sx * (tty)->sy) / 8)
+#define TTY_QUERY_TIMEOUT 5
+
void
tty_create_log(void)
{
{
struct client *c = tty->client;
struct termios tio;
- struct timeval tv = { .tv_sec = 3 };
+ struct timeval tv = { .tv_sec = TTY_QUERY_TIMEOUT };
setblocking(c->fd, 0);
event_add(&tty->event_in, NULL);
gc.bg = bg;
tty_attributes(tty, &gc, defaults, palette);
}
+
+static void
+tty_query_timer_callback(__unused int fd, __unused short events, void *data)
+{
+ struct tty *tty = data;
+
+ tty->flags &= ~TTY_OSC52QUERY;
+}
+
+void
+tty_send_osc52_query(struct tty *tty)
+{
+ struct timeval tv = { .tv_sec = TTY_QUERY_TIMEOUT };
+
+ if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY))
+ return;
+ tty_putcode_ptr2(tty, TTYC_MS, "", "?");
+ tty->flags |= TTY_OSC52QUERY;
+
+ evtimer_set(&tty->query_timer, tty_query_timer_callback, tty);
+ evtimer_add(&tty->query_timer, &tv);
+}
+