How can I change the background colour of a single emacs buffer?

8

2

I want to make SQL interactive buffers that are connected to production DBs very, very obvious, so my thought was to change the background of the buffer to a dark red colour.

set-background-color doesn't work, though; it sets the colour of all frames to the specified colour.

How can I change the background of just a single buffer?

Chris R

Posted 2010-06-17T17:07:20.733

Reputation: 1 751

Answers

9

I've created a emacs lisp package for this: https://github.com/vic/color-theme-buffer-local it uses Emacs' Face remapping to install theme faces locally.


(require 'color-theme-buffer-local)
(add-hook 'java-mode-hook (lambda nil (color-theme-buffer-local 'color-theme-robin-hood (current-buffer)) ))

vic

Posted 2010-06-17T17:07:20.733

Reputation: 106

6

You can't.

The background color is generally frame-specific.

You can set the background color of the default face to be frame specific using set-face-background, like so:

(set-face-background 'default "#CCCCCC" (window-frame (frame-selected-window))

Frame customizations are generally controlled through frame parameters. Now, if you look closely at the background-color for frame parameters, you'll see that the default background color is taken from the default face - which is why the above elisp has an effect.

Past that, it seems the closes you can come to a buffer background color is by using the minor-mode buffer-face-mode (added in 23.1) - however that only changes the background for the text of a buffer, and not the entire background.

Trey Jackson

Posted 2010-06-17T17:07:20.733

Reputation: 3 731

1

I didn't try it, but http://www.emacswiki.org/emacs/BufferBackgroundColor sounds like a possible solution.

Florian Diesch

Posted 2010-06-17T17:07:20.733

Reputation: 3 380

Nice idea, but it uses overlays, so it only changes the background of text. – Chris R – 2010-06-21T06:39:46.907