From ec9e03d09a20ca00dd9d96f7938a2d03a504b535 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Mon, 24 Aug 2020 05:23:30 +0000
Subject: [PATCH] Old Terminal.app versions do not respond correctly to
 secondary DA, instead responding with the primary DA response. Ignore it.
 Reported by Dave Vandervies.

---
 tty-keys.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/tty-keys.c b/tty-keys.c
index 941a9005..59426772 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -1197,7 +1197,10 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len,
 	if (tty->flags & TTY_HAVEDA)
 		return (-1);
 
-	/* First three bytes are always \033[?. */
+	/*
+	 * First three bytes are always \033[>. Some older Terminal.app
+	 * versions respond as for DA (\033[?) so accept and ignore that.
+	 */
 	if (buf[0] != '\033')
 		return (-1);
 	if (len == 1)
@@ -1206,7 +1209,7 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len,
 		return (-1);
 	if (len == 2)
 		return (1);
-	if (buf[2] != '>')
+	if (buf[2] != '>' && buf[2] != '?')
 		return (-1);
 	if (len == 3)
 		return (1);
@@ -1224,6 +1227,10 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len,
 	tmp[i] = '\0';
 	*size = 4 + i;
 
+	/* Ignore DA response. */
+	if (buf[2] == '?')
+		return (0);
+
 	/* Convert all arguments to numbers. */
 	cp = tmp;
 	while ((next = strsep(&cp, ";")) != NULL) {