* term/xterm.el (terminal-init-xterm): Misc simplifications.

This commit is contained in:
Glenn Morris 2011-06-12 12:58:32 -07:00
parent 9db51acaf1
commit 7cb363eba0
2 changed files with 64 additions and 67 deletions

View file

@ -1,6 +1,7 @@
2011-06-12 Glenn Morris <rgm@gnu.org>
* term/xterm.el (terminal-init-xterm): `version' may be nil. (Bug#8838)
Misc simplifications.
2011-06-12 Martin Rudalics <rudalics@gmx.at>

View file

@ -484,7 +484,7 @@ features. Set to nil to skip the checks."
;; When it is turned on many more key bindings work: things like
;; C-. C-, etc.
;; To do that we need to find out if the current terminal supports
;; modifyOtherKeys. At this time only xterm does.
;; modifyOtherKeys. At this time only xterm does.
(when xterm-extra-capabilities
(let ((coding-system-for-read 'binary)
(chr nil)
@ -498,80 +498,76 @@ features. Set to nil to skip the checks."
;; we don't need to check for any capabilities because
;; they are given by setting `xterm-extra-capabilities' to
;; a list (which could be empty).
(tocheck-capabilities (when (eq 'check xterm-extra-capabilities)
'(modifyOtherKeys reportBackground)))
(tocheck-capabilities (if (eq 'check xterm-extra-capabilities)
'(modifyOtherKeys reportBackground)))
;; The given capabilities are either the contents of
;; `xterm-extra-capabilities', if it's a list, or an empty
;; list.
(given-capabilities (when (consp xterm-extra-capabilities)
xterm-extra-capabilities))
;; `xterm-extra-capabilities', if it's a list, or an empty list.
(given-capabilities (if (consp xterm-extra-capabilities)
xterm-extra-capabilities))
version)
;; 1. Set `version'
;; Do the following if `xterm-extra-capabilities' is anything but nil.
(when xterm-extra-capabilities
;; 1. Set `version'
;; Pending input can be mistakenly returned by the calls to
;; read-event below. Discard it.
(discard-input)
;; Try to find out the type of terminal by sending a "Secondary
;; Device Attributes (DA)" query.
(send-string-to-terminal "\e[>0c")
;; Pending input can be mistakenly returned by the calls to
;; read-event below. Discard it.
(discard-input)
;; Try to find out the type of terminal by sending a "Secondary
;; Device Attributes (DA)" query.
(send-string-to-terminal "\e[>0c")
;; The reply should be: \e [ > NUMBER1 ; NUMBER2 ; NUMBER3 c
;; If the timeout is completely removed for read-event, this
;; might hang for terminals that pretend to be xterm, but don't
;; respond to this escape sequence. RMS' opinion was to remove
;; it completely. That might be right, but let's first try to
;; see if by using a longer timeout we get rid of most issues.
(when (and (equal (read-event nil nil 2) ?\e)
(equal (read-event nil nil 2) ?\[))
(while (not (equal (setq chr (read-event nil nil 2)) ?c))
(setq str (concat str (string chr))))
(if (string-match ">0;\\([0-9]+\\);0" str)
(setq version
(string-to-number
(substring str (match-beginning 1) (match-end 1))))))
;; The reply should be: \e [ > NUMBER1 ; NUMBER2 ; NUMBER3 c
;; If the timeout is completely removed for read-event, this
;; might hang for terminals that pretend to be xterm, but don't
;; respond to this escape sequence. RMS' opinion was to remove
;; it completely. That might be right, but let's first try to
;; see if by using a longer timeout we get rid of most issues.
(when (equal (read-event nil nil 2) ?\e)
(when (equal (read-event nil nil 2) ?\[)
(while (not (equal (setq chr (read-event nil nil 2)) ?c))
(setq str (concat str (string chr))))
(when (string-match ">0;\\([0-9]+\\);0" str)
(setq version
(string-to-number
(substring str (match-beginning 1) (match-end 1)))))))
;; 2. If reportBackground is known to be supported, or the
;; version is 242 or higher, assume the xterm supports
;; reporting the background color (TODO: maybe earlier
;; versions do too...)
(when (or (memq 'reportBackground given-capabilities)
(and (memq 'reportBackground tocheck-capabilities)
version
(>= version 242)))
(send-string-to-terminal "\e]11;?\e\\")
(when (and (equal (read-event nil nil 2) ?\e)
(equal (read-event nil nil 2) ?\]))
(setq str "")
(while (not (equal (setq chr (read-event nil nil 2)) ?\\))
(setq str (concat str (string chr))))
(if (string-match background-regex str)
(setq recompute-faces
(xterm-maybe-set-dark-background-mode
(string-to-number (match-string 1 str) 16)
(string-to-number (match-string 2 str) 16)
(string-to-number (match-string 3 str) 16))))))
;; 2. If reportBackground is known to be supported, or the
;; version is 242 or higher, assume the xterm supports
;; reporting the background color (TODO: maybe earlier
;; versions do too...)
(when (or (memq 'reportBackground given-capabilities)
(and (memq 'reportBackground tocheck-capabilities)
version
(>= version 242)))
(send-string-to-terminal "\e]11;?\e\\")
(when (equal (read-event nil nil 2) ?\e)
(when (equal (read-event nil nil 2) ?\])
(setq str "")
(while (not (equal (setq chr (read-event nil nil 2)) ?\\))
(setq str (concat str (string chr))))
(when (string-match background-regex str)
(setq recompute-faces
(xterm-maybe-set-dark-background-mode
(string-to-number (match-string 1 str) 16)
(string-to-number (match-string 2 str) 16)
(string-to-number (match-string 3 str) 16)))))))
;; 3. If modifyOtherKeys is known to be supported or the
;; version is 216 (the version when modifyOtherKeys was
;; introduced) or higher, initialize the modifyOtherKeys
;; support.
(when (or (memq 'modifyOtherKeys given-capabilities)
(and (memq 'modifyOtherKeys tocheck-capabilities)
version
(>= version 216)))
;; 3. If modifyOtherKeys is known to be supported or the
;; version is 216 (the version when modifyOtherKeys was
;; introduced) or higher, initialize the modifyOtherKeys
;; support.
(if (or (memq 'modifyOtherKeys given-capabilities)
(and (memq 'modifyOtherKeys tocheck-capabilities)
version
(>= version 216)))
(terminal-init-xterm-modify-other-keys))
;; Recompute faces here in case the background mode was
;; set to dark. We used to call
;; `tty-set-up-initial-frame-faces' only once, but that
;; caused the light background faces to be computed
;; incorrectly. See:
;; http://permalink.gmane.org/gmane.emacs.devel/119627
(when recompute-faces
(tty-set-up-initial-frame-faces)))))
;; Recompute faces here in case the background mode was
;; set to dark. We used to call
;; `tty-set-up-initial-frame-faces' only once, but that
;; caused the light background faces to be computed
;; incorrectly. See:
;; http://permalink.gmane.org/gmane.emacs.devel/119627
(when recompute-faces
(tty-set-up-initial-frame-faces))))
(run-hooks 'terminal-init-xterm-hook))