[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29473: 25.3; 'background-mode is 'light on console with black backgr
From: |
Tim Landscheidt |
Subject: |
bug#29473: 25.3; 'background-mode is 'light on console with black background |
Date: |
Sat, 09 Dec 2017 05:35:30 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Noam Postavsky <npostavs@users.sourceforge.net> wrote:
>> In newsticker tree view on a Linux console with black back-
>> ground (both KDE's konsole application and "native" console
>> (Alt-Ctrl-F2), all under Fedora),
>> (frame-parameter nil 'background-mode) returns 'light. This
>> also happens with Emacs' current master branch.
>> After glancing at the manual, I'm unclear whether:
>> 1. Emacs should set 'background-mode correctly by itself
>> (and thus there is an error in the detection mechanism),
>> 2. it is my duty to explicitly set background-mode (via
>> initial-frame-alist?) when using Emacs on a console, or
> I'm pretty sure it's #1, the manual explains that background-mode nil
> should use automatic detection, and it sounds like that detection is
> going wrong.
> I don't see anything in lisp/term/linux.el that sets the background mode
> at all. What does running 'echo $TERM' in a shell give you?
> Looking at lisp/term/konsole.el, it looks like it uses the xterm
> functions for everything. Could you try stepping through/adding
> 'message' calls in terminal-init-xterm and see if/where it goes wrong?
(For the moment, I retract my claim that this also happens
on a "native" (Alt-Ctrl-F2) console because I can no longer
reproduce it and cannot remember my test setup, so the fol-
lowing is limited to konsole in Fedora 25.)
In konsole, $TERM is set to "xterm-256color":
| [tim@passepartout ~/src/emacs]$ echo $TERM
| xterm-256color
| [tim@passepartout ~/src/emacs]$
With interspersed message calls, I could find out that kon-
sole's response to the "Secondary Device Attributes (DA)"
query in terminal-init-xterm ("\e[>0c") is "^[[>0;115;0c":
| [tim@passepartout ~/src/emacs]$ perl -we 'print "\e[>0c";'; sleep 1; echo
| ^[[>0;115;0c
| [tim@passepartout ~/src/emacs]$
This version number (115) falls short of the test
"(>= version 242)" which would cause the background colour
to be queried, and rightly so, because konsole does not re-
spond to the query "\e]11;?\e\\":
| [tim@passepartout ~/src/emacs]$ perl -we 'print "\e]11;?\e\\";'; sleep 1; echo
| [tim@passepartout ~/src/emacs]$
(Sidenote: gnome-terminal reports back "^[[>1;4603;0c" and
"^[]11;rgb:2323/2727/2929^[\" but the latter is never que-
ried due to NUMBER1 being 1 and NUMBER2 being greater than
2000, so background-mode stills end up as 'light with gnome-
terminal.)
So then I tried to track down where background-mode's 'light
is actually coming from, and it seems to originate in
frame-set-background-mode's:
| (default-bg-mode
| (if (or (window-system frame)
| (and tty-type
| (string-match
"^\\(xterm\\|\\rxvt\\|dtterm\\|eterm\\)"
| tty-type)))
| 'light
| 'dark))
with tty-type being "xterm-256color". This logic was first
introduced in:
| commit 5ebc02b3656890d1d110c671129c64547bdbcdd6
| Author: Eli Zaretskii <eliz@gnu.org>
| Date: Sat Oct 28 18:48:08 2000 +0000
| (normal-top-level): If the value of $TERM indicates that
| we are running from xterm or one of its work-alikes, default to a
| light background mode.
Curious, I installed xterm and indeed it has black fore-
ground on white background which I had not only forgotten
about, but also for example Wikipedia uses a black back-
ground xterm to illustrate its article
(https://en.wikipedia.org/wiki/Xterm). D'oh.
My assumption now is that Emacs's detection mechanism cannot
be "fixed" for konsole in Fedora 25 and I should manually
set frame-background-mode to 'dark.
But: In Fedora 26, konsole 17.04.1 (in contrast to Fedora
25's konsole 16.12.3) still returns "^[[>0;115;0c" as
version number, /but/ "\^[]11;rgb:0000/0000/0000^G" for the
background colour.
So one possible improvement could be to query the background
colour either unconditionally or also on "(= version 115)".
This would increase the start-up time by (at most) two se-
conds (xterm-query-timeout) for terminals that do not sup-
port this query AFAIUI.
(So that I don't forget: I used:
| [tim@passepartout ~/src/emacs]$ make && ./src/emacs -Q -L $PWD -nw --eval
'(switch-to-buffer "*Messages*")'
for testing.)