diff options
author | Case Duckworth | 2021-08-21 09:10:01 -0500 |
---|---|---|
committer | Case Duckworth | 2021-08-21 09:10:01 -0500 |
commit | 8df085bb42991a3c9bd216b1bbcb73738b29d411 (patch) | |
tree | 6c04ba14be7375eefc4324598ae739272336ace2 | |
parent | Allow acdw/copy-region-as-plain in read-only buffers (diff) | |
download | emacs-8df085bb42991a3c9bd216b1bbcb73738b29d411.tar.gz emacs-8df085bb42991a3c9bd216b1bbcb73738b29d411.zip |
Rewrite early-init.el
-rw-r--r-- | early-init.el | 96 | ||||
-rw-r--r-- | lisp/acdw-frame.el | 36 |
2 files changed, 91 insertions, 41 deletions
diff --git a/early-init.el b/early-init.el index 27c8450..4037fde 100644 --- a/early-init.el +++ b/early-init.el | |||
@@ -24,23 +24,24 @@ | |||
24 | load-path) | 24 | load-path) |
25 | (require 'acdw) | 25 | (require 'acdw) |
26 | 26 | ||
27 | |||
28 | ;;; Speed up init | 27 | ;;; Speed up init |
29 | ;; see doom-emacs, et al. | 28 | ;; see doom-emacs, et al. |
30 | 29 | ||
31 | (setq load-prefer-newer noninteractive | 30 | (setq acdw/orig-file-name-handler-alist file-name-handler-alist |
32 | orig-file-name-handler-alist file-name-handler-alist | ||
33 | file-name-handler-alist nil | 31 | file-name-handler-alist nil |
34 | inhibit-x-resources t) | 32 | gc-cons-percentage 0.8 |
35 | (acdw/gc-disable) | 33 | gc-cons-threshold most-positive-fixnum |
34 | load-prefer-newer noninteractive) | ||
36 | 35 | ||
37 | (add-hook 'after-init-hook | 36 | (add-hook 'after-init-hook |
38 | (defun after-init@reset () | 37 | (defun after-init@reset () |
39 | (acdw/gc-enable) | 38 | "Reset `file-name-handler-alist' and garbage collection." |
39 | (setq gc-cons-percentage 0.1 | ||
40 | gc-cons-threshold (* 800 1024 1024)) | ||
40 | (dolist (handler file-name-handler-alist) | 41 | (dolist (handler file-name-handler-alist) |
41 | (add-to-list 'orig-file-name-handler-alist handler)) | 42 | (add-to-list 'acdw/orig-file-name-handler-alist handler)) |
42 | (setq file-name-handler-alist orig-file-name-handler-alist))) | 43 | (setq file-name-handler-alist acdw/orig-file-name-handler-alist))) |
43 | 44 | ||
44 | ;;; Frame settings | 45 | ;;; Frame settings |
45 | (setq default-frame-alist ; Remove most UI | 46 | (setq default-frame-alist ; Remove most UI |
46 | `((tool-bar-lines . 0) ; No tool bar | 47 | `((tool-bar-lines . 0) ; No tool bar |
@@ -63,53 +64,65 @@ | |||
63 | 64 | ||
64 | (add-hook 'after-init-hook | 65 | (add-hook 'after-init-hook |
65 | (defun after-init@disable-ui-modes () | 66 | (defun after-init@disable-ui-modes () |
67 | "Disable UI modes after init. | ||
68 | I already disable them from the `default-frame-alist' for speed | ||
69 | and anti-flickering reasons, but this function allows running, | ||
70 | say, `tool-bar-mode' once to toggle the tool bar back on." | ||
66 | (dolist (mode ;; each mode is of the form (MODE . FRAME-ALIST-VAR) | 71 | (dolist (mode ;; each mode is of the form (MODE . FRAME-ALIST-VAR) |
67 | '((tool-bar-mode . tool-bar-lines) | 72 | '((tool-bar-mode . tool-bar-lines) |
68 | (menu-bar-mode . menu-bar-lines) | 73 | (menu-bar-mode . menu-bar-lines) |
69 | (scroll-bar-mode . vertical-scroll-bars) | 74 | (scroll-bar-mode . vertical-scroll-bars) |
70 | (horizontal-scroll-bar-mode . horizontal-scroll-bars) | 75 | (horizontal-scroll-bar-mode . horizontal-scroll-bars))) |
71 | )) | ||
72 | (let ((setting (alist-get (cdr mode) default-frame-alist))) | 76 | (let ((setting (alist-get (cdr mode) default-frame-alist))) |
73 | (when (or (not setting) | 77 | (when (or (not setting) |
74 | (= 0 setting)) | 78 | (zerop setting)) |
75 | (funcall (car mode) -1)))))) | 79 | (funcall (car mode) -1)))))) |
76 | 80 | ||
77 | (add-hook 'after-make-frame-functions | 81 | (add-hook 'after-make-frame-functions |
78 | (defun acdw/frame-setup (&rest args) | 82 | (defun after-make-frame@setup (&rest args) |
79 | (ignore args) | 83 | (ignore args) |
80 | ;; fonts | 84 | (let ((monospace-faces '((:font "DejaVu Sans Mono" :height 100) |
81 | (require 'acdw-fonts) | 85 | (:font "Consolas" :height 100) |
82 | (setq acdw-fonts/monospace (acdw/system | 86 | (:font "monospace" :height 100)))) |
83 | (:home "DejaVu Sans Mono") | 87 | (acdw/set-first-face-attribute 'default monospace-faces) |
84 | (:work "Consolas") | 88 | (acdw/set-first-face-attribute 'fixed-pitch monospace-faces) |
85 | (_ "monospace")) | 89 | (acdw/set-first-face-attribute 'variable-pitch |
86 | acdw-fonts/monospace-size (acdw/system | 90 | '((:font "Inter" :height 12) |
87 | (:work 12) | 91 | (:font "sans-serif" |
88 | (_ 10)) | 92 | :height 10)))) |
89 | acdw-fonts/variable (acdw/system | 93 | (acdw/set-emoji-fonts "Segoe UI Emoji" |
90 | (:home "Inter") | 94 | "Noto Color Emoji" |
91 | (:work "Inter") | 95 | "Apple Color Emoji" |
92 | (_ "sans-serif")) | 96 | "Symbola") |
93 | acdw-fonts/variable-size (acdw/system | 97 | (acdw/set-fringes '((left-curly-arrow [#b01100000 |
94 | (:work 14) | 98 | #b00110000 |
95 | (_ 12))) | 99 | #b00011000 |
96 | (acdw-fonts/set) | 100 | #b00001100] |
97 | (acdw-fonts/setup-emoji-fonts "Segoe UI Emoji" | 101 | 4 8 center) |
98 | "Noto Color Emoji" | 102 | (right-curly-arrow [#b00000011 |
99 | "Apple Color Emoji" | 103 | #b00000110 |
100 | "Symbola") | 104 | #b00001100 |
101 | ;; fringes | 105 | #b00011000] |
102 | (acdw/setup-fringes))) | 106 | 4 8 center) |
107 | (left-arrow [#b01100000 | ||
108 | #b01010000] | ||
109 | 2 8 (top t)) | ||
110 | (right-arrow [#b00000011 | ||
111 | #b00000101] | ||
112 | 2 8 (top t)))) | ||
113 | (setq indicate-empty-lines nil | ||
114 | indicate-buffer-boundaries '((top . right) | ||
115 | (bottom . right))) | ||
116 | (custom-set-faces '(fringe ((t (:foreground "dim gray"))))))) | ||
103 | 117 | ||
104 | ;; I have this here because ... the first frame doesn't ? run ? the hook ??? | 118 | ;; I have this here because ... the first frame doesn't ? run ? the hook ??? |
105 | (add-function :after after-focus-change-function | 119 | (add-function :after after-focus-change-function |
106 | (defun acdw/first-frame-setup (&rest args) | 120 | (defun after-focus-change@first-frame-setup (&rest args) |
107 | (ignore args) | 121 | (ignore args) |
108 | (acdw/frame-setup) | 122 | (after-make-frame@setup) |
109 | (remove-function after-focus-change-function | 123 | (remove-function after-focus-change-function |
110 | #'acdw/first-frame-setup))) | 124 | #'after-focus-change@first-frame-setup))) |
111 | 125 | ||
112 | |||
113 | ;;; Bootstrap package manager (`straight.el') | 126 | ;;; Bootstrap package manager (`straight.el') |
114 | 127 | ||
115 | ;; 1. Update `exec-path'. | 128 | ;; 1. Update `exec-path'. |
@@ -161,7 +174,6 @@ | |||
161 | ;; By the way, the alias is `straight-package-neutering-mode'. | 174 | ;; By the way, the alias is `straight-package-neutering-mode'. |
162 | (defalias 'straight-ಠ_ಠ-mode nil) | 175 | (defalias 'straight-ಠ_ಠ-mode nil) |
163 | 176 | ||
164 | |||
165 | ;;; Message startup time for profiling | 177 | ;;; Message startup time for profiling |
166 | ;; This just redefines the Emacs function | 178 | ;; This just redefines the Emacs function |
167 | ;; `display-startup-echo-area-message', so no hooks needed. | 179 | ;; `display-startup-echo-area-message', so no hooks needed. |
@@ -172,3 +184,5 @@ | |||
172 | (float-time (time-subtract after-init-time | 184 | (float-time (time-subtract after-init-time |
173 | before-init-time))) | 185 | before-init-time))) |
174 | gcs-done)) | 186 | gcs-done)) |
187 | |||
188 | ;;; early-init.el ends here | ||
diff --git a/lisp/acdw-frame.el b/lisp/acdw-frame.el new file mode 100644 index 0000000..753fd14 --- /dev/null +++ b/lisp/acdw-frame.el | |||
@@ -0,0 +1,36 @@ | |||
1 | ;;; acdw-frame.el -*- lexical-binding: t; coding: utf-8-unix -*- | ||
2 | |||
3 | ;;; Fonts | ||
4 | |||
5 | (defun acdw/set-first-face-attribute (face font-list) | ||
6 | "Set FACE to the first font found in FONT-LIST. | ||
7 | FONT-LIST is a list of `font-spec' plists to be passed to | ||
8 | `set-face-attribute'." | ||
9 | (cond | ||
10 | ((or (null window-system) | ||
11 | (null font-list)) | ||
12 | nil) | ||
13 | ((x-list-fonts (or (plist-get (car font-list) :font) | ||
14 | (plist-get (car font-list) :family))) | ||
15 | (apply #'set-face-attribute face nil (car font-list))) | ||
16 | (t (acdw/set-first-face-attribute face (cdr font-list))))) | ||
17 | |||
18 | (defun acdw/set-emoji-fonts (&rest emoji-fonts) | ||
19 | "Add all installed EMOJI-FONTS to the symbol fontset." | ||
20 | (let ((ffl (font-family-list))) | ||
21 | (dolist (font emoji-fonts) | ||
22 | (when (member font ffl) | ||
23 | (set-fontset-font t 'symbol | ||
24 | (font-spec :family font) nil 'append))))) | ||
25 | |||
26 | ;;; Fringes | ||
27 | |||
28 | (defun acdw/set-fringes (bitmap-list) | ||
29 | "Apply multiple fringes at once. | ||
30 | BITMAP-LIST is a list of arglists passed directly to | ||
31 | `define-fringe-bitmap', which see." | ||
32 | (dolist (bitmap bitmap-list) | ||
33 | (apply #'define-fringe-bitmap bitmap)) | ||
34 | (redraw-frame)) | ||
35 | |||
36 | (provide 'acdw-frame) | ||