summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/util/buffer-bg.el
blob: d6459d63ae6bb823d3c51d06f77a29968c2a5c10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
;;; buffer-bg.el --- Changing background color of windows
;;
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Created: 2008-05-22T19:06:23+0200 Thu
;; Version: 0.5
;; Last-Updated: 2008-05-22T23:19:55+0200 Thu
;; URL: http://www.emacswiki.org/cgi-bin/wiki/buffer-bg.el
;; Keywords:
;; Compatibility:
;;
;; Features that might be required by this library:
;;
;;   None
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;; There is currently no way to change background colors of Emacs
;; windows. This library implements a workaround using overlays.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING.  If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:

(defvar buffer-bg-overlay nil)
(put 'buffer-bg-overlay 'permanent-local t)

;;;###autoload
(defun buffer-bg-set-color (color buffer)
  "Add an overlay with background color COLOR to buffer BUFFER.
If COLOR is nil remove previously added overlay."
  (interactive
   (let* ((prompt (if buffer-bg-overlay
                      "Background color (empty string to remove): "
                    "Background color: "))
          (color (read-color prompt nil t)))
     (when (= 0 (length color))
       (setq color nil))
     (list color (current-buffer))
     ))
  (if (not color)
      (when buffer-bg-overlay
        (delete-overlay buffer-bg-overlay)
        (setq buffer-bg-overlay nil))
    (save-restriction
      (widen)
      (setq buffer-bg-overlay
            (make-overlay (point-min) (point-max) nil nil t))
      ;; Fix-me: Let the overlay have priority 0 which is the
      ;; lowest. Change this to below char properties if this is ever
      ;; allowed in Emacs.
      (overlay-put buffer-bg-overlay 'priority 0)
      (let* ((bg-face (list :background color))
             (bg-after (propertize (make-string 10 ?\n)
                                   'face bg-face
                                   'intangible t)))
        (overlay-put buffer-bg-overlay 'face bg-face)
        ;; This is just confusing, don't use it:
        ;;(overlay-put buffer-bg-overlay 'after-string bg-after)
        )
      )))


(provide 'buffer-bg)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; buffer-bg.el ends here