Mercurial > emacs
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 |
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 | 306 ;; buffer-face-mode |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
307 |
96042 | 308 (defcustom buffer-face-mode-face 'variable-pitch |
309 "The face specification used by `buffer-face-mode'. | |
310 It may contain any value suitable for a `face' text property, | |
311 including a face name, a list of face names, a face-attribute | |
312 plist, etc." | |
313 :group 'display) | |
314 | |
315 ;; current remapping cookie for buffer-face-mode | |
316 (defvar buffer-face-mode-remapping nil) | |
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 | 319 ;;;###autoload |
320 (define-minor-mode buffer-face-mode | |
321 "Minor mode for a buffer-specific default face. | |
322 When enabled, the face specified by the variable | |
323 `buffer-face-mode-face' is used to display the buffer text." | |
324 :lighter " BufFace" | |
325 (when buffer-face-mode-remapping | |
326 (face-remap-remove-relative buffer-face-mode-remapping)) | |
327 (setq buffer-face-mode-remapping | |
328 (and buffer-face-mode | |
329 (face-remap-add-relative 'default buffer-face-mode-face))) | |
330 (force-window-update (current-buffer))) | |
331 | |
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 | 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 | 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 | 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 | 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 | 354 |
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 | 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 | 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 | 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 | 369 (buffer-face-mode t))) |
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 | 385 (let ((last-message (current-message))) |
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 | 389 (when interactive |
390 (unless (and (current-message) | |
391 (not (equal last-message (current-message)))) | |
392 (message "Buffer-Face mode %sabled" | |
393 (if buffer-face-mode "en" "dis")))))) | |
394 | |
395 | |
396 ;; ---------------------------------------------------------------- | |
397 ;; variable-pitch-mode | |
398 | |
399 ;;;###autoload | |
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 | 402 An interface to `buffer-face-mode' which uses the `variable-pitch' face. |
403 Besides the choice of face, it is the same as `buffer-face-mode'." | |
404 (interactive (list (or current-prefix-arg 'toggle))) | |
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 |