Subject: bug#10905: 24.0.94; "emacsclient -t" doesn't honor terminal fore- and background colors

From: Oleksandr Manzyuk <[email-masked]>
Date: Tue, 28 Feb 2012 11:44:48 +0000

First of all, this bug is a duplicate of bug#10748, but I am submitting
this bug report anyway because bug#10748 doesn't seem to receive any
attention from the developers (probably because it doesn't conform to
the Emacs bug reporting rules).

Here is how to reproduce the bug:

1. emacs -Q
2. M-x server-start
3. Open a terminal with nonstandard foreground and/or background colors.
   For the sake of example, I assume that you've run "xterm -bg yellow".
4. Run "emacsclient -t" in the terminal.

The observed behavior: the background becomes grey, whereas the expected
behavior is that Emacs honors the terminal background color.

I normally set the background to white in .Xresources.  I've used yellow
color only to make my point.

This behavior is a regression in Emacs 24.  I've chased it down to this
commit:

commit 27528399fd429b2f510e13f361affb1e2211ceb3
Author: Chong Yidong <[email-masked]>
Date:   Tue Jan 31 16:38:58 2012 +0800

    Fix menu-set-font interaction with Custom themes.
    
    In particular, prevent it from setting non-font-related attributes
    like the foreground and background color.  This requires a bugfix to
    face-spec-reset-face to make "resetting" the default face work.
    
    * lisp/faces.el (face-spec-reset-face): Don't apply unspecified
    attribute values to the default face.
    
    * lisp/frame.el (set-frame-font): New arg ALL-FRAMES.
    
    * lisp/menu-bar.el (menu-set-font): Use set-frame-font.

`face-spec-reset-face' has been changed to reset only non-default faces.
While I understand the rationale of this change, it seems to break
handling of fore- and background colors in terminal.  If I evaluate the
old definition of `face-spec-reset-face' in the *scratch* buffer,
connecting to Emacs with "emacsclient -t" works the way I am used to.

In GNU Emacs 24.0.94.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1)
 of 2012-02-28 on pandora
Windowing system distributor `The X.Org Foundation', version 11.0.10707000
Configured using:
 `configure '--prefix=/home/manzyuk''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_IE.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Lisp Interaction

Minor modes in effect:
  paredit-mode: t
  eldoc-mode: t
  diff-auto-refine-mode: t
  ido-everywhere: t
  shell-dirtrack-mode: t
  savehist-mode: t
  icomplete-mode: t
  global-auto-revert-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-x o q ESC [ > 1 ; 2 4 0 3 ; 0 c C-x C-c M-x C-g ESC 
[ > 0 ; 2 6 1 ; 0 c C-x b C-s RET C-x C-c M-x r e p 
o r t SPC e m a c s SPC b u g <return>

Recent messages:
Done (Total of 2 files compiled, 1 skipped)
Loading /home/manzyuk/.emacs.d/elpa/haskell-mode-2.8.0/haskell-site-file.el (source)...done
Loading /home/manzyuk/quicklisp/slime-helper.el (source)...done
Loading /home/manzyuk/emacs-preamble/init.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.
When done with this frame, type C-x 5 0
(No files need saving)
Quit
When done with this frame, type C-x 5 0
(No files need saving)

Load-path shadows:
None found.

Features:
(shadow sort flyspell ispell mail-extr emacsbug message rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader
preamble-scheme preamble-ruby inf-ruby preamble-org org-install
preamble-magit preamble-diff preamble-lisp info-look slime-autoloads
preamble-haskell ghci-completion preamble-google-translate
google-translate preamble-emacs-lisp preamble-paredit paredit
preamble-auctex reftex reftex-vars preamble-package paredit-autoloads
magit-autoloads magit-bisect magit-key-mode magit esh-var esh-io esh-cmd
esh-ext esh-proc esh-arg eldoc esh-groups eshell esh-module esh-mode
esh-util ediff-merg ediff-diff ediff-wind ediff-help ediff-util
ediff-mult ediff-init ediff iswitchb view diff-mode log-edit pcvs-util
add-log inf-ruby-autoloads ruby-mode haskell-mode-autoloads imenu
haskell-font-lock haskell-mode pp google-translate-autoloads json
ghci-completion-autoloads parse-time auctex-autoloads timezone texinfo
toolbar-x prv-emacs info reporter desktop context latex derived
tex-style tex-buf tex easy-mmode tex-site easymenu warnings cl compile
autoload tar-mode finder-inf executable whitespace vc-git network-stream
starttls url-cache url-http tls mail-parse rfc2231 url-gw url-auth url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-util url-parse url-vars mailcap package tabulated-list preamble-text
preamble-shell preamble-prog preamble-makefile preamble-mail smtpmail
sendmail rfc2047 rfc2045 ietf-drums mail-utils preamble-ido ido
preamble-ibuffer preamble-dired preamble-comint preamble-ansi-color
preamble-windows preamble-tramp tramp tramp-compat auth-source eieio
byte-opt bytecomp byte-compile cconv macroexp assoc gnus-util mm-util
mail-prsvr password-cache shell pcomplete comint ansi-color ring
format-spec tramp-loaddefs regexp-opt preamble-server server
preamble-mouse preamble-mode-line preamble-minibuffer savehist icomplete
preamble-keyboard preamble-initialization preamble-frames preamble-files
uniquify advice help-fns advice-preload autorevert preamble-env
preamble-editing paren delsel edmacro kmacro preamble-data saveplace
preamble-browse-url preamble-utils time-date tooltip ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image fringe
lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev
minibuffer loaddefs button faces cus-face files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote make-network-process dbusbind
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty emacs)