annotate lisp/face-remap.el @ 101999:efada72951fb

* minibuffer.el (internal-complete-buffer-except): Doc fix. (Bug#2315)
author Juanma Barranquero <lekktu@gmail.com>
date Fri, 13 Feb 2009 10:35:40 +0000
parents a9dc0e7c3f2b
children 90878fc8d55d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
1 ;;; face-remap.el --- Functions for managing `face-remapping-alist'
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
2 ;;
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100439
diff changeset
3 ;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
4 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
5 ;; Author: Miles Bader <miles@gnu.org>
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
6 ;; Keywords: faces face remapping display user commands
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
7 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
9 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
13 ;; (at your option) any later version.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
14 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
19 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
22 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
23
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
25
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
26 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
27 ;; This file defines some simple operations that can be used for
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
28 ;; maintaining the `face-remapping-alist' in a cooperative way. This is
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
29 ;; especially important for the `default' face.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
30 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
31 ;; Each face-remapping definition in `face-remapping-alist' added by
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
32 ;; this code uses the form:
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
33 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
34 ;; (face RELATIVE_SPECS_1 RELATIVE_SPECS_2 ... BASE_SPECS)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
35 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
36 ;; The "specs" values are a lists of face names or face attribute-value
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
37 ;; pairs, and are merged together, with earlier values taking precedence.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
38 ;;
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
39 ;; The RELATIVE_SPECS_* values are added by `face-remap-add-relative'
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
40 ;; (and removed by `face-remap-remove-relative', and are intended for
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
41 ;; face "modifications" (such as increasing the size). Typical users of
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
42 ;; relative specs would be minor modes.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
43 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
44 ;; BASE_SPECS is the lowest-priority value, and by default is just the
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
45 ;; face name, which causes the global definition of that face to be used.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
46 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
47 ;; A non-default value of BASE_SPECS may also be set using
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
48 ;; `face-remap-set-base'. Because this _overwrites_ the default
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
49 ;; value inheriting from the global face definition, it is up to the
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
50 ;; caller of face-remap-set-base to add such inheritance if it is
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
51 ;; desired. A typical use of face-remap-set-base would be a major
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
52 ;; mode setting face remappings, e.g., of the default face.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
53 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
54 ;; All modifications cause face-remapping-alist to be made buffer-local.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
55 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
56
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
57
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
58 ;;; Code:
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
59
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
60
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
61 ;; ----------------------------------------------------------------
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
62 ;; Utility functions
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
63
96041
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
64 ;; Names of face attributes corresponding to lisp face-vector positions.
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
65 ;; This variable should probably be defined in C code where the actual
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
66 ;; definitions are available.
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
67 ;;
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
68 (defvar internal-lisp-face-attributes
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
69 [nil
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
70 :family :foundry :swidth :height :weight :slant :underline :inverse
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
71 :foreground :background :stipple :overline :strike :box
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
72 :font :inherit :fontset :vector])
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
73
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
74 (defun face-attrs-more-relative-p (attrs1 attrs2)
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
75 "Return true if ATTRS1 contains a greater number of relative
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
76 face-attributes than ATTRS2. A face attribute is considered
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
77 relative if `face-attribute-relative-p' returns non-nil.
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
78
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
79 ATTRS1 and ATTRS2 may be any value suitable for a `face' text
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
80 property, including face names, lists of face names,
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
81 face-attribute plists, etc.
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
82
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
83 This function can be used as a predicate with `sort', to sort
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
84 face lists so that more specific faces are located near the end."
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
85 (unless (vectorp attrs1)
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
86 (setq attrs1 (face-attributes-as-vector attrs1)))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
87 (unless (vectorp attrs2)
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
88 (setq attrs2 (face-attributes-as-vector attrs2)))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
89 (let ((rel1-count 0) (rel2-count 0))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
90 (dotimes (i (length attrs1))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
91 (let ((attr (aref internal-lisp-face-attributes i)))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
92 (when attr
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
93 (when (face-attribute-relative-p attr (aref attrs1 i))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
94 (setq rel1-count (+ rel1-count 1)))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
95 (when (face-attribute-relative-p attr (aref attrs2 i))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
96 (setq rel2-count (+ rel2-count 1))))))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
97 (< rel1-count rel2-count)))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
98
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
99 (defun face-remap-order (entry)
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
100 "Order ENTRY so that more relative face specs are near the beginning.
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
101 The list structure of ENTRY may be destructively modified."
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
102 (setq entry (nreverse entry))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
103 (setcdr entry (sort (cdr entry) 'face-attrs-more-relative-p))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
104 (nreverse entry))
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
105
96140
fea1ab635d2d Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 96091
diff changeset
106 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
107 (defun face-remap-add-relative (face &rest specs)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
108 "Add a face remapping entry of FACE to SPECS in the current buffer.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
109
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
110 Return a cookie which can be used to delete the remapping with
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
111 `face-remap-remove-relative'.
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
112
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
113 SPECS can be any value suitable for the `face' text property,
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
114 including a face name, a list of face names, or a face-attribute
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
115 property list. The attributes given by SPECS will be merged with
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
116 any other currently active face remappings of FACE, and with the
96041
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
117 global definition of FACE. An attempt is made to sort multiple
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
118 entries so that entries with relative face-attributes are applied
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
119 after entries with absolute face-attributes.
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
120
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
121 The base (lowest priority) remapping may be set to a specific
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
122 value, instead of the default of the global face definition,
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
123 using `face-remap-set-base'."
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
124 (while (and (consp specs) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
125 (setq specs (car specs)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
126 (make-local-variable 'face-remapping-alist)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
127 (let ((entry (assq face face-remapping-alist)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
128 (when (null entry)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
129 (setq entry (list face face)) ; explicitly merge with global def
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
130 (push entry face-remapping-alist))
96041
c89004e8d9a9 Order multiple entries more cleverly in face-remap-add-relative
Miles Bader <miles@gnu.org>
parents: 95563
diff changeset
131 (setcdr entry (face-remap-order (cons specs (cdr entry))))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
132 (cons face specs)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
133
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
134 (defun face-remap-remove-relative (cookie)
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
135 "Remove a face remapping previously added by `face-remap-add-relative'.
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
136 COOKIE should be the return value from that function."
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
137 (let ((remapping (assq (car cookie) face-remapping-alist)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
138 (when remapping
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
139 (let ((updated-entries (remq (cdr cookie) (cdr remapping))))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
140 (unless (eq updated-entries (cdr remapping))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
141 (setcdr remapping updated-entries)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
142 (when (or (null updated-entries)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
143 (and (eq (car-safe updated-entries) (car cookie))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
144 (null (cdr updated-entries))))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
145 (setq face-remapping-alist
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
146 (remq remapping face-remapping-alist)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
147 (cdr cookie))))))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
148
96140
fea1ab635d2d Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 96091
diff changeset
149 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
150 (defun face-remap-reset-base (face)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
151 "Set the base remapping of FACE to inherit from FACE's global definition."
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
152 (let ((entry (assq face face-remapping-alist)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
153 (when entry
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
154 ;; If there's nothing except a base remapping, we simply remove
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
155 ;; the entire remapping entry, as setting the base to the default
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
156 ;; would be the same as the global definition. Otherwise, we
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
157 ;; modify the base remapping.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
158 (if (null (cddr entry)) ; nothing except base remapping
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
159 (setq face-remapping-alist ; so remove entire entry
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
160 (remq entry face-remapping-alist))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
161 (setcar (last entry) face))))) ; otherwise, just inherit global def
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
162
96140
fea1ab635d2d Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 96091
diff changeset
163 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
164 (defun face-remap-set-base (face &rest specs)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
165 "Set the base remapping of FACE in the current buffer to SPECS.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
166 If SPECS is empty, the default base remapping is restored, which
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
167 inherits from the global definition of FACE; note that this is
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
168 different from SPECS containing a single value `nil', which does
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
169 not inherit from the global definition of FACE."
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
170 (while (and (consp specs) (not (null (car specs))) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
171 (setq specs (car specs)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
172 (if (or (null specs)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
173 (and (eq (car specs) face) (null (cdr specs)))) ; default
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
174 ;; Set entry back to default
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
175 (face-remap-reset-base face)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
176 ;; Set the base remapping
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
177 (make-local-variable 'face-remapping-alist)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
178 (let ((entry (assq face face-remapping-alist)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
179 (if entry
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
180 (setcar (last entry) specs) ; overwrite existing base entry
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
181 (push (list face specs) face-remapping-alist)))))
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
182
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
183
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
184 ;; ----------------------------------------------------------------
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
185 ;; text-scale-mode
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
186
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
187 (defcustom text-scale-mode-step 1.2
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
188 "Scale factor used by `text-scale-mode'.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
189 Each positive or negative step scales the default face height by this amount."
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
190 :group 'display
100439
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 99163
diff changeset
191 :type 'number
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 99163
diff changeset
192 :version "23.1")
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
193
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
194 ;; current remapping cookie for text-scale-mode
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
195 (defvar text-scale-mode-remapping nil)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
196 (make-variable-buffer-local 'text-scale-mode-remapping)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
197
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
198 ;; Lighter displayed for text-scale-mode in mode-line minor-mode list
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
199 (defvar text-scale-mode-lighter "+0")
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
200 (make-variable-buffer-local 'text-scale-mode-lighter)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
201
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
202 ;; Number of steps that text-scale-mode will increase/decrease text height
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
203 (defvar text-scale-mode-amount 0)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
204 (make-variable-buffer-local 'text-scale-mode-amount)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
205
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
206 (define-minor-mode text-scale-mode
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
207 "Minor mode for displaying buffer text in a larger/smaller font than usual.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
208
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
209 The amount of scaling is determined by the variable
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
210 `text-scale-mode-amount': one step scales the global default
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
211 face size by the value of the variable `text-scale-mode-step'
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
212 \(a negative amount shrinks the text).
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
213
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
214 The `text-scale-increase' and `text-scale-decrease' functions may
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
215 be used to interactively modify the variable
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
216 `text-scale-mode-amount' (they also enable or disable
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
217 `text-scale-mode' as necessary)."
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
218 :lighter (" " text-scale-mode-lighter)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
219 (when text-scale-mode-remapping
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
220 (face-remap-remove-relative text-scale-mode-remapping))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
221 (setq text-scale-mode-lighter
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
222 (format (if (>= text-scale-mode-amount 0) "+%d" "%d")
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
223 text-scale-mode-amount))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
224 (setq text-scale-mode-remapping
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
225 (and text-scale-mode
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
226 (face-remap-add-relative 'default
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
227 :height
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
228 (expt text-scale-mode-step
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
229 text-scale-mode-amount))))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
230 (force-window-update (current-buffer)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
231
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
232 ;;;###autoload
99163
60acf25bcfb5 * face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents: 96152
diff changeset
233 (defun text-scale-increase (inc)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
234 "Increase the height of the default face in the current buffer by INC steps.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
235 If the new height is other than the default, `text-scale-mode' is enabled.
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
236
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
237 Each step scales the height of the default face by the variable
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
238 `text-scale-mode-step' (a negative number of steps decreases the
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
239 height by the same amount). As a special case, an argument of 0
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
240 will remove any scaling currently active."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
241 (interactive "p")
96080
2b046bd8b819 Fix behavior of text-scale-increase when text-scale-mode is disabled
Miles Bader <miles@gnu.org>
parents: 96042
diff changeset
242 (setq text-scale-mode-amount
2b046bd8b819 Fix behavior of text-scale-increase when text-scale-mode is disabled
Miles Bader <miles@gnu.org>
parents: 96042
diff changeset
243 (if (= inc 0) 0 (+ (if text-scale-mode text-scale-mode-amount 0) inc)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
244 (text-scale-mode (if (zerop text-scale-mode-amount) -1 1)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
245
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
246 ;;;###autoload
99163
60acf25bcfb5 * face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents: 96152
diff changeset
247 (defun text-scale-decrease (dec)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
248 "Decrease the height of the default face in the current buffer by DEC steps.
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
249 See `text-scale-increase' for more details."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
250 (interactive "p")
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
251 (text-scale-increase (- dec)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
252
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
253 ;;;###autoload (define-key ctl-x-map [(control ?+)] 'text-scale-adjust)
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
254 ;;;###autoload (define-key ctl-x-map [(control ?-)] 'text-scale-adjust)
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
255 ;;;###autoload (define-key ctl-x-map [(control ?=)] 'text-scale-adjust)
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
256 ;;;###autoload (define-key ctl-x-map [(control ?0)] 'text-scale-adjust)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
257 ;;;###autoload
99163
60acf25bcfb5 * face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents: 96152
diff changeset
258 (defun text-scale-adjust (inc)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
259 "Increase or decrease the height of the default face in the current buffer.
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
260
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
261 The actual adjustment made depends on the final component of the
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
262 key-binding used to invoke the command, with all modifiers removed:
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
263
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
264 +, = Increase the default face height by one step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
265 - Decrease the default face height by one step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
266 0 Reset the default face height to the global default
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
267
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
268 Then, continue to read input events and further adjust the face
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
269 height as long as the input event read (with all modifiers removed)
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
270 is one of the above.
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
271
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
272 Each step scales the height of the default face by the variable
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
273 `text-scale-mode-step' (a negative number of steps decreases the
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
274 height by the same amount). As a special case, an argument of 0
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
275 will remove any scaling currently active.
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
276
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
277 This command is a special-purpose wrapper around the
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
278 `text-scale-increase' command which makes repetition convenient
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
279 even when it is bound in a non-top-level keymap. For binding in
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
280 a top-level keymap, `text-scale-increase' or
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
281 `text-scale-decrease' may be more appropriate."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
282 (interactive "p")
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
283 (let ((first t)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
284 (step t)
96152
a35eb0adf0b2 (text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents: 96140
diff changeset
285 (ev last-command-event)
a35eb0adf0b2 (text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents: 96140
diff changeset
286 (echo-keystrokes nil))
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
287 (while step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
288 (let ((base (event-basic-type ev)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
289 (cond ((or (eq base ?+) (eq base ?=))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
290 (setq step inc))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
291 ((eq base ?-)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
292 (setq step (- inc)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
293 ((eq base ?0)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
294 (setq step 0))
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
295 (first
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
296 (setq step inc))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
297 (t
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
298 (setq step nil))))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
299 (when step
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
300 (text-scale-increase step)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
301 (setq inc 1 first nil)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
302 (setq ev (read-event))))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
303 (push ev unread-command-events)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
304
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
305
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
306 ;; ----------------------------------------------------------------
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
307 ;; buffer-face-mode
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
308
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
309 (defcustom buffer-face-mode-face 'variable-pitch
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
310 "The face specification used by `buffer-face-mode'.
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
311 It may contain any value suitable for a `face' text property,
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
312 including a face name, a list of face names, a face-attribute
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
313 plist, etc."
100439
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 99163
diff changeset
314 :group 'display
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 99163
diff changeset
315 :version "23.1")
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
316
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
317 ;; current remapping cookie for buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
318 (defvar buffer-face-mode-remapping nil)
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
319 (make-variable-buffer-local 'buffer-face-mode-remapping)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
320
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
321 ;;;###autoload
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
322 (define-minor-mode buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
323 "Minor mode for a buffer-specific default face.
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
324 When enabled, the face specified by the variable
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
325 `buffer-face-mode-face' is used to display the buffer text."
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
326 :lighter " BufFace"
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
327 (when buffer-face-mode-remapping
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
328 (face-remap-remove-relative buffer-face-mode-remapping))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
329 (setq buffer-face-mode-remapping
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
330 (and buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
331 (face-remap-add-relative 'default buffer-face-mode-face)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
332 (force-window-update (current-buffer)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
333
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
334 ;;;###autoload
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
335 (defun buffer-face-set (&rest specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
336 "Enable `buffer-face-mode', using face specs SPECS.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
337 SPECS can be any value suitable for the `face' text property,
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
338 including a face name, a list of face names, or a face-attribute
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
339 If SPECS is nil, then `buffer-face-mode' is disabled.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
340
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
341 This function will make the variable `buffer-face-mode-face'
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
342 buffer local, and set it to FACE."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
343 (interactive (list (read-face-name "Set buffer face")))
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
344 (while (and (consp specs) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
345 (setq specs (car specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
346 (if (null specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
347 (buffer-face-mode 0)
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
348 (set (make-local-variable 'buffer-face-mode-face) specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
349 (buffer-face-mode t)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
350
95552
6eb329b567fa Autoload variable-pitch-mode
Miles Bader <miles@gnu.org>
parents: 95535
diff changeset
351 ;;;###autoload
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
352 (defun buffer-face-toggle (&rest specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
353 "Toggle `buffer-face-mode', using face specs SPECS.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
354 SPECS can be any value suitable for the `face' text property,
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
355 including a face name, a list of face names, or a face-attribute
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
356
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
357 If `buffer-face-mode' is already enabled, and is currently using
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
358 the face specs SPECS, then it is disabled; if buffer-face-mode is
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
359 disabled, or is enabled and currently displaying some other face,
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
360 then is left enabled, but the face changed to reflect SPECS.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
361
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
362 This function will make the variable `buffer-face-mode-face'
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
363 buffer local, and set it to SPECS."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
364 (interactive (list buffer-face-mode-face))
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
365 (while (and (consp specs) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
366 (setq specs (car specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
367 (if (or (null specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
368 (and buffer-face-mode (equal buffer-face-mode-face specs)))
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
369 (buffer-face-mode 0)
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
370 (set (make-local-variable 'buffer-face-mode-face) specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
371 (buffer-face-mode t)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
372
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
373 (defun buffer-face-mode-invoke (specs arg &optional interactive)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
374 "Enable or disable `buffer-face-mode' using face specs SPECS, and argument ARG.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
375 ARG controls whether the mode is enabled or disabled, and is
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
376 interpreted in the usual manner for minor-mode commands.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
377
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
378 SPECS can be any value suitable for the `face' text property,
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
379 including a face name, a list of face names, or a face-attribute
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
380
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
381 If INTERACTIVE is non-nil, a message will be displayed describing the result.
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
382
96140
fea1ab635d2d Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 96091
diff changeset
383 This is a wrapper function which calls `buffer-face-set' or
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
384 `buffer-face-toggle' (depending on ARG), and prints a status
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
385 message in the echo area. In many cases one of those functions
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
386 may be more appropriate."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
387 (let ((last-message (current-message)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
388 (if (or (eq arg 'toggle) (not arg))
96091
594843cd487e Fix variable names in buffer-face-mode-invoke
Miles Bader <miles@gnu.org>
parents: 96090
diff changeset
389 (buffer-face-toggle specs)
594843cd487e Fix variable names in buffer-face-mode-invoke
Miles Bader <miles@gnu.org>
parents: 96090
diff changeset
390 (buffer-face-set (and (> (prefix-numeric-value arg) 0) specs)))
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
391 (when interactive
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
392 (unless (and (current-message)
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
393 (not (equal last-message (current-message))))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
394 (message "Buffer-Face mode %sabled"
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
395 (if buffer-face-mode "en" "dis"))))))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
396
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
397
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
398 ;; ----------------------------------------------------------------
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
399 ;; variable-pitch-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
400
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
401 ;;;###autoload
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
402 (defun variable-pitch-mode (&optional arg)
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
403 "Variable-pitch default-face mode.
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
404 An interface to `buffer-face-mode' which uses the `variable-pitch' face.
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
405 Besides the choice of face, it is the same as `buffer-face-mode'."
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
406 (interactive (list (or current-prefix-arg 'toggle)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
407 (buffer-face-mode-invoke 'variable-pitch arg (interactive-p)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
408
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
409
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
410 (provide 'face-remap)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
411
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
412 ;; arch-tag: 5c5f034b-8d58-4967-82bd-d61fd364e686
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
413 ;;; face-remap.el ends here