[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12354: 24.2; garbage inserted at the beginning of the buffer even wh
From: |
Stefan Monnier |
Subject: |
bug#12354: 24.2; garbage inserted at the beginning of the buffer even when xterm-extra-capabilities is t |
Date: |
Mon, 29 Jun 2015 09:12:01 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
> In fact, reportBackground also yields the garbage problem.
> So, there's a bug here:
> (when (memq 'reportBackground xterm-extra-capabilities)
> (xterm--query "\e]11;?\e\\"
> '(("\e]11;" . xterm--report-background-handler))))
> If I understand correctly, there's a timeout here, but since the
> feature is claimed to be supported, the timeout should be removed.
The timeout is present because we prefer having garbage in those
(presumably rare) cases where the terminal answers too late, over having
Emacs hang forever (tho it's not a hard-hang) when the terminal doesn't
understand the request.
You try the patch below, and set xterm-query-timeout to some value of
your choosing (e.g. nil).
Stefan
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 45da1bd..54c46de 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -688,6 +688,10 @@ string bytes that can be copied is 3/4 of this value."
;;(xterm--init-activate-get-selection)
(xterm--init-activate-set-selection))))))
+(defvar xterm-query-timeout 2
+ "Seconds to wait for an answer from the terminal.
+Can be nil to mean \"no timeout\".")
+
(defun xterm--query (query handlers &optional no-async)
"Send QUERY string to the terminal and watch for a response.
HANDLERS is an alist with elements of the form (STRING . FUNCTION).
@@ -696,7 +700,8 @@ We run the first FUNCTION whose STRING matches the input
events."
;; rather annoying (bug#6758). Maybe we could always use the asynchronous
;; approach, but it's less tested.
;; FIXME: Merge the two branches.
- (if (and (input-pending-p) (not no-async))
+ (if (and (or (null xterm-query-timeout) (input-pending-p))
+ (not no-async))
(progn
(dolist (handler handlers)
(define-key input-decode-map (car handler)
@@ -714,7 +719,7 @@ We run the first FUNCTION whose STRING matches the input
events."
(let ((handler (pop handlers))
(i 0))
(while (and (< i (length (car handler)))
- (let ((evt (read-event nil nil 2)))
+ (let ((evt (read-event nil nil xterm-query-timeout)))
(or (eq evt (aref (car handler) i))
(progn (if evt (push evt unread-command-events))
nil))))
> However it is not passed by default via SSH,
Ah, indeed, that's my case: I almost only use "-nw" in an SSH session.
Stefan