From: Dan Nicolaescu <dann@ics.uci.edu>
To: bug-gnu-emacs <bug-gnu-emacs@gnu.org>
Subject: bug#4234: allow xterm to detect the background color
Date: Sat, 22 Aug 2009 10:15:12 -0700 (PDT) [thread overview]
Message-ID: <200908221715.n7MHFCVA002498@godzilla.ics.uci.edu> (raw)
emacs/emacsclient -nw running in an xterm set the frame background mode
to 'light.
Not all users use the default white background, so they get the wrong
face colors.
Newer xterms can tell what the background color is
(see http://permalink.gmane.org/gmane.emacs.devel/111270)
This patch implements reads the background color from xterm (iff it
supports the feature) and sets the background mode accordingly.
--- xterm.el.~1.62.~ 2009-01-08 14:24:21.000000000 -0800
+++ xterm.el 2009-08-22 10:12:38.000000000 -0700
@@ -462,8 +462,6 @@
(set-keymap-parent input-decode-map map)))
(xterm-register-default-colors)
- ;; This recomputes all the default faces given the colors we've just set up.
- (tty-set-up-initial-frame-faces)
;; Try to turn on the modifyOtherKeys feature on modern xterms.
;; When it is turned on many more key bindings work: things like
@@ -472,7 +470,8 @@
;; modifyOtherKeys. At this time only xterm does.
(let ((coding-system-for-read 'binary)
(chr nil)
- (str nil))
+ (str nil)
+ version)
;; Pending input can be mistakenly returned by the calls to
;; read-event below. Discard it.
(discard-input)
@@ -494,8 +493,23 @@
;; NUMBER2 is the xterm version number, look for something
;; greater than 216, the version when modifyOtherKeys was
;; introduced.
- (when (>= (string-to-number
- (substring str (match-beginning 1) (match-end 1))) 216)
+ (setq version (string-to-number
+ (substring str (match-beginning 1) (match-end 1))))
+ ;; xterm version 242 supports reporting the background
+ ;; color, maybe earlier versions do too...
+ (when (>= 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 "11;rgb:\\([a-f0-9]+\\)/\\([a-f0-9]+\\)/\\([a-f0-9]+\\)" str)
+ (xterm-set-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))))))
+ (when (>= version 216)
;; Make sure that the modifyOtherKeys state is restored when
;; suspending, resuming and exiting.
(add-hook 'suspend-hook 'xterm-turn-off-modify-other-keys)
@@ -508,6 +522,9 @@
xterm-modify-other-keys-terminal-list)
(xterm-turn-on-modify-other-keys))))))
+ ;; This recomputes all the default faces given the colors we've just set up.
+ (tty-set-up-initial-frame-faces)
+
(run-hooks 'terminal-init-xterm-hook))
;; Set up colors, for those versions of xterm that support it.
@@ -649,5 +666,11 @@ versions of xterm."
(delq terminal xterm-modify-other-keys-terminal-list))
(send-string-to-terminal "\e[>4m" terminal)))
+(defun xterm-set-background-mode (redc greenc bluec)
+ ;; Use the heuristic in `frame-set-background-mode' to decide if a
+ ;; frame is dark.
+ (when (< (+ redc greenc bluec) (* .6 (+ 65535 65535 65535)))
+ (set-terminal-parameter nil 'background-mode 'dark)))
+
;; arch-tag: 12e7ebdd-1e6c-4b25-b0f9-35ace25e855a
;;; xterm.el ends here
next reply other threads:[~2009-08-22 17:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200912201600.nBKG073w021776@godzilla.ics.uci.edu>
2009-08-22 17:15 ` Dan Nicolaescu [this message]
2009-08-22 18:43 ` bug#4234: allow xterm to detect the background color Andreas Schwab
2009-12-20 16:01 ` bug#4234: marked as done (allow xterm to detect the background color) Emacs bug Tracking System
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200908221715.n7MHFCVA002498@godzilla.ics.uci.edu \
--to=dann@ics.uci.edu \
--cc=4234@emacsbugs.donarmstrong.com \
--cc=bug-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).