aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2008-06-17 11:27:51 +0000
committerMiles Bader2008-06-17 11:27:51 +0000
commitd7ed971d66e88e94652a733670984ee6c8dd53a7 (patch)
tree2ec18a96e55faab84e69b99e1e3653905bdba697
parentd03d411d4a487dd690831a6d36be662f2f896989 (diff)
downloademacs-d7ed971d66e88e94652a733670984ee6c8dd53a7.tar.gz
emacs-d7ed971d66e88e94652a733670984ee6c8dd53a7.zip
Add buffer-face-mode
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1251
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/face-remap.el91
2 files changed, 83 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e638c2630c2..b225c8f8964 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,12 @@
12008-06-17 Miles Bader <miles@gnu.org> 12008-06-17 Miles Bader <miles@gnu.org>
2 2
3 * face-remap.el (buffer-face-mode-face)
4 (buffer-face-mode-remapping): New variables.
5 (buffer-face-mode, buffer-face-set, buffer-face-toggle)
6 (buffer-face-mode-invoke): New functions.
7 (variable-pitch-mode-remapping): Variable removed.
8 (variable-pitch-mode): Rewrite as an interface to `buffer-face-mode'.
9
3 * face-remap.el (internal-lisp-face-attributes): New variable. 10 * face-remap.el (internal-lisp-face-attributes): New variable.
4 (face-attrs-more-relative-p, face-remap-order): New functions. 11 (face-attrs-more-relative-p, face-remap-order): New functions.
5 (face-remap-add-relative): Use `face-remap-order'. 12 (face-remap-add-relative): Use `face-remap-order'.
diff --git a/lisp/face-remap.el b/lisp/face-remap.el
index fce25af834b..2988e399161 100644
--- a/lisp/face-remap.el
+++ b/lisp/face-remap.el
@@ -297,27 +297,88 @@ a top-level keymap, `text-scale-increase' or
297 297
298 298
299;; ---------------------------------------------------------------- 299;; ----------------------------------------------------------------
300;; variable-pitch-mode 300;; buffer-face-mode
301 301
302;; suggested key binding: (global-set-key "\C-cv" 'variable-pitch-mode) 302(defcustom buffer-face-mode-face 'variable-pitch
303 "The face specification used by `buffer-face-mode'.
304It may contain any value suitable for a `face' text property,
305including a face name, a list of face names, a face-attribute
306plist, etc."
307 :group 'display)
303 308
304;; current remapping cookie for variable-pitch-mode 309;; current remapping cookie for buffer-face-mode
305(defvar variable-pitch-mode-remapping nil) 310(defvar buffer-face-mode-remapping nil)
306(make-variable-buffer-local 'variable-pitch-mode-remapping) 311(make-variable-buffer-local 'buffer-face-mode-remapping)
307 312
308;;;###autoload 313;;;###autoload
309(define-minor-mode variable-pitch-mode 314(define-minor-mode buffer-face-mode
310 "Variable-pitch default-face mode. 315 "Minor mode for a buffer-specific default face.
311When active, causes the buffer text to be displayed using 316When enabled, the face specified by the variable
312the `variable-pitch' face." 317`buffer-face-mode-face' is used to display the buffer text."
313 :lighter " VarPitch" 318 :lighter " BufFace"
314 (when variable-pitch-mode-remapping 319 (when buffer-face-mode-remapping
315 (face-remap-remove-relative variable-pitch-mode-remapping)) 320 (face-remap-remove-relative buffer-face-mode-remapping))
316 (setq variable-pitch-mode-remapping 321 (setq buffer-face-mode-remapping
317 (and variable-pitch-mode 322 (and buffer-face-mode
318 (face-remap-add-relative 'default 'variable-pitch))) 323 (face-remap-add-relative 'default buffer-face-mode-face)))
319 (force-window-update (current-buffer))) 324 (force-window-update (current-buffer)))
320 325
326;;;###autoload
327(defun buffer-face-set (face)
328 "Enable `buffer-face-mode', using the face FACE.
329If FACE is nil, then `buffer-face-mode' is disabled. This
330function will make the variable `buffer-face-mode-face' buffer
331local, and set it to FACE."
332 (interactive (list (read-face-name "Set buffer face")))
333 (if (null face)
334 (buffer-face-mode 0)
335 (set (make-local-variable 'buffer-face-mode-face) face)
336 (buffer-face-mode t)))
337
338;;;###autoload
339(defun buffer-face-toggle (face)
340 "Toggle `buffer-face-mode', using the face FACE.
341
342If `buffer-face-mode' is already enabled, and is currently using
343the face FACE, then it is disabled; if buffer-face-mode is
344disabled, or is enabled and currently displaying some other face,
345then is left enabled, but the face changed to FACE. This
346function will make the variable `buffer-face-mode-face' buffer
347local, and set it to FACE."
348 (interactive (list buffer-face-mode-face))
349 (if (or (null face)
350 (and buffer-face-mode (equal buffer-face-mode-face face)))
351 (buffer-face-mode 0)
352 (set (make-local-variable 'buffer-face-mode-face) face)
353 (buffer-face-mode t)))
354
355(defun buffer-face-mode-invoke (face arg &optional interactive)
356 "Enable or disable `buffer-face-mode' using the face FACE, and argument ARG.
357ARG is interpreted in the usual manner for minor-mode commands.
358Besides the choice of face, this is the same as the `buffer-face-mode' command.
359If INTERACTIVE is non-nil, a message will be displayed describing the result."
360 (let ((last-message (current-message)))
361 (if (or (eq arg 'toggle) (not arg))
362 (buffer-face-toggle face)
363 (buffer-face-set (and (> (prefix-numeric-value arg) 0) face)))
364 (when interactive
365 (unless (and (current-message)
366 (not (equal last-message (current-message))))
367 (message "Buffer-Face mode %sabled"
368 (if buffer-face-mode "en" "dis"))))))
369
370
371;; ----------------------------------------------------------------
372;; variable-pitch-mode
373
374;;;###autoload
375(defun variable-pitch-mode (&optional arg)
376 "Variable-pitch default-face mode.
377An interface to `buffer-face-mode' which uses the `variable-pitch' face.
378Besides the choice of face, it is the same as `buffer-face-mode'."
379 (interactive (list (or current-prefix-arg 'toggle)))
380 (buffer-face-mode-invoke 'variable-pitch arg (interactive-p)))
381
321 382
322(provide 'face-remap) 383(provide 'face-remap)
323 384