annotate lisp/face-remap.el @ 97528:184bb2071e3f

mail/: Add new (temporary) libaries for which to test Rmail/mbox such that Rmail/babyl is not affected. This creates a facility/feature called "pmail" (analagous to "rmail") that can be used independently from Rmail for testing purposes. The plan is to replace the "rmail" files eventually and remove "pmail" entirely at that point. In the interim, interested developers can use either Rmail or Pmail or both (which is not recommended for the casual User or the faint of heart).
author Paul Reilly <pmr@pajato.com>
date Mon, 18 Aug 2008 04:51:28 +0000
parents a35eb0adf0b2
children 60acf25bcfb5
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 ;;
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 2008 Free Software Foundation, Inc.
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
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
191 :type 'number)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
192
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
193 ;; current remapping cookie for text-scale-mode
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
194 (defvar text-scale-mode-remapping nil)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
195 (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
196
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
197 ;; 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
198 (defvar text-scale-mode-lighter "+0")
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
199 (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
200
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
201 ;; 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
202 (defvar text-scale-mode-amount 0)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
203 (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
204
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
205 (define-minor-mode text-scale-mode
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
206 "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
207
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
208 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
209 `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
210 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
211 \(a negative amount shrinks the text).
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
212
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
213 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
214 be used to interactively modify the variable
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
215 `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
216 `text-scale-mode' as necessary)."
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
217 :lighter (" " text-scale-mode-lighter)
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
218 (when text-scale-mode-remapping
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
219 (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
220 (setq text-scale-mode-lighter
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
221 (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
222 text-scale-mode-amount))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
223 (setq text-scale-mode-remapping
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
224 (and text-scale-mode
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
225 (face-remap-add-relative 'default
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
226 :height
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
227 (expt text-scale-mode-step
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
228 text-scale-mode-amount))))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
229 (force-window-update (current-buffer)))
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
230
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
231 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
232 (defun text-scale-increase (&optional inc)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
233 "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
234 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
235
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
236 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
237 `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
238 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
239 will remove any scaling currently active."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
240 (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
241 (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
242 (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
243 (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
244
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
245 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
246 (defun text-scale-decrease (&optional dec)
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
247 "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
248 See `text-scale-increase' for more details."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
249 (interactive "p")
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
250 (text-scale-increase (- dec)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
251
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
252 ;;;###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
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 ?0)] 'text-scale-adjust)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
256 ;;;###autoload
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
257 (defun text-scale-adjust (&optional inc)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
258 "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
259
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
260 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
261 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
262
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
263 +, = Increase the default face height by one step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
264 - Decrease the default face height by one step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
265 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
266
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
267 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
268 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
269 is one of the above.
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
270
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
271 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
272 `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
273 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
274 will remove any scaling currently active.
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
275
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
276 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
277 `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
278 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
279 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
280 `text-scale-decrease' may be more appropriate."
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
281 (interactive "p")
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
282 (let ((first t)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
283 (step t)
96152
a35eb0adf0b2 (text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents: 96140
diff changeset
284 (ev last-command-event)
a35eb0adf0b2 (text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents: 96140
diff changeset
285 (echo-keystrokes nil))
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
286 (while step
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
287 (let ((base (event-basic-type ev)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
288 (cond ((or (eq base ?+) (eq base ?=))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
289 (setq step inc))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
290 ((eq base ?-)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
291 (setq step (- inc)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
292 ((eq base ?0)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
293 (setq step 0))
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
294 (first
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
295 (setq step inc))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
296 (t
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
297 (setq step nil))))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
298 (when step
95563
6d9c4248a579 Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 95552
diff changeset
299 (text-scale-increase step)
95527
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
300 (setq inc 1 first nil)
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
301 (setq ev (read-event))))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
302 (push ev unread-command-events)))
0f9689c194e6 Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents: 95515
diff changeset
303
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
304
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
305 ;; ----------------------------------------------------------------
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
306 ;; buffer-face-mode
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
307
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
308 (defcustom buffer-face-mode-face 'variable-pitch
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
309 "The face specification used by `buffer-face-mode'.
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
310 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
311 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
312 plist, etc."
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
313 :group 'display)
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
314
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
315 ;; current remapping cookie for buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
316 (defvar buffer-face-mode-remapping nil)
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
317 (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
318
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
319 ;;;###autoload
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
320 (define-minor-mode buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
321 "Minor mode for a buffer-specific default face.
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
322 When enabled, the face specified by the variable
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
323 `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
324 :lighter " BufFace"
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
325 (when buffer-face-mode-remapping
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
326 (face-remap-remove-relative buffer-face-mode-remapping))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
327 (setq buffer-face-mode-remapping
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
328 (and buffer-face-mode
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
329 (face-remap-add-relative 'default buffer-face-mode-face)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
330 (force-window-update (current-buffer)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
331
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
332 ;;;###autoload
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
333 (defun buffer-face-set (&rest specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
334 "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
335 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
336 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
337 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
338
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
339 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
340 buffer local, and set it to FACE."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
341 (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
342 (while (and (consp specs) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
343 (setq specs (car specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
344 (if (null specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
345 (buffer-face-mode 0)
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
346 (set (make-local-variable 'buffer-face-mode-face) specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
347 (buffer-face-mode t)))
95515
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
348
95552
6eb329b567fa Autoload variable-pitch-mode
Miles Bader <miles@gnu.org>
parents: 95535
diff changeset
349 ;;;###autoload
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
350 (defun buffer-face-toggle (&rest specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
351 "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
352 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
353 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
354
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
355 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
356 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
357 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
358 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
359
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
360 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
361 buffer local, and set it to SPECS."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
362 (interactive (list buffer-face-mode-face))
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
363 (while (and (consp specs) (null (cdr specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
364 (setq specs (car specs)))
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
365 (if (or (null specs)
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
366 (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
367 (buffer-face-mode 0)
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
368 (set (make-local-variable 'buffer-face-mode-face) specs)
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
369 (buffer-face-mode t)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
370
96090
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
371 (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
372 "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
373 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
374 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
375
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
376 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
377 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
378
596ac435a025 Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents: 96080
diff changeset
379 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
380
96140
fea1ab635d2d Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents: 96091
diff changeset
381 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
382 `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
383 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
384 may be more appropriate."
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
385 (let ((last-message (current-message)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
386 (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
387 (buffer-face-toggle specs)
594843cd487e Fix variable names in buffer-face-mode-invoke
Miles Bader <miles@gnu.org>
parents: 96090
diff changeset
388 (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
389 (when interactive
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
390 (unless (and (current-message)
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
391 (not (equal last-message (current-message))))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
392 (message "Buffer-Face mode %sabled"
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
393 (if buffer-face-mode "en" "dis"))))))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
394
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
395
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 ;; variable-pitch-mode
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 ;;;###autoload
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
400 (defun variable-pitch-mode (&optional arg)
95535
3a67eec377e0 (variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 95527
diff changeset
401 "Variable-pitch default-face mode.
96042
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
402 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
403 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
404 (interactive (list (or current-prefix-arg 'toggle)))
dfc9ab5fbea5 Add buffer-face-mode
Miles Bader <miles@gnu.org>
parents: 96041
diff changeset
405 (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
406
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
407
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
408 (provide 'face-remap)
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 ;; arch-tag: 5c5f034b-8d58-4967-82bd-d61fd364e686
328f63bafded Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff changeset
411 ;;; face-remap.el ends here