blob: 0a340325a9bfb8600f25536fd22124c0aa5915bc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
;;; mm-abbrev.el --- Emacs abbreviations and templates -*- lexical-binding: t; -*-
;;; Helpers
(defmacro mm-define-abbreviations (table &rest definitions)
"Define abbrevations for an abbreviation TABLE.
Expand abbrev DEFINITIONS for the given TABLE. DEFINITIONS are a
sequence of either string pairs mapping an abbreviation to its
expansion, or a string and symbol pair mapping an abbreviation to a
function."
(declare (indent 1))
(unless (cl-evenp (length definitions))
(user-error "expected an even-number of elements in DEFINITIONS"))
(macroexp-progn
(cl-loop for (abbrev expansion) in (seq-partition definitions 2)
if (stringp expansion)
collect (list #'define-abbrev table abbrev expansion)
else
collect (list #'define-abbrev table abbrev "" expansion))))
^L
;;; Abbreviation Configuration
(use-package abbrev
:init
(setq-default abbrev-mode t)
:custom
(abbrev-file-name (expand-file-name "abbev-defs" mm-data-directory))
(save-abbrevs 'silently))
^L
;;; Abbreviation Definitions
(defvar mm-c-mode-abbrev-table (make-abbrev-table)
"Abbreviations shared between `c-mode', `c++-mode', `c-ts-mode', and
`c++-ts-mode'.")
(mm-define-abbreviations mm-c-mode-abbrev-table
"flf" "flockfile"
"fpf" "fprintf"
"fuf" "funlockfile"
"pf" "printf"
"se" "stderr"
"si" "stdin"
"so" "stdout")
(with-eval-after-load 'cc-mode
(setq c-mode-abbrev-table (copy-abbrev-table mm-c-mode-abbrev-table)
c++-mode-abbrev-table (copy-abbrev-table mm-c-mode-abbrev-table)))
(with-eval-after-load 'c-ts-mode
(setq c-ts-mode-abbrev-table (copy-abbrev-table mm-c-mode-abbrev-table)
c++-ts-mode-abbrev-table (copy-abbrev-table mm-c-mode-abbrev-table)))
(mm-define-abbreviations emacs-lisp-mode-abbrev-table
"ald" ";;;###autoload"
"gc" "goto-char"
"ins" "insert"
"itv" "interactive"
"mtb" "match-beginning"
"mte" "match-end"
"nrt" "narrow-to-region"
"pmn" "point-min"
"pmx" "point-max"
"pnt" "point"
"rap" "region-active-p"
"rb" "region-beginning"
"re" "region-end"
"rsb" "re-search-backward"
"rsf" "re-search-forward"
"se" "save-excursion"
"sme" "save-mark-and-excursion"
"sr" "save-restriction")
^L
;;; Template Configuration
(use-package tempel
:ensure t
:demand t
:pin gnu
:bind (:map tempel-map
("TAB" . tempel-next)
("S-TAB" . tempel-previous))
:custom
(tempel-trigger-prefix ",")
:init
(setopt tempel-path (expand-file-name "templates" mm-config-directory))
(add-hook 'completion-at-point-functions #'tempel-complete -10)
(add-to-list 'auto-mode-alist (cons tempel-path #'lisp-data-mode)))
(provide 'mm-abbrev)
|