X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/666b903b912ca0aa2b1a034859b752b04f03141a..4cddca3070934602b0156a5cc260c633f210599c:/lisp/face-remap.el diff --git a/lisp/face-remap.el b/lisp/face-remap.el index 46dad0fca3..903c12a787 100644 --- a/lisp/face-remap.el +++ b/lisp/face-remap.el @@ -1,4 +1,4 @@ -;;; face-remap.el --- Functions for managing `face-remapping-alist' +;;; face-remap.el --- Functions for managing `face-remapping-alist' -*- lexical-binding: t -*- ;; ;; Copyright (C) 2008-2012 Free Software Foundation, Inc. ;; @@ -109,14 +109,19 @@ The list structure of ENTRY may be destructively modified." Return a cookie which can be used to delete this remapping with `face-remap-remove-relative'. -The remaining arguments, SPECS, should be either a list of face -names, or a property list of face attribute/value pairs. The -remapping specified by SPECS takes effect alongside the -remappings from other calls to `face-remap-add-relative', as well -as the normal definition of FACE (at lowest priority). This -function tries to sort multiple remappings for the same face, so -that remappings specifying relative face attributes are applied -after remappings specifying absolute face attributes. +The remaining arguments, SPECS, should form a list of faces. +Each list element should be either a face name or a property list +of face attribute/value pairs. If more than one face is listed, +that specifies an aggregate face, in the same way as in a `face' +text property, except for possible priority changes noted below. + +The face remapping specified by SPECS takes effect alongside the +remappings from other calls to `face-remap-add-relative' for the +same FACE, as well as the normal definition of FACE (at lowest +priority). This function tries to sort multiple remappings for +the same face, so that remappings specifying relative face +attributes are applied after remappings specifying absolute face +attributes. The base (lowest priority) remapping may be set to something other than the normal definition of FACE via `face-remap-set-base'." @@ -127,7 +132,10 @@ other than the normal definition of FACE via `face-remap-set-base'." (when (null entry) (setq entry (list face face)) ; explicitly merge with global def (push entry face-remapping-alist)) - (setcdr entry (face-remap-order (cons specs (cdr entry)))) + (let ((faces (cdr entry))) + (if (symbolp faces) + (setq faces (list faces))) + (setcdr entry (face-remap-order (cons specs faces)))) (cons face specs))) (defun face-remap-remove-relative (cookie) @@ -165,9 +173,11 @@ to apply on top of the normal definition of FACE." (defun face-remap-set-base (face &rest specs) "Set the base remapping of FACE in the current buffer to SPECS. This causes the remappings specified by `face-remap-add-relative' -to apply on top of the face specification given by SPECS. SPECS -should be either a list of face names, or a property list of face -attribute/value pairs. +to apply on top of the face specification given by SPECS. + +The remaining arguments, SPECS, should form a list of faces. +Each list element should be either a face name or a property list +of face attribute/value pairs, like in a `face' text property. If SPECS is empty, call `face-remap-reset-base' to use the normal definition of FACE as the base remapping; note that this is @@ -278,7 +288,9 @@ See `text-scale-increase' for more details." ;;;###autoload (define-key ctl-x-map [(control ?0)] 'text-scale-adjust) ;;;###autoload (defun text-scale-adjust (inc) - "Increase or decrease the height of the default face in the current buffer. + "Adjust the height of the default face by INC. + +INC may be passed as a numeric prefix argument. The actual adjustment made depends on the final component of the key-binding used to invoke the command, with all modifiers removed: @@ -287,9 +299,11 @@ key-binding used to invoke the command, with all modifiers removed: - Decrease the default face height by one step 0 Reset the default face height to the global default -Then, continue to read input events and further adjust the face -height as long as the input event read (with all modifiers removed) -is one of the above. +When adjusting with `+' or `-', continue to read input events and +further adjust the face height as long as the input event read +\(with all modifiers removed) is `+' or `-'. + +When adjusting with `0', immediately finish. Each step scales the height of the default face by the variable `text-scale-mode-step' (a negative number of steps decreases the @@ -302,30 +316,25 @@ even when it is bound in a non-top-level keymap. For binding in a top-level keymap, `text-scale-increase' or `text-scale-decrease' may be more appropriate." (interactive "p") - (let ((first t) - (ev last-command-event) + (let ((ev last-command-event) (echo-keystrokes nil)) (let* ((base (event-basic-type ev)) (step (pcase base - ((or `?+ `?=) inc) - (`?- (- inc)) - (`?0 0) + ((or ?+ ?=) inc) + (?- (- inc)) + (?0 0) (t inc)))) (text-scale-increase step) - ;; FIXME: do it after everu "iteration of the loop". - (message "+,-,0 for further adjustment: ") + ;; (unless (zerop step) + (message "Use +,-,0 for further adjustment") (set-temporary-overlay-map (let ((map (make-sparse-keymap))) (dolist (mods '(() (control))) - (define-key map (vector (append mods '(?-))) 'text-scale-decrease) - (define-key map (vector (append mods '(?+))) 'text-scale-increase) - ;; = is unshifted + on most keyboards. - (define-key map (vector (append mods '(?=))) 'text-scale-increase) - (define-key map (vector (append mods '(?0))) - (lambda () (interactive) (text-scale-increase 0)))) - map) - t)))) + (dolist (key '(?- ?+ ?= ?0)) ;; = is often unshifted +. + (define-key map (vector (append mods (list key))) + (lambda () (interactive) (text-scale-adjust (abs inc)))))) + map))))) ;; ) ;; ---------------------------------------------------------------- @@ -361,12 +370,14 @@ variable `buffer-face-mode-face' is used to display the buffer text." ;;;###autoload (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." +Each argument in SPECS should be a face, i.e. either a face name +or a property list of face attributes and values. If more than +one face is listed, that specifies an aggregate face, like in a +`face' text property. If SPECS is nil or omitted, disable +`buffer-face-mode'. + +This function makes the variable `buffer-face-mode-face' buffer +local, and sets it to FACE." (interactive (list (read-face-name "Set buffer face"))) (while (and (consp specs) (null (cdr specs))) (setq specs (car specs))) @@ -378,8 +389,10 @@ buffer local, and set it to FACE." ;;;###autoload (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 +Each argument in SPECS should be a face, i.e. either a face name +or a property list of face attributes and values. If more than +one face is listed, that specifies an aggregate face, like in a +`face' text property. If `buffer-face-mode' is already enabled, and is currently using the face specs SPECS, then it is disabled; if buffer-face-mode is @@ -402,10 +415,12 @@ buffer local, and set it to SPECS." 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 +SPECS can be any value suitable for a `face' text property, +including a face name, a plist of face attributes and values, or +a list of faces. -If INTERACTIVE is non-nil, a message will be displayed describing the result. +If INTERACTIVE is non-nil, display a message describing the +result. This is a wrapper function which calls `buffer-face-set' or `buffer-face-toggle' (depending on ARG), and prints a status