# HG changeset patch # User Miles Bader # Date 1213952122 0 # Node ID 596ac435a025cd3b75215db0f7a54109200d2edf # Parent 67f05963ef0d019ac850676a57e4fba018a93a7c Tweak interface of buffer-face-mode functions Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1262 diff -r 67f05963ef0d -r 596ac435a025 lisp/ChangeLog --- a/lisp/ChangeLog Fri Jun 20 08:00:56 2008 +0000 +++ b/lisp/ChangeLog Fri Jun 20 08:55:22 2008 +0000 @@ -1,3 +1,12 @@ +2008-06-20 Miles Bader + + * face-remap.el (face-remap-add-relative, face-remap-set-base): + Strip unnecessary list levels from SPECS. + (buffer-face-set, buffer-face-toggle): + Change argument from FACE to &rest SPECS, and strip unnecessary + list levels from SPECS. + (buffer-face-mode-invoke): Change argument from FACE to SPECS. + 2008-06-20 Jason Rumney * international/fontset.el (setup-default-fontset): Specify script diff -r 67f05963ef0d -r 596ac435a025 lisp/face-remap.el --- a/lisp/face-remap.el Fri Jun 20 08:00:56 2008 +0000 +++ b/lisp/face-remap.el Fri Jun 20 08:55:22 2008 +0000 @@ -3,7 +3,7 @@ ;; Copyright (C) 2008 Free Software Foundation, Inc. ;; ;; Author: Miles Bader -;; Keywords: faces face display user commands +;; Keywords: faces face remapping display user commands ;; ;; This file is part of GNU Emacs. ;; @@ -121,6 +121,8 @@ The base (lowest priority) remapping may be set to a specific value, instead of the default of the global face definition, using `face-remap-set-base'." + (while (and (consp specs) (null (cdr specs))) + (setq specs (car specs))) (make-local-variable 'face-remapping-alist) (let ((entry (assq face face-remapping-alist))) (when (null entry) @@ -165,6 +167,8 @@ inherits from the global definition of FACE; note that this is different from SPECS containing a single value `nil', which does not inherit from the global definition of FACE." + (while (and (consp specs) (not (null (car specs))) (null (cdr specs))) + (setq specs (car specs))) (if (or (null specs) (and (eq (car specs) face) (null (cdr specs)))) ; default ;; Set entry back to default @@ -325,39 +329,58 @@ (force-window-update (current-buffer))) ;;;###autoload -(defun buffer-face-set (face) - "Enable `buffer-face-mode', using the face FACE. -If FACE is nil, then `buffer-face-mode' is disabled. This -function will make the variable `buffer-face-mode-face' buffer -local, and set it to FACE." +(defun buffer-face-set (&rest specs) + "Enable `buffer-face-mode', using face specs SPECS. +SPECS can be any value suitable for the `face' text property, +including a face name, a list of face names, or a face-attribute +If SPECS is nil, then `buffer-face-mode' is disabled. + +This function will make the variable `buffer-face-mode-face' +buffer local, and set it to FACE." (interactive (list (read-face-name "Set buffer face"))) - (if (null face) + (while (and (consp specs) (null (cdr specs))) + (setq specs (car specs))) + (if (null specs) (buffer-face-mode 0) - (set (make-local-variable 'buffer-face-mode-face) face) + (set (make-local-variable 'buffer-face-mode-face) specs) (buffer-face-mode t))) ;;;###autoload -(defun buffer-face-toggle (face) - "Toggle `buffer-face-mode', using the face FACE. +(defun buffer-face-toggle (&rest specs) + "Toggle `buffer-face-mode', using face specs SPECS. +SPECS can be any value suitable for the `face' text property, +including a face name, a list of face names, or a face-attribute If `buffer-face-mode' is already enabled, and is currently using -the face FACE, then it is disabled; if buffer-face-mode is +the face specs SPECS, then it is disabled; if buffer-face-mode is disabled, or is enabled and currently displaying some other face, -then is left enabled, but the face changed to FACE. This -function will make the variable `buffer-face-mode-face' buffer -local, and set it to FACE." +then is left enabled, but the face changed to reflect SPECS. + +This function will make the variable `buffer-face-mode-face' +buffer local, and set it to SPECS." (interactive (list buffer-face-mode-face)) - (if (or (null face) - (and buffer-face-mode (equal buffer-face-mode-face face))) + (while (and (consp specs) (null (cdr specs))) + (setq specs (car specs))) + (if (or (null specs) + (and buffer-face-mode (equal buffer-face-mode-face specs))) (buffer-face-mode 0) - (set (make-local-variable 'buffer-face-mode-face) face) + (set (make-local-variable 'buffer-face-mode-face) specs) (buffer-face-mode t))) -(defun buffer-face-mode-invoke (face arg &optional interactive) - "Enable or disable `buffer-face-mode' using the face FACE, and argument ARG. -ARG is interpreted in the usual manner for minor-mode commands. -Besides the choice of face, this is the same as the `buffer-face-mode' command. -If INTERACTIVE is non-nil, a message will be displayed describing the result." +(defun buffer-face-mode-invoke (specs arg &optional interactive) + "Enable or disable `buffer-face-mode' using face specs SPECS, and argument ARG. +ARG controls whether the mode is enabled or disabled, and is +interpreted in the usual manner for minor-mode commands. + +SPECS can be any value suitable for the `face' text property, +including a face name, a list of face names, or a face-attribute + +If INTERACTIVE is non-nil, a message will be displayed describing the result. + +This is a wrapper function which calls just `buffer-face-set' or +`buffer-face-toggle' (depending on ARG), and prints a status +message in the echo area. In many cases one of those functions +may be more appropriate." (let ((last-message (current-message))) (if (or (eq arg 'toggle) (not arg)) (buffer-face-toggle face)