Mercurial > emacs
annotate lisp/face-remap.el @ 100745:058e21e78546
(Minibuffer History): Add a link to `Isearch Minibuffer'.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Mon, 29 Dec 2008 00:19:15 +0000 |
parents | 5de002dfa264 |
children | a9dc0e7c3f2b |
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 |
100439
5de002dfa264
* face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
99163
diff
changeset
|
191 :type 'number |
5de002dfa264
* face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
99163
diff
changeset
|
192 :version "23.1") |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
193 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
194 ;; current remapping cookie for text-scale-mode |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
195 (defvar text-scale-mode-remapping nil) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
196 (make-variable-buffer-local 'text-scale-mode-remapping) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
197 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
198 ;; Lighter displayed for text-scale-mode in mode-line minor-mode list |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
199 (defvar text-scale-mode-lighter "+0") |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
200 (make-variable-buffer-local 'text-scale-mode-lighter) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
201 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
202 ;; Number of steps that text-scale-mode will increase/decrease text height |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
203 (defvar text-scale-mode-amount 0) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
204 (make-variable-buffer-local 'text-scale-mode-amount) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
205 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
206 (define-minor-mode text-scale-mode |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
207 "Minor mode for displaying buffer text in a larger/smaller font than usual. |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
208 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
209 The amount of scaling is determined by the variable |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
210 `text-scale-mode-amount': one step scales the global default |
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
211 face size by the value of the variable `text-scale-mode-step' |
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
212 \(a negative amount shrinks the text). |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
213 |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
214 The `text-scale-increase' and `text-scale-decrease' functions may |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
215 be used to interactively modify the variable |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
216 `text-scale-mode-amount' (they also enable or disable |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
217 `text-scale-mode' as necessary)." |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
218 :lighter (" " text-scale-mode-lighter) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
219 (when text-scale-mode-remapping |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
220 (face-remap-remove-relative text-scale-mode-remapping)) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
221 (setq text-scale-mode-lighter |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
222 (format (if (>= text-scale-mode-amount 0) "+%d" "%d") |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
223 text-scale-mode-amount)) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
224 (setq text-scale-mode-remapping |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
225 (and text-scale-mode |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
226 (face-remap-add-relative 'default |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
227 :height |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
228 (expt text-scale-mode-step |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
229 text-scale-mode-amount)))) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
230 (force-window-update (current-buffer))) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
231 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
232 ;;;###autoload |
99163
60acf25bcfb5
* face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents:
96152
diff
changeset
|
233 (defun text-scale-increase (inc) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
234 "Increase the height of the default face in the current buffer by INC steps. |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
235 If the new height is other than the default, `text-scale-mode' is enabled. |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
236 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
237 Each step scales the height of the default face by the variable |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
238 `text-scale-mode-step' (a negative number of steps decreases the |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
239 height by the same amount). As a special case, an argument of 0 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
240 will remove any scaling currently active." |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
241 (interactive "p") |
96080
2b046bd8b819
Fix behavior of text-scale-increase when text-scale-mode is disabled
Miles Bader <miles@gnu.org>
parents:
96042
diff
changeset
|
242 (setq text-scale-mode-amount |
2b046bd8b819
Fix behavior of text-scale-increase when text-scale-mode is disabled
Miles Bader <miles@gnu.org>
parents:
96042
diff
changeset
|
243 (if (= inc 0) 0 (+ (if text-scale-mode text-scale-mode-amount 0) inc))) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
244 (text-scale-mode (if (zerop text-scale-mode-amount) -1 1))) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
245 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
246 ;;;###autoload |
99163
60acf25bcfb5
* face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents:
96152
diff
changeset
|
247 (defun text-scale-decrease (dec) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
248 "Decrease the height of the default face in the current buffer by DEC steps. |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
249 See `text-scale-increase' for more details." |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
250 (interactive "p") |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
251 (text-scale-increase (- dec))) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
252 |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
253 ;;;###autoload (define-key ctl-x-map [(control ?+)] 'text-scale-adjust) |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
254 ;;;###autoload (define-key ctl-x-map [(control ?-)] 'text-scale-adjust) |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
255 ;;;###autoload (define-key ctl-x-map [(control ?=)] 'text-scale-adjust) |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
256 ;;;###autoload (define-key ctl-x-map [(control ?0)] 'text-scale-adjust) |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
257 ;;;###autoload |
99163
60acf25bcfb5
* face-remap.el (text-scale-increase, text-scale-decrease)
Juanma Barranquero <lekktu@gmail.com>
parents:
96152
diff
changeset
|
258 (defun text-scale-adjust (inc) |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
259 "Increase or decrease the height of the default face in the current buffer. |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
260 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
261 The actual adjustment made depends on the final component of the |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
262 key-binding used to invoke the command, with all modifiers removed: |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
263 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
264 +, = Increase the default face height by one step |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
265 - Decrease the default face height by one step |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
266 0 Reset the default face height to the global default |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
267 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
268 Then, continue to read input events and further adjust the face |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
269 height as long as the input event read (with all modifiers removed) |
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
270 is one of the above. |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
271 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
272 Each step scales the height of the default face by the variable |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
273 `text-scale-mode-step' (a negative number of steps decreases the |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
274 height by the same amount). As a special case, an argument of 0 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
275 will remove any scaling currently active. |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
276 |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
277 This command is a special-purpose wrapper around the |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
278 `text-scale-increase' command which makes repetition convenient |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
279 even when it is bound in a non-top-level keymap. For binding in |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
280 a top-level keymap, `text-scale-increase' or |
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
281 `text-scale-decrease' may be more appropriate." |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
282 (interactive "p") |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
283 (let ((first t) |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
284 (step t) |
96152
a35eb0adf0b2
(text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents:
96140
diff
changeset
|
285 (ev last-command-event) |
a35eb0adf0b2
(text-scale-adjust): Bind `echo-keystrokes' to nil.
Miles Bader <miles@gnu.org>
parents:
96140
diff
changeset
|
286 (echo-keystrokes nil)) |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
287 (while step |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
288 (let ((base (event-basic-type ev))) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
289 (cond ((or (eq base ?+) (eq base ?=)) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
290 (setq step inc)) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
291 ((eq base ?-) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
292 (setq step (- inc))) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
293 ((eq base ?0) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
294 (setq step 0)) |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
295 (first |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
296 (setq step inc)) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
297 (t |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
298 (setq step nil)))) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
299 (when step |
95563
6d9c4248a579
Rename functions in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
95552
diff
changeset
|
300 (text-scale-increase step) |
95527
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
301 (setq inc 1 first nil) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
302 (setq ev (read-event)))) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
303 (push ev unread-command-events))) |
0f9689c194e6
Add adjust-buffer-face-height command
Miles Bader <miles@gnu.org>
parents:
95515
diff
changeset
|
304 |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
305 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
306 ;; ---------------------------------------------------------------- |
96042 | 307 ;; buffer-face-mode |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
308 |
96042 | 309 (defcustom buffer-face-mode-face 'variable-pitch |
310 "The face specification used by `buffer-face-mode'. | |
311 It may contain any value suitable for a `face' text property, | |
312 including a face name, a list of face names, a face-attribute | |
313 plist, etc." | |
100439
5de002dfa264
* face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
99163
diff
changeset
|
314 :group 'display |
5de002dfa264
* face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents:
99163
diff
changeset
|
315 :version "23.1") |
96042 | 316 |
317 ;; current remapping cookie for buffer-face-mode | |
318 (defvar buffer-face-mode-remapping nil) | |
319 (make-variable-buffer-local 'buffer-face-mode-remapping) | |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
320 |
96042 | 321 ;;;###autoload |
322 (define-minor-mode buffer-face-mode | |
323 "Minor mode for a buffer-specific default face. | |
324 When enabled, the face specified by the variable | |
325 `buffer-face-mode-face' is used to display the buffer text." | |
326 :lighter " BufFace" | |
327 (when buffer-face-mode-remapping | |
328 (face-remap-remove-relative buffer-face-mode-remapping)) | |
329 (setq buffer-face-mode-remapping | |
330 (and buffer-face-mode | |
331 (face-remap-add-relative 'default buffer-face-mode-face))) | |
332 (force-window-update (current-buffer))) | |
333 | |
334 ;;;###autoload | |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
335 (defun buffer-face-set (&rest specs) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
336 "Enable `buffer-face-mode', using face specs SPECS. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
337 SPECS can be any value suitable for the `face' text property, |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
338 including a face name, a list of face names, or a face-attribute |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
339 If SPECS is nil, then `buffer-face-mode' is disabled. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
340 |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
341 This function will make the variable `buffer-face-mode-face' |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
342 buffer local, and set it to FACE." |
96042 | 343 (interactive (list (read-face-name "Set buffer face"))) |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
344 (while (and (consp specs) (null (cdr specs))) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
345 (setq specs (car specs))) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
346 (if (null specs) |
96042 | 347 (buffer-face-mode 0) |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
348 (set (make-local-variable 'buffer-face-mode-face) specs) |
96042 | 349 (buffer-face-mode t))) |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
350 |
95552 | 351 ;;;###autoload |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
352 (defun buffer-face-toggle (&rest specs) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
353 "Toggle `buffer-face-mode', using face specs SPECS. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
354 SPECS can be any value suitable for the `face' text property, |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
355 including a face name, a list of face names, or a face-attribute |
96042 | 356 |
357 If `buffer-face-mode' is already enabled, and is currently using | |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
358 the face specs SPECS, then it is disabled; if buffer-face-mode is |
96042 | 359 disabled, or is enabled and currently displaying some other face, |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
360 then is left enabled, but the face changed to reflect SPECS. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
361 |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
362 This function will make the variable `buffer-face-mode-face' |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
363 buffer local, and set it to SPECS." |
96042 | 364 (interactive (list buffer-face-mode-face)) |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
365 (while (and (consp specs) (null (cdr specs))) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
366 (setq specs (car specs))) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
367 (if (or (null specs) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
368 (and buffer-face-mode (equal buffer-face-mode-face specs))) |
96042 | 369 (buffer-face-mode 0) |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
370 (set (make-local-variable 'buffer-face-mode-face) specs) |
96042 | 371 (buffer-face-mode t))) |
372 | |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
373 (defun buffer-face-mode-invoke (specs arg &optional interactive) |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
374 "Enable or disable `buffer-face-mode' using face specs SPECS, and argument ARG. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
375 ARG controls whether the mode is enabled or disabled, and is |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
376 interpreted in the usual manner for minor-mode commands. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
377 |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
378 SPECS can be any value suitable for the `face' text property, |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
379 including a face name, a list of face names, or a face-attribute |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
380 |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
381 If INTERACTIVE is non-nil, a message will be displayed describing the result. |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
382 |
96140
fea1ab635d2d
Fix autoload directives in lisp/face-remap.el
Miles Bader <miles@gnu.org>
parents:
96091
diff
changeset
|
383 This is a wrapper function which calls `buffer-face-set' or |
96090
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
384 `buffer-face-toggle' (depending on ARG), and prints a status |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
385 message in the echo area. In many cases one of those functions |
596ac435a025
Tweak interface of buffer-face-mode functions
Miles Bader <miles@gnu.org>
parents:
96080
diff
changeset
|
386 may be more appropriate." |
96042 | 387 (let ((last-message (current-message))) |
388 (if (or (eq arg 'toggle) (not arg)) | |
96091
594843cd487e
Fix variable names in buffer-face-mode-invoke
Miles Bader <miles@gnu.org>
parents:
96090
diff
changeset
|
389 (buffer-face-toggle specs) |
594843cd487e
Fix variable names in buffer-face-mode-invoke
Miles Bader <miles@gnu.org>
parents:
96090
diff
changeset
|
390 (buffer-face-set (and (> (prefix-numeric-value arg) 0) specs))) |
96042 | 391 (when interactive |
392 (unless (and (current-message) | |
393 (not (equal last-message (current-message)))) | |
394 (message "Buffer-Face mode %sabled" | |
395 (if buffer-face-mode "en" "dis")))))) | |
396 | |
397 | |
398 ;; ---------------------------------------------------------------- | |
399 ;; variable-pitch-mode | |
400 | |
401 ;;;###autoload | |
402 (defun variable-pitch-mode (&optional arg) | |
95535
3a67eec377e0
(variable-pitch-mode): Reflow docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
95527
diff
changeset
|
403 "Variable-pitch default-face mode. |
96042 | 404 An interface to `buffer-face-mode' which uses the `variable-pitch' face. |
405 Besides the choice of face, it is the same as `buffer-face-mode'." | |
406 (interactive (list (or current-prefix-arg 'toggle))) | |
407 (buffer-face-mode-invoke 'variable-pitch arg (interactive-p))) | |
95515
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
408 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
409 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
410 (provide 'face-remap) |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
411 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
412 ;; arch-tag: 5c5f034b-8d58-4967-82bd-d61fd364e686 |
328f63bafded
Add lisp/face-remap.el and associated documentation
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
413 ;;; face-remap.el ends here |