diff options
Diffstat (limited to 'lisp/acdw-fonts.el')
-rw-r--r-- | lisp/acdw-fonts.el | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/lisp/acdw-fonts.el b/lisp/acdw-fonts.el deleted file mode 100644 index 0fce172..0000000 --- a/lisp/acdw-fonts.el +++ /dev/null | |||
@@ -1,176 +0,0 @@ | |||
1 | ;;; acdw-fonts.el -- font setup -*- lexical-binding: t; coding: utf-8-unix -*- | ||
2 | |||
3 | ;; Author: Case Duckworth <(rot13-string "npqj@npqj.arg")> | ||
4 | ;; Created: Sometime during Covid-19, 2020 | ||
5 | ;; Keywords: configuration | ||
6 | ;; URL: https://tildegit.org/acdw/emacs | ||
7 | |||
8 | ;; This file is NOT part of GNU Emacs. | ||
9 | |||
10 | ;; Everyone is permitted to do whatever with this software, without | ||
11 | ;; limitation. This software comes without any warranty whatsoever, | ||
12 | ;; but with two pieces of advice: | ||
13 | ;; - Don't hurt yourself. | ||
14 | ;; - Make good choices. | ||
15 | |||
16 | ;;; Commentary: | ||
17 | ;; This code is based heavily on (and in fact, until I am able to tweak it, | ||
18 | ;; will be a copy of) Oliver Taylor's code, available here: | ||
19 | ;; https://github.com/olivertaylor/olivertaylor.github.io | ||
20 | ;; /blob/master/notes/20210324_emacs-optical-font-adjustment.org | ||
21 | |||
22 | ;;; Code: | ||
23 | |||
24 | |||
25 | ;; Variables | ||
26 | |||
27 | (defvar acdw-fonts/monospace nil | ||
28 | "Monospace font to be used for `default' and `fixed-pitch' faces.") | ||
29 | |||
30 | (defvar acdw-fonts/variable nil | ||
31 | "Variable font to be used for the `variable-pitch' face.") | ||
32 | |||
33 | (defvar acdw-fonts/monospace-size 11 | ||
34 | "Font size, an integer, to be used for the `default' and `fixed-pitch' faces. | ||
35 | |||
36 | This value is multiplied by 10, so 12 becomes 120, in order to | ||
37 | comply with Emacs's `set-face-attribute' requirements.") | ||
38 | |||
39 | (defvar acdw-fonts/variable-size 12 | ||
40 | "Font size, an integer, to be used for the `variable-pitch' face. | ||
41 | |||
42 | This value will be used to determine a relative (float) size | ||
43 | based on the default size. So if your default size is 12 and | ||
44 | your variable size is 14, the computed relative size will be | ||
45 | 1.16.") | ||
46 | |||
47 | |||
48 | ;; Functions | ||
49 | |||
50 | (defun acdw-fonts/set () | ||
51 | "Set fonts according to `acdw-fonts' variables." | ||
52 | (interactive) | ||
53 | (set-face-attribute 'default nil | ||
54 | :family acdw-fonts/monospace | ||
55 | :height (* acdw-fonts/monospace-size 10)) | ||
56 | (set-face-attribute 'fixed-pitch nil | ||
57 | :family acdw-fonts/monospace | ||
58 | :height 1.0) | ||
59 | (set-face-attribute 'variable-pitch nil | ||
60 | :family acdw-fonts/variable | ||
61 | :height 1.0)) | ||
62 | |||
63 | |||
64 | ;;; Larger Variable Pitch Mode | ||
65 | |||
66 | |||
67 | ;; A minor mode to scale the variable-pitch face up to the height defined in | ||
68 | ;; `acdw-fonts/variable-size' and the fixed-pitch face down to the height | ||
69 | ;; defined in `acdw-fonts/monospace-size', buffer locally. This mode should | ||
70 | ;; be enabled wherever you want to adjust face sizes, perhaps with a hook. | ||
71 | |||
72 | (make-variable-buffer-local | ||
73 | (defvar larger-variable-pitch-mode-status nil | ||
74 | "Status of the larger-variable-pitch-mode")) | ||
75 | |||
76 | (make-variable-buffer-local | ||
77 | (defvar variable-pitch-remapping nil | ||
78 | "variable-pitch remapping cookie for larger-variable-pitch-mode.")) | ||
79 | |||
80 | (make-variable-buffer-local | ||
81 | (defvar fixed-pitch-remapping nil | ||
82 | "fixed-pitch remapping cookie for larger-variable-pitch-mode")) | ||
83 | |||
84 | (defun larger-variable-pitch-mode-toggle () | ||
85 | (setq larger-variable-pitch-mode-status | ||
86 | (not larger-variable-pitch-mode-status)) | ||
87 | (if larger-variable-pitch-mode-status | ||
88 | (progn | ||
89 | (setq variable-pitch-remapping | ||
90 | (face-remap-add-relative | ||
91 | 'variable-pitch :height (/ (float acdw-fonts/variable-size) | ||
92 | (float acdw-fonts/monospace-size)))) | ||
93 | (setq fixed-pitch-remapping | ||
94 | (face-remap-add-relative | ||
95 | 'fixed-pitch :height (/ (float acdw-fonts/monospace-size) | ||
96 | (float acdw-fonts/variable-size)))) | ||
97 | (force-window-update (current-buffer))) | ||
98 | (progn | ||
99 | (face-remap-remove-relative variable-pitch-remapping) | ||
100 | (face-remap-remove-relative fixed-pitch-remapping)))) | ||
101 | |||
102 | (define-minor-mode larger-variable-pitch-mode | ||
103 | "Minor mode to scale the variable- and fixed-pitch faces up and down." | ||
104 | :init-value nil | ||
105 | :lighter " V+" | ||
106 | (larger-variable-pitch-mode-toggle)) | ||
107 | |||
108 | (defun acdw-fonts/buffer-face-hook () | ||
109 | "Activate and deactivate larger-variable-pitch-mode minor mode." | ||
110 | (if buffer-face-mode | ||
111 | (larger-variable-pitch-mode 1) | ||
112 | (larger-variable-pitch-mode -1))) | ||
113 | |||
114 | (add-hook 'buffer-face-mode-hook #'acdw-fonts/buffer-face-hook) | ||
115 | |||
116 | |||
117 | ;;; Emoji fonts | ||
118 | ;; from https://old.reddit.com/r/emacs/comments/mvlid5/ | ||
119 | |||
120 | (defun acdw-fonts/setup-emoji-fonts (&rest emoji-fonts) | ||
121 | "For all EMOJI-FONTS that exist, add them to the symbol fontset. | ||
122 | |||
123 | This is for emoji fonts." | ||
124 | (let ((ffl (font-family-list))) | ||
125 | (dolist (font emoji-fonts) | ||
126 | (when (member font ffl) | ||
127 | (set-fontset-font t 'symbol | ||
128 | (font-spec :family font) nil 'append))))) | ||
129 | |||
130 | |||
131 | ;;; Variable-pitch | ||
132 | ;; from https://github.com/turbana/emacs-config#variable-pitch | ||
133 | |||
134 | (defcustom acdw-fonts/fixed-pitch-faces '(linum | ||
135 | org-block | ||
136 | org-block-begin-line | ||
137 | org-block-end-line | ||
138 | org-checkbox | ||
139 | org-code | ||
140 | org-date | ||
141 | org-document-info-keyword | ||
142 | org-hide | ||
143 | org-indent | ||
144 | org-link | ||
145 | org-meta-line | ||
146 | org-special-keyword | ||
147 | org-table | ||
148 | whitespace-space) | ||
149 | "Faces to keep fixed-pitch in `acdw/variable-pitch-mode'." | ||
150 | :type 'sexp | ||
151 | :group 'faces) | ||
152 | |||
153 | (defun acdw-fonts//variable-pitch-add-inherit (attrs parent) | ||
154 | "Add `:inherit PARENT' to ATTRS unless already present. | ||
155 | Handles cases where `:inherit' is already specified." | ||
156 | (let ((current-parent (plist-get attrs :inherit))) | ||
157 | (unless (or (eq parent current-parent) | ||
158 | (and (listp current-parent) | ||
159 | (member parent current-parent))) | ||
160 | (plist-put attrs :inherit (if current-parent | ||
161 | (list current-parent parent) | ||
162 | parent))))) | ||
163 | |||
164 | (defun acdw-fonts/adapt-variable-pitch () | ||
165 | "Adapt `variable-pitch-mode' to keep some fonts fixed-pitch." | ||
166 | (when variable-pitch-mode | ||
167 | (mapc (lambda (face) | ||
168 | (when (facep face) | ||
169 | (apply #'set-face-attribute | ||
170 | face nil (acdw-fonts//variable-pitch-add-inherit | ||
171 | (face-attr-construct face) | ||
172 | 'fixed-pitch)))) | ||
173 | acdw-fonts/fixed-pitch-faces))) | ||
174 | |||
175 | (provide 'acdw-fonts) | ||
176 | ;;; acdw-fonts.el ends here | ||