diff options
author | Case Duckworth | 2020-12-21 23:20:21 -0600 |
---|---|---|
committer | Case Duckworth | 2020-12-21 23:20:21 -0600 |
commit | 3f1cd96a63c6fd372782e79af2f97659cf4725ff (patch) | |
tree | 8bdc6dd8e3f877cca45b52cbdee6f28788f5515c | |
parent | Speed up init by adjusting garbage collection et al (diff) | |
download | emacs-3f1cd96a63c6fd372782e79af2f97659cf4725ff.tar.gz emacs-3f1cd96a63c6fd372782e79af2f97659cf4725ff.zip |
Update README
-rw-r--r-- | README.md | 219 | ||||
-rw-r--r-- | config.org | 2 | ||||
-rw-r--r-- | init.el | 8 |
3 files changed, 204 insertions, 25 deletions
diff --git a/README.md b/README.md index 1be56dd..a35da41 100644 --- a/README.md +++ b/README.md | |||
@@ -167,6 +167,18 @@ when it errors. | |||
167 | ### Remove the bell | 167 | ### Remove the bell |
168 | 168 | ||
169 | (cuss visible-bell (not (string= (system-name) "larry"))) | 169 | (cuss visible-bell (not (string= (system-name) "larry"))) |
170 | |||
171 | (defun acdw/ring-bell-function () | ||
172 | "Custom bell-ringing function." | ||
173 | (let ((orig-face (face-foreground 'mode-line))) | ||
174 | (set-face-foreground 'modeline "#F2804F") | ||
175 | (run-with-idle-timer | ||
176 | 0.1 nil | ||
177 | (lambda (fg) | ||
178 | (set-face-foreground 'mode-line fg)) | ||
179 | orig-face))) | ||
180 | |||
181 | (cuss ring-bell-function #'acdw/ring-bell-function) | ||
170 | 182 | ||
171 | 183 | ||
172 | ### Tell Ediff to setup windows better | 184 | ### Tell Ediff to setup windows better |
@@ -274,6 +286,49 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
274 | (winner-mode +1)) | 286 | (winner-mode +1)) |
275 | 287 | ||
276 | 288 | ||
289 | ### Windmove | ||
290 | |||
291 | (cuss windmove-create-window t | ||
292 | "Create windows in a direction if they don't exist.") | ||
293 | (cuss windomove-wrap-around t | ||
294 | "Wrap window movements around frame edges.") | ||
295 | |||
296 | (windmove-default-keybindings) | ||
297 | |||
298 | |||
299 | ### Pop some buffers up in the same window | ||
300 | |||
301 | from [link0ff](https://github.com/link0ff/emacs-init). | ||
302 | |||
303 | (push `(,(rx bos | ||
304 | "*" | ||
305 | (or "Help" "Apropos" "Colors" "Buffer List" "Command History" | ||
306 | "Dictionary" "Locate" "Messages" "Proced" "eww" "snd" | ||
307 | (and "gud-" (+ (any "a-z0-9"))) | ||
308 | "compilation" "grep" "erlang" "haskell" | ||
309 | ;; Handle both "*shell*" and e.g. "*emacs-shell*" | ||
310 | ;; generated by `project-shell': | ||
311 | (and (? (* nonl) "-") "shell") | ||
312 | "Shell Command Output" | ||
313 | (and "SQL: " (+ (any "A-za-z"))) | ||
314 | "Diff" "vc-dir" "vc-log" "vc-search-log") | ||
315 | "*" | ||
316 | ;; Uniquifed buffer name with optional suffix in angle brackets | ||
317 | (? (and "<" (+ (not (any ">"))) ">")) | ||
318 | eos) | ||
319 | display-buffer-same-window | ||
320 | (inhibit-same-window . nil)) | ||
321 | display-buffer-alist) | ||
322 | |||
323 | (defun display-buffer-from-help-p (_buffer-name _action) | ||
324 | (unless current-prefix-arg | ||
325 | (with-current-buffer (window-buffer) | ||
326 | (eq major-mode 'help-mode)))) | ||
327 | |||
328 | (push '(display-buffer-from-help-p display-buffer-same-window) | ||
329 | display-buffer-alist) | ||
330 | |||
331 | |||
277 | ## Startup | 332 | ## Startup |
278 | 333 | ||
279 | (cuss inhibit-startup-screen t "Don't show Emacs' startup buffer.") | 334 | (cuss inhibit-startup-screen t "Don't show Emacs' startup buffer.") |
@@ -349,34 +404,46 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
349 | (if (find-font (font-spec :name font)) | 404 | (if (find-font (font-spec :name font)) |
350 | (throw :font font))))) | 405 | (throw :font font))))) |
351 | 406 | ||
407 | (defun set-face-from-alternatives (face fonts) | ||
408 | (dolist (font fonts) | ||
409 | (if (find-font (font-spec :family (car font))) | ||
410 | (apply #'set-face-attribute `(,face nil | ||
411 | :family ,(car font) | ||
412 | ,@(cdr font)))))) | ||
413 | |||
352 | (defun acdw/setup-fonts () | 414 | (defun acdw/setup-fonts () |
353 | "Setup fonts. This has to happen after the frame is setup for | 415 | "Setup fonts. This has to happen after the frame is setup for |
354 | the first time, so it should be added to `window-setup-hook'. It | 416 | the first time, so it should be added to `window-setup-hook'. It |
355 | removes itself from that hook." | 417 | removes itself from that hook." |
356 | (interactive) | 418 | (interactive) |
357 | (when (display-graphic-p) | 419 | (when (display-graphic-p) |
358 | (set-face-attribute 'default nil | 420 | (set-face-from-alternatives 'default |
359 | :font | 421 | '(("Libertinus Mono" |
360 | (font-candidate | 422 | :height 110) |
361 | "Libertinus Mono-11" | 423 | ("Linux Libertine Mono O" |
362 | "Linux Libertine Mono O-11" | 424 | :height 110) |
363 | "Go Mono-10" | 425 | ("Go Mono" |
364 | "Consolas-10")) | 426 | :height 100) |
427 | ("Consolas" | ||
428 | :height 100))) | ||
365 | 429 | ||
366 | (set-face-attribute 'fixed-pitch nil | 430 | (set-face-from-alternatives 'fixed-pitch |
367 | :font | 431 | '(("Libertinus Mono" |
368 | (font-candidate | 432 | :height 1.0) |
369 | "Libertinus Mono-11" | 433 | ("Linux Libertine Mono O" |
370 | "Linux Libertine Mono O-11" | 434 | :height 1.0) |
371 | "Go Mono-10" | 435 | ("Go Mono" |
372 | "Consolas-10")) | 436 | :height 1.0) |
437 | ("Consolas" | ||
438 | :height 1.0))) | ||
373 | 439 | ||
374 | (set-face-attribute 'variable-pitch nil | 440 | (set-face-from-alternatives 'variable-pitch |
375 | :font | 441 | '(("Libertinus Serif" |
376 | (font-candidate | 442 | :height 1.0) |
377 | "Libertinus Serif-13" | 443 | ("Linux Libertine O" |
378 | "Linux Libertine O-12" | 444 | :height 1.0) |
379 | "Georgia-11")) | 445 | ("Georgia" |
446 | :height 1.0))) | ||
380 | 447 | ||
381 | (remove-function after-focus-change-function #'acdw/setup-fonts))) | 448 | (remove-function after-focus-change-function #'acdw/setup-fonts))) |
382 | 449 | ||
@@ -400,6 +467,16 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
400 | # Interactivity | 467 | # Interactivity |
401 | 468 | ||
402 | 469 | ||
470 | ## Async | ||
471 | |||
472 | (use-package async) | ||
473 | |||
474 | (autoload 'dired-async-mode "dired-async.el" nil t) | ||
475 | (dired-async-mode +1) | ||
476 | |||
477 | (async-bytecomp-package-mode +1) | ||
478 | |||
479 | |||
403 | ## Completing-read | 480 | ## Completing-read |
404 | 481 | ||
405 | 482 | ||
@@ -463,8 +540,12 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
463 | :branch "main") | 540 | :branch "main") |
464 | :init | 541 | :init |
465 | (marginalia-mode +1) | 542 | (marginalia-mode +1) |
466 | (cuss marginalia-annotators '(marginalia-annotators-heavy | 543 | (cuss marginalia-annotators |
467 | marginalia-annotators-light))) | 544 | (if (eq system-type 'windows-nt) |
545 | '(marginalia-annotators-light | ||
546 | marginalia-annotators-heavy) | ||
547 | '(marginalia-annotators-heavy | ||
548 | marginalia-annotators-light)))) | ||
468 | 549 | ||
469 | 550 | ||
470 | ## Ignore case | 551 | ## Ignore case |
@@ -490,6 +571,11 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
490 | 571 | ||
491 | ## Mouse | 572 | ## Mouse |
492 | 573 | ||
574 | |||
575 | ### Fix scrolling in margins | ||
576 | |||
577 | This is not *quite* correct yet. For example, scrolling in the margins with a trackpad isn’t picked up (a trackpad sends different mouse events). | ||
578 | |||
493 | (dolist (vec '([left-margin wheel-down] | 579 | (dolist (vec '([left-margin wheel-down] |
494 | [right-margin wheel-down] | 580 | [right-margin wheel-down] |
495 | [left-margin wheel-up] | 581 | [left-margin wheel-up] |
@@ -497,6 +583,46 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
497 | (bind-key vec #'mwheel-scroll)) | 583 | (bind-key vec #'mwheel-scroll)) |
498 | 584 | ||
499 | 585 | ||
586 | ## Keyboard | ||
587 | |||
588 | |||
589 | ### Use `ESC` as a cancel key | ||
590 | |||
591 | From [link0ff](https://github.com/link0ff/emacs-init). I thought they made a great point that `ESC` isn’t necessary to copy the `META` key on window-systems, which is where I use Emacs, anyway. | ||
592 | |||
593 | (when window-system | ||
594 | (define-key global-map [escape] 'keyboard-escape-quit) | ||
595 | (define-key isearch-mode-map [escape] 'isearch-cancel)) | ||
596 | |||
597 | |||
598 | ### Make `C-z` more useful as a prefix key | ||
599 | |||
600 | Also from link0ff. See the above for a link. | ||
601 | |||
602 | (defvar my-map | ||
603 | (let ((map (make-sparse-keymap)) | ||
604 | (c-z (global-key-binding "\C-z"))) | ||
605 | (global-unset-key "\C-z") | ||
606 | (define-key global-map "\C-z" map) | ||
607 | (define-key map "\C-z" c-z) | ||
608 | map)) | ||
609 | (run-hooks 'my-map-defined-hook) | ||
610 | |||
611 | |||
612 | ### Which-key | ||
613 | |||
614 | (use-package which-key | ||
615 | :config | ||
616 | (which-key-mode +1)) | ||
617 | |||
618 | |||
619 | ### Bindings | ||
620 | |||
621 | 1. Switch to another window | ||
622 | |||
623 | (bind-key "M-o" #'other-window) | ||
624 | |||
625 | |||
500 | # Persistence | 626 | # Persistence |
501 | 627 | ||
502 | 628 | ||
@@ -596,6 +722,11 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
596 | (cuss save-interprogram-paste-before-kill t) | 722 | (cuss save-interprogram-paste-before-kill t) |
597 | 723 | ||
598 | 724 | ||
725 | ### Sync the system clipboard and the kill ring | ||
726 | |||
727 | (cuss yank-pop-change-selection t) | ||
728 | |||
729 | |||
599 | ## So long mode | 730 | ## So long mode |
600 | 731 | ||
601 | (when (fboundp 'global-so-long-mode) | 732 | (when (fboundp 'global-so-long-mode) |
@@ -619,6 +750,15 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
619 | ("C-+" . er/contract-region))) | 750 | ("C-+" . er/contract-region))) |
620 | 751 | ||
621 | 752 | ||
753 | ## Highlight modified regions | ||
754 | |||
755 | (use-package goggles | ||
756 | :custom | ||
757 | (goggles-pulse nil) | ||
758 | :config | ||
759 | (goggles-mode +1)) | ||
760 | |||
761 | |||
622 | # Files | 762 | # Files |
623 | 763 | ||
624 | 764 | ||
@@ -627,7 +767,7 @@ from [Stack Overflow](https://stackoverflow.com/questions/23659909/reverse-evalu | |||
627 | 767 | ||
628 | ### UTF-8 | 768 | ### UTF-8 |
629 | 769 | ||
630 | (set-language-environment 'utf-8) | 770 | (set-language-environment "UTF-8") |
631 | (set-terminal-coding-system 'utf-8) | 771 | (set-terminal-coding-system 'utf-8) |
632 | (cuss locale-coding-system 'utf-8) | 772 | (cuss locale-coding-system 'utf-8) |
633 | (set-default-coding-systems 'utf-8) | 773 | (set-default-coding-systems 'utf-8) |
@@ -785,6 +925,14 @@ I add it to the `find-file-hook` *and* `before-save-hook` because I don't want t | |||
785 | :mode "\\.fnl\\'") | 925 | :mode "\\.fnl\\'") |
786 | 926 | ||
787 | 927 | ||
928 | ### Emacs lisp | ||
929 | |||
930 | (cuss eval-expression-print-length nil | ||
931 | "Don't truncate printed expressions by length.") | ||
932 | (cuss eval-expression-print-level nil | ||
933 | "Don't truncate printed expressions by level.") | ||
934 | |||
935 | |||
788 | # Writing | 936 | # Writing |
789 | 937 | ||
790 | 938 | ||
@@ -846,6 +994,8 @@ I’ve put org mode under Applications, as opposed to Writing, because it’s m | |||
846 | (org-pretty-entities t) | 994 | (org-pretty-entities t) |
847 | (org-num-mode +1) | 995 | (org-num-mode +1) |
848 | 996 | ||
997 | (cuss org-directory "~/Org") | ||
998 | |||
849 | (org-src-tab-acts-natively t) | 999 | (org-src-tab-acts-natively t) |
850 | (org-src-fontify-natively t) | 1000 | (org-src-fontify-natively t) |
851 | (org-src-window-setup 'current-window) | 1001 | (org-src-window-setup 'current-window) |
@@ -856,6 +1006,15 @@ I’ve put org mode under Applications, as opposed to Writing, because it’s m | |||
856 | (require 'ox-md)) | 1006 | (require 'ox-md)) |
857 | 1007 | ||
858 | 1008 | ||
1009 | ### Org Agenda | ||
1010 | |||
1011 | (cuss org-agenda-files (no-littering-expand-etc-file-name "agenda-files")) | ||
1012 | |||
1013 | (if (and (stringp org-agenda-files) | ||
1014 | (not (file-exists-p org-agenda-files))) | ||
1015 | (with-temp-buffer (write-file org-agenda-files))) | ||
1016 | |||
1017 | |||
859 | ### Make bullets look like bullets | 1018 | ### Make bullets look like bullets |
860 | 1019 | ||
861 | (font-lock-add-keywords | 1020 | (font-lock-add-keywords |
@@ -1163,7 +1322,13 @@ from [karthinks](https://karthinks.com/software/more-batteries-included-with-ema | |||
1163 | 1322 | ||
1164 | ;; init.el -*- lexical-binding: t -*- | 1323 | ;; init.el -*- lexical-binding: t -*- |
1165 | 1324 | ||
1166 | 1. Load config | 1325 | 1. Speed up init |
1326 | |||
1327 | (setq gc-cons-threshold most-positive-fixnum) | ||
1328 | (defvar old-file-name-handler file-name-handler-alist) | ||
1329 | (setq file-name-handler-alist nil) | ||
1330 | |||
1331 | 2. Load config | ||
1167 | 1332 | ||
1168 | inspired by [Protesilaos Stavrou](https://protesilaos.com/dotemacs/#h:584c3604-55a1-49d0-9c31-abe46cb1f028). | 1333 | inspired by [Protesilaos Stavrou](https://protesilaos.com/dotemacs/#h:584c3604-55a1-49d0-9c31-abe46cb1f028). |
1169 | 1334 | ||
@@ -1176,6 +1341,12 @@ from [karthinks](https://karthinks.com/software/more-batteries-included-with-ema | |||
1176 | (require 'org) | 1341 | (require 'org) |
1177 | (org-babel-load-file conf-org))) | 1342 | (org-babel-load-file conf-org))) |
1178 | 1343 | ||
1344 | 3. Reset for normal operation | ||
1345 | |||
1346 | (setq gc-cons-threshold 16777216 ; 16mb | ||
1347 | gc-cons-percentage 0.1 | ||
1348 | file-name-handler-alist old-file-name-handler) | ||
1349 | |||
1179 | 1350 | ||
1180 | ### early-init.el | 1351 | ### early-init.el |
1181 | 1352 | ||
diff --git a/config.org b/config.org index b1c138b..c0ecb10 100644 --- a/config.org +++ b/config.org | |||
@@ -4,7 +4,7 @@ | |||
4 | #+EXPORT_FILE_NAME: README.md | 4 | #+EXPORT_FILE_NAME: README.md |
5 | #+OPTIONS: toc:nil | 5 | #+OPTIONS: toc:nil |
6 | #+BANKRUPTCY_COUNT: 3 | 6 | #+BANKRUPTCY_COUNT: 3 |
7 | #+Time-stamp: <2020-12-16 20:14:19 acdw> | 7 | #+Time-stamp: <2020-12-21 17:20:22 aduckworth> |
8 | 8 | ||
9 | Let’s configure Emacs using Org mode, they said. It’ll be fun, they said. | 9 | Let’s configure Emacs using Org mode, they said. It’ll be fun, they said. |
10 | 10 | ||
diff --git a/init.el b/init.el index 71d8816..fadf705 100644 --- a/init.el +++ b/init.el | |||
@@ -1,5 +1,9 @@ | |||
1 | ;; init.el -*- lexical-binding: t -*- | 1 | ;; init.el -*- lexical-binding: t -*- |
2 | 2 | ||
3 | (setq gc-cons-threshold most-positive-fixnum) | ||
4 | (defvar old-file-name-handler file-name-handler-alist) | ||
5 | (setq file-name-handler-alist nil) | ||
6 | |||
3 | (let* ((conf (expand-file-name "config" | 7 | (let* ((conf (expand-file-name "config" |
4 | user-emacs-directory)) | 8 | user-emacs-directory)) |
5 | (conf-el (concat conf ".el")) | 9 | (conf-el (concat conf ".el")) |
@@ -8,3 +12,7 @@ | |||
8 | (load conf 'no-error)) | 12 | (load conf 'no-error)) |
9 | (require 'org) | 13 | (require 'org) |
10 | (org-babel-load-file conf-org))) | 14 | (org-babel-load-file conf-org))) |
15 | |||
16 | (setq gc-cons-threshold 16777216 ; 16mb | ||
17 | gc-cons-percentage 0.1 | ||
18 | file-name-handler-alist old-file-name-handler) | ||