Blame


1 472975b7 2022-04-06 op ;; get rid of custom from my init file
2 472975b7 2022-04-06 op (setq custom-file "~/.emacs.d/emacs-custom.el")
3 472975b7 2022-04-06 op (load custom-file)
4 2ed883bd 2022-05-23 op
5 2ed883bd 2022-05-23 op (setq-default abbrev-mode t)
6 2ed883bd 2022-05-23 op (setq abbrev-file-name
7 2ed883bd 2022-05-23 op (expand-file-name "~/dotsnew/emacs/abbrev_defs"))
8 472975b7 2022-04-06 op
9 678b3cb3 2022-03-16 op (defconst op/backup-dir
10 678b3cb3 2022-03-16 op (expand-file-name "backups" user-emacs-directory))
11 678b3cb3 2022-03-16 op (unless (file-exists-p op/backup-dir)
12 678b3cb3 2022-03-16 op (make-directory op/backup-dir))
13 678b3cb3 2022-03-16 op (setq backup-directory-alist `(("." . ,op/backup-dir)))
14 678b3cb3 2022-03-16 op
15 678b3cb3 2022-03-16 op (setq use-dialog-box nil
16 678b3cb3 2022-03-16 op x-stretch-cursor t
17 678b3cb3 2022-03-16 op require-final-newline t
18 678b3cb3 2022-03-16 op visible-bell nil
19 678b3cb3 2022-03-16 op load-prefer-newer t
20 678b3cb3 2022-03-16 op tab-bar-show 1
21 678b3cb3 2022-03-16 op enable-recursive-minibuffers t
22 4b9538ff 2022-04-06 op imenu-auto-rescan 1
23 26a80648 2022-04-06 op use-short-answers t
24 26a80648 2022-04-06 op next-error-message-highlight t
25 1e970624 2022-04-06 op read-minibuffer-restore-windows nil
26 d55310b3 2022-04-06 op isearch-allow-motion t
27 c4b35be5 2022-05-09 op calc-make-windows-dedicated t
28 c4b35be5 2022-05-09 op user-mail-address "op@omarpolo.com")
29 678b3cb3 2022-03-16 op
30 f58f7684 2022-10-03 op ;; I don't like how compile uses `make -k' by default, I want to stop
31 f58f7684 2022-10-03 op ;; on errors / warnings.
32 f58f7684 2022-10-03 op (setq compile-command "make")
33 678b3cb3 2022-03-16 op
34 946915d0 2022-06-25 op ;; "diff refinement", i.e. highlighting the changes in a more granular
35 946915d0 2022-06-25 op ;; way, is quite awful to have it enabled by default. sometimes is
36 946915d0 2022-06-25 op ;; useful, but for me it's more of a visual noise most of the times.
37 946915d0 2022-06-25 op (setq diff-refine nil)
38 946915d0 2022-06-25 op
39 ab6c641f 2022-06-25 op ;; disable also the syntax highlighting in the diff buffers
40 ab6c641f 2022-06-25 op (setq diff-font-lock-syntax nil)
41 ab6c641f 2022-06-25 op
42 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-x C-b") #'ibuffer)
43 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-g i") #'imenu)
44 678b3cb3 2022-03-16 op
45 472975b7 2022-04-06 op (defun op/imenu ()
46 472975b7 2022-04-06 op "Just like `imenu', but always flattened!"
47 472975b7 2022-04-06 op (interactive ))
48 472975b7 2022-04-06 op
49 678b3cb3 2022-03-16 op ;; mg-like
50 678b3cb3 2022-03-16 op (define-key minibuffer-mode-map (kbd "C-w") #'backward-kill-word)
51 678b3cb3 2022-03-16 op
52 5f53e4b3 2023-02-16 op ;; niceties for the standard completion
53 5c55f69d 2023-03-07 op (setq tab-always-indent 'complete
54 5c55f69d 2023-03-07 op completion-ignore-case t
55 7ef64497 2023-03-07 op read-file-name-completion-ignore-case t
56 7ef64497 2023-03-07 op read-buffer-completion-ignore-case t
57 7ef64497 2023-03-07 op completion-auto-help 'always
58 5f53e4b3 2023-02-16 op completion-auto-select 'second-tab
59 5f53e4b3 2023-02-16 op completions-max-height 10
60 5f53e4b3 2023-02-16 op completions-format 'horizontal
61 5f53e4b3 2023-02-16 op completions-header-format ""
62 5f53e4b3 2023-02-16 op completion-show-help nil)
63 5f53e4b3 2023-02-16 op
64 5f53e4b3 2023-02-16 op (define-key minibuffer-local-map (kbd "C-p") #'minibuffer-previous-completion)
65 5f53e4b3 2023-02-16 op (define-key minibuffer-local-map (kbd "C-n") #'minibuffer-next-completion)
66 5f53e4b3 2023-02-16 op
67 5f53e4b3 2023-02-16 op (define-key completion-in-region-mode-map (kbd "C-p")
68 5f53e4b3 2023-02-16 op #'minibuffer-previous-completion)
69 5f53e4b3 2023-02-16 op (define-key completion-in-region-mode-map (kbd "C-n")
70 5f53e4b3 2023-02-16 op #'minibuffer-next-completion)
71 5f53e4b3 2023-02-16 op
72 cf1734b8 2023-03-07 op (define-key completion-in-region-mode-map (kbd "RET")
73 5f53e4b3 2023-02-16 op #'minibuffer-choose-completion)
74 5f53e4b3 2023-02-16 op
75 71c456de 2022-03-30 op (defun op/reverse-other-window ()
76 71c456de 2022-03-30 op "Like `other-window', but reverse."
77 71c456de 2022-03-30 op (interactive "")
78 71c456de 2022-03-30 op (other-window -1))
79 71c456de 2022-03-30 op (define-key global-map (kbd "C-x O") #'op/reverse-other-window)
80 e7cd710f 2022-05-30 op
81 e7cd710f 2022-05-30 op (define-key global-map (kbd "C-x v f") #'vc-pull)
82 71c456de 2022-03-30 op
83 678b3cb3 2022-03-16 op (setq uniquify-buffer-name-style 'forward
84 678b3cb3 2022-03-16 op uniquify-strip-common-suffix t)
85 678b3cb3 2022-03-16 op
86 678b3cb3 2022-03-16 op (setq-default scroll-up-aggressively 0.0
87 678b3cb3 2022-03-16 op scroll-down-aggressively 0.0
88 678b3cb3 2022-03-16 op scroll-preserve-screen-position t
89 678b3cb3 2022-03-16 op next-screen-context-lines 1)
90 678b3cb3 2022-03-16 op
91 1a6ca6a0 2022-12-26 op (define-key global-map (kbd "M-Z") #'zap-up-to-char)
92 678b3cb3 2022-03-16 op
93 678b3cb3 2022-03-16 op (require 'whitespace)
94 678b3cb3 2022-03-16 op (setq whitespace-style '(face trailing)
95 678b3cb3 2022-03-16 op backward-delete-char-untabify-method 'hungry
96 678b3cb3 2022-03-16 op tab-width 8
97 678b3cb3 2022-03-16 op sentence-end-double-space t)
98 678b3cb3 2022-03-16 op (setq-default indent-tabs-mode t)
99 678b3cb3 2022-03-16 op
100 678b3cb3 2022-03-16 op (defun op/enable-tabs ()
101 678b3cb3 2022-03-16 op "Enable `indent-tabs-mode' in the current buffer."
102 678b3cb3 2022-03-16 op (interactive)
103 678b3cb3 2022-03-16 op (setq-local indent-tabs-mode t))
104 678b3cb3 2022-03-16 op
105 678b3cb3 2022-03-16 op (defun op/disable-tabs ()
106 678b3cb3 2022-03-16 op "Disable `indent-tabs-mode' in the current buffer."
107 678b3cb3 2022-03-16 op (interactive)
108 678b3cb3 2022-03-16 op (setq-local indent-tabs-mode nil))
109 678b3cb3 2022-03-16 op
110 678b3cb3 2022-03-16 op (add-hook 'conf-mode-hook #'op/enable-tabs)
111 678b3cb3 2022-03-16 op (add-hook 'text-mode-hook #'op/enable-tabs)
112 678b3cb3 2022-03-16 op (add-hook 'prog-mode-hook #'op/enable-tabs)
113 678b3cb3 2022-03-16 op (add-hook 'prog-mode-hook #'whitespace-mode)
114 678b3cb3 2022-03-16 op (add-hook 'text-mode-hook #'whitespace-mode)
115 678b3cb3 2022-03-16 op
116 23efdfd9 2022-03-17 op (dolist (hook '(emacs-lisp-mode-hook
117 1d60e75f 2024-03-05 op js-mode-hook
118 23efdfd9 2022-03-17 op clojure-mode-hook
119 23efdfd9 2022-03-17 op clojurescript-mode-hook
120 23efdfd9 2022-03-17 op clojurec-mode-hook
121 23efdfd9 2022-03-17 op scss-mode-hook))
122 23efdfd9 2022-03-17 op (add-hook hook #'op/disable-tabs))
123 23efdfd9 2022-03-17 op
124 678b3cb3 2022-03-16 op (with-eval-after-load 'log-edit
125 678b3cb3 2022-03-16 op (add-hook 'log-edit-mode #'auto-fill-mode))
126 678b3cb3 2022-03-16 op
127 678b3cb3 2022-03-16 op ;; free the c-z binding
128 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-z") nil)
129 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-z V") #'variable-pitch-mode)
130 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-z n") #'display-line-numbers-mode)
131 678b3cb3 2022-03-16 op
132 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-SPC") #'cycle-spacing)
133 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-u") #'upcase-dwim)
134 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-l") #'downcase-dwim)
135 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-c") #'capitalize-dwim)
136 678b3cb3 2022-03-16 op
137 2122150a 2023-02-19 op (let ((font
138 2122150a 2023-02-19 op ;; "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1"
139 1d60e75f 2024-03-05 op "Spleen"
140 2122150a 2023-02-19 op ))
141 678b3cb3 2022-03-16 op (set-frame-font font nil t)
142 678b3cb3 2022-03-16 op (add-to-list 'default-frame-alist `(font . ,font)))
143 472975b7 2022-04-06 op
144 472975b7 2022-04-06 op ;; fix the emojis too
145 472975b7 2022-04-06 op (set-fontset-font t 'emoji '("Noto Emoji" . "iso10646-1")
146 472975b7 2022-04-06 op nil 'prepend)
147 678b3cb3 2022-03-16 op
148 678b3cb3 2022-03-16 op ;; some cool stuff
149 678b3cb3 2022-03-16 op (save-place-mode +1)
150 1d60e75f 2024-03-05 op ;(savehist-mode +1)
151 678b3cb3 2022-03-16 op (setq history-delete-duplicates t
152 678b3cb3 2022-03-16 op history-length 1000
153 678b3cb3 2022-03-16 op savehist-save-minibuffer-history t)
154 678b3cb3 2022-03-16 op (electric-pair-mode +1)
155 678b3cb3 2022-03-16 op
156 678b3cb3 2022-03-16 op (define-key global-map (kbd "M-/") #'hippie-expand)
157 678b3cb3 2022-03-16 op (setq hippie-expand-try-functions-list
158 678b3cb3 2022-03-16 op '(try-expand-dabbrev
159 678b3cb3 2022-03-16 op try-expand-dabbrev-all-buffers
160 678b3cb3 2022-03-16 op try-expand-dabbrev-from-kill
161 678b3cb3 2022-03-16 op try-complete-file-name-partially
162 678b3cb3 2022-03-16 op try-complete-file-name
163 678b3cb3 2022-03-16 op try-expand-all-abbrevs
164 678b3cb3 2022-03-16 op try-expand-list
165 678b3cb3 2022-03-16 op try-expand-line
166 678b3cb3 2022-03-16 op try-complete-lisp-symbol-partially
167 678b3cb3 2022-03-16 op try-complete-lisp-symbol))
168 678b3cb3 2022-03-16 op
169 678b3cb3 2022-03-16 op (setq isearch-lazy-count t
170 678b3cb3 2022-03-16 op search-whitespace-regexp ".*?"
171 678b3cb3 2022-03-16 op isearch-allow-scroll 'unlimited)
172 678b3cb3 2022-03-16 op
173 678b3cb3 2022-03-16 op (defun op/buffer-to-side-window (place)
174 678b3cb3 2022-03-16 op "Place the current buffer in the side window at PLACE."
175 678b3cb3 2022-03-16 op (interactive (list (intern
176 678b3cb3 2022-03-16 op (completing-read "Which side: "
177 678b3cb3 2022-03-16 op '(top left right bottom)))))
178 678b3cb3 2022-03-16 op (let ((buf (current-buffer)))
179 678b3cb3 2022-03-16 op (display-buffer-in-side-window
180 678b3cb3 2022-03-16 op buf `((window-height . 0.15)
181 678b3cb3 2022-03-16 op (side . ,place)
182 678b3cb3 2022-03-16 op (slot . -1)
183 678b3cb3 2022-03-16 op (window-parameters . ((no-delete-other-windows . t)))))
184 678b3cb3 2022-03-16 op (delete-window)))
185 93201a02 2022-04-01 op
186 93201a02 2022-04-01 op (defun op/visit-new-migration-file (name)
187 93201a02 2022-04-01 op "Visit a new SQL migration file named after NAME."
188 93201a02 2022-04-01 op (interactive "Mname: ")
189 93201a02 2022-04-01 op (let* ((name (replace-regexp-in-string " " "-" (string-trim name)))
190 93201a02 2022-04-01 op (f (format "%s-%s.sql"
191 93201a02 2022-04-01 op (format-time-string "%Y%m%d%H%M")
192 93201a02 2022-04-01 op name)))
193 93201a02 2022-04-01 op (find-file f)))
194 678b3cb3 2022-03-16 op
195 678b3cb3 2022-03-16 op (defun op/fill-or-unfill (fn &optional justify region)
196 678b3cb3 2022-03-16 op "Meant to be an adviced :around `fill-paragraph'.
197 678b3cb3 2022-03-16 op FN is the original `fill-column'. If `last-command' is
198 678b3cb3 2022-03-16 op `fill-paragraph', unfill it, fill it otherwise. Inspired from a
199 678b3cb3 2022-03-16 op post on endless parentheses. Optional argument JUSTIFY and
200 678b3cb3 2022-03-16 op REGION are passed to `fill-paragraph'."
201 678b3cb3 2022-03-16 op (let ((fill-column
202 678b3cb3 2022-03-16 op (if (eq last-command 'fill-paragraph)
203 678b3cb3 2022-03-16 op (progn (setq this-command nil)
204 678b3cb3 2022-03-16 op (point-max))
205 678b3cb3 2022-03-16 op fill-column)))
206 678b3cb3 2022-03-16 op (funcall fn justify region)))
207 678b3cb3 2022-03-16 op (advice-add 'fill-paragraph :around #'op/fill-or-unfill)
208 678b3cb3 2022-03-16 op
209 678b3cb3 2022-03-16 op (defmacro op/deftranspose (name scope key doc)
210 678b3cb3 2022-03-16 op "Macro to produce transposition functions.
211 f5b2dd3a 2023-02-19 op NAME is the function's symbol. SCOPE is the text object to
212 f5b2dd3a 2023-02-19 op operate on. Optional DOC is the function's docstring.
213 678b3cb3 2022-03-16 op
214 f5b2dd3a 2023-02-19 op Transposition over an active region will swap the object at
215 f5b2dd3a 2023-02-19 op mark (region beginning) with the one at point (region end).
216 f5b2dd3a 2023-02-19 op
217 f5b2dd3a 2023-02-19 op It can optionally define a key for the defined function in the
218 f5b2dd3a 2023-02-19 op `global-map' if KEY is passed.
219 678b3cb3 2022-03-16 op
220 f5b2dd3a 2023-02-19 op Originally from protesilaos' dotemacs."
221 678b3cb3 2022-03-16 op (declare (indent defun))
222 678b3cb3 2022-03-16 op `(progn
223 678b3cb3 2022-03-16 op (defun ,name (arg)
224 678b3cb3 2022-03-16 op ,doc
225 678b3cb3 2022-03-16 op (interactive "p")
226 678b3cb3 2022-03-16 op (let ((x (intern (format "transpose-%s" ,scope))))
227 678b3cb3 2022-03-16 op (if (use-region-p)
228 678b3cb3 2022-03-16 op (funcall x 0)
229 678b3cb3 2022-03-16 op (funcall x arg))))
230 678b3cb3 2022-03-16 op ,(when key
231 678b3cb3 2022-03-16 op `(define-key global-map (kbd ,key) #',name))))
232 678b3cb3 2022-03-16 op
233 678b3cb3 2022-03-16 op (op/deftranspose op/transpose-lines "lines" "C-x C-t"
234 678b3cb3 2022-03-16 op "Transpose lines or swap over active region.")
235 678b3cb3 2022-03-16 op
236 678b3cb3 2022-03-16 op (op/deftranspose op/transpose-paragraphs "paragraphs" "C-S-t"
237 678b3cb3 2022-03-16 op "Transpose paragraph or swap over active region.")
238 678b3cb3 2022-03-16 op
239 678b3cb3 2022-03-16 op (op/deftranspose op/transpose-sentences "sentences" "C-x M-t"
240 678b3cb3 2022-03-16 op "Transpose sentences or swap over active region.")
241 678b3cb3 2022-03-16 op
242 678b3cb3 2022-03-16 op (op/deftranspose op/transpose-sexps "sexps" "C-M-t"
243 678b3cb3 2022-03-16 op "Transpose sexps or swap over active region.")
244 678b3cb3 2022-03-16 op
245 678b3cb3 2022-03-16 op (op/deftranspose op/transpose-words "words" "M-t"
246 678b3cb3 2022-03-16 op "Transpose words or swap over active region.")
247 678b3cb3 2022-03-16 op
248 678b3cb3 2022-03-16 op (defun op/narrow-or-widen-dwim (p)
249 678b3cb3 2022-03-16 op "Widen if the buffer is narrowed, narrow-dwim otherwise.
250 707f1781 2022-05-23 op Dwim means: region, org-src-block, org-subtree or defun,
251 707f1781 2022-05-23 op whichever applies first. Narrowing to org-src-blocks actually
252 707f1781 2022-05-23 op calls `org-edit-src-code'.
253 678b3cb3 2022-03-16 op
254 707f1781 2022-05-23 op With prefix P, don't widen, just narrow even if buffer is already
255 707f1781 2022-05-23 op narrowed. With P being -, narrow to page instead of to defun.
256 707f1781 2022-05-23 op
257 707f1781 2022-05-23 op Taken from endless parentheses."
258 678b3cb3 2022-03-16 op (interactive "P")
259 678b3cb3 2022-03-16 op (declare (interactive-only))
260 678b3cb3 2022-03-16 op (cond ((and (buffer-narrowed-p) (not p)) (widen))
261 678b3cb3 2022-03-16 op ((region-active-p)
262 678b3cb3 2022-03-16 op (narrow-to-region (region-beginning)
263 678b3cb3 2022-03-16 op (region-end)))
264 678b3cb3 2022-03-16 op ((derived-mode-p 'org-mode)
265 678b3cb3 2022-03-16 op ;; `org-edit-src-code' isn't a real narrowing
266 678b3cb3 2022-03-16 op (cond ((ignore-errors (org-edit-src-code) t))
267 678b3cb3 2022-03-16 op ((ignore-errors (org-narrow-to-block) t))
268 678b3cb3 2022-03-16 op (t (org-narrow-to-subtree))))
269 678b3cb3 2022-03-16 op ((eql p '-) (narrow-to-page))
270 678b3cb3 2022-03-16 op (t (narrow-to-defun))))
271 678b3cb3 2022-03-16 op
272 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-c w") #'op/narrow-or-widen-dwim)
273 678b3cb3 2022-03-16 op
274 678b3cb3 2022-03-16 op (with-eval-after-load 'dired
275 678b3cb3 2022-03-16 op (add-hook 'dired-mode-hook #'dired-hide-details-mode)
276 678b3cb3 2022-03-16 op (add-hook 'dired-mode-hook #'dired-omit-mode)
277 678b3cb3 2022-03-16 op
278 678b3cb3 2022-03-16 op (define-key dired-mode-map (kbd "C-c w") #'wdired-change-to-wdired-mode)
279 678b3cb3 2022-03-16 op
280 678b3cb3 2022-03-16 op (require 'dired-x)
281 678b3cb3 2022-03-16 op (setq dired-listing-switches "-lahF"
282 678b3cb3 2022-03-16 op dired-dwim-target t
283 3bc75ece 2022-04-06 op dired-deletion-confirmer #'y-or-n-p
284 c4b35be5 2022-05-09 op dired-do-revert-buffer t))
285 678b3cb3 2022-03-16 op
286 678b3cb3 2022-03-16 op ;; just like telescope!
287 678b3cb3 2022-03-16 op (with-eval-after-load 'diff-mode
288 678b3cb3 2022-03-16 op (define-key diff-mode-map (kbd "M-SPC") #'scroll-down-command))
289 678b3cb3 2022-03-16 op
290 678b3cb3 2022-03-16 op (with-eval-after-load 'elisp-mode
291 678b3cb3 2022-03-16 op (add-hook 'emacs-lisp-mode-hook #'checkdoc-minor-mode)
292 678b3cb3 2022-03-16 op (add-hook 'emacs-lisp-mode-hook #'prettify-symbols-mode)
293 678b3cb3 2022-03-16 op (let ((map emacs-lisp-mode-map))
294 678b3cb3 2022-03-16 op (define-key map (kbd "C-c C-k") #'eval-buffer)
295 678b3cb3 2022-03-16 op (define-key map (kbd "C-c k") #'op/ert-all)
296 678b3cb3 2022-03-16 op (define-key map (kbd "C-c C-z") #'op/ielm-repl)))
297 678b3cb3 2022-03-16 op
298 678b3cb3 2022-03-16 op (with-eval-after-load 'help
299 678b3cb3 2022-03-16 op (add-hook 'help-mode-hook #'visual-line-mode))
300 678b3cb3 2022-03-16 op
301 678b3cb3 2022-03-16 op ;; add melpa
302 678b3cb3 2022-03-16 op (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
303 678b3cb3 2022-03-16 op
304 678b3cb3 2022-03-16 op ;; packages that i want to be installed
305 5f53e4b3 2023-02-16 op (dolist (pkg '(vc-got eglot sly cider go-mode web-mode lua-mode
306 5f53e4b3 2023-02-16 op markdown-mode yaml-mode gemini-mode
307 1d60e75f 2024-03-05 op form-feed shackle puni orderless
308 1d60e75f 2024-03-05 op rotate vc-fossil flimenu howm))
309 678b3cb3 2022-03-16 op (unless (package-installed-p pkg)
310 678b3cb3 2022-03-16 op (message "Installing %s" pkg)
311 678b3cb3 2022-03-16 op (package-install pkg)))
312 678b3cb3 2022-03-16 op
313 678b3cb3 2022-03-16 op (global-form-feed-mode +1)
314 1d60e75f 2024-03-05 op (flimenu-global-mode +1)
315 678b3cb3 2022-03-16 op
316 23efdfd9 2022-03-17 op (add-hook 'text-mode-hook #'puni-mode)
317 23efdfd9 2022-03-17 op (add-hook 'prog-mode-hook #'puni-mode)
318 23efdfd9 2022-03-17 op (define-key puni-mode-map (kbd "C-)") #'puni-slurp-forward)
319 23efdfd9 2022-03-17 op (define-key puni-mode-map (kbd "C-(") #'puni-barf-forward)
320 23efdfd9 2022-03-17 op
321 5f53e4b3 2023-02-16 op ;;(setq completion-styles '(basic substring initials flex partial-completion))
322 5f53e4b3 2023-02-16 op (setq completion-styles '(orderless basic)
323 5f53e4b3 2023-02-16 op completion-category-overrides '((file (styles basic partial-completion))))
324 472975b7 2022-04-06 op
325 74647cc8 2022-04-06 op (setq completions-detailed t)
326 93201a02 2022-04-01 op
327 6da4f140 2022-05-24 op (with-eval-after-load 'cider
328 6da4f140 2022-05-24 op (define-key cider-repl-mode-map (kbd "C-c M-o") #'cider-repl-clear-buffer))
329 6da4f140 2022-05-24 op
330 23efdfd9 2022-03-17 op (with-eval-after-load 'go-mode
331 23efdfd9 2022-03-17 op (add-hook 'go-mode-hook #'subword-mode))
332 23efdfd9 2022-03-17 op
333 fa0fad04 2023-03-07 op (with-eval-after-load 'tcl
334 fa0fad04 2023-03-07 op (setq-default tcl-indent-level 8))
335 fa0fad04 2023-03-07 op
336 678b3cb3 2022-03-16 op (with-eval-after-load 'eglot
337 678b3cb3 2022-03-16 op (define-key eglot-mode-map (kbd "<f1>") #'eglot-code-actions)
338 678b3cb3 2022-03-16 op (define-key eglot-mode-map (kbd "<f2>") #'eglot-format)
339 678b3cb3 2022-03-16 op (add-to-list 'eglot-ignored-server-capabilites
340 678b3cb3 2022-03-16 op :documentHighlightProvider)
341 678b3cb3 2022-03-16 op (add-to-list 'eglot-server-programs
342 678b3cb3 2022-03-16 op '(c-mode . ("clangd" "--header-insertion=never"))))
343 678b3cb3 2022-03-16 op
344 39b78340 2022-04-01 op (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
345 678b3cb3 2022-03-16 op (with-eval-after-load 'web-mode
346 678b3cb3 2022-03-16 op (setq web-mode-markup-indent-offset 2
347 678b3cb3 2022-03-16 op web-mode-css-indent-offset 2
348 678b3cb3 2022-03-16 op web-mode-style-padding 0
349 678b3cb3 2022-03-16 op web-mode-enable-engine-detection t)
350 39b78340 2022-04-01 op (add-hook 'web-mode-hook #'op/disable-tabs)
351 678b3cb3 2022-03-16 op
352 39b78340 2022-04-01 op ;; fix .dir-locals.el
353 39b78340 2022-04-01 op (defun op/web-mode-fix-dir-locals ()
354 39b78340 2022-04-01 op (when (derived-mode-p major-mode 'web-mode)
355 39b78340 2022-04-01 op (web-mode-guess-engine-and-content-type)))
356 c18317da 2022-10-03 op (add-hook 'hack-local-variables-hook #'op/web-mode-fix-dir-locals)
357 c18317da 2022-10-03 op
358 c18317da 2022-10-03 op (setq web-mode-enable-auto-pairing nil))
359 39b78340 2022-04-01 op
360 678b3cb3 2022-03-16 op (with-eval-after-load 'css-mode
361 678b3cb3 2022-03-16 op (add-hook 'css-mode-hook #'op/disable-tabs))
362 c48a945e 2022-03-30 op
363 c48a945e 2022-03-30 op (with-eval-after-load 'flymake
364 c48a945e 2022-03-30 op (define-key prog-mode-map (kbd "C-c ! n") #'flymake-goto-next-error)
365 c48a945e 2022-03-30 op (define-key prog-mode-map (kbd "C-c ! p") #'flymake-goto-prev-error))
366 678b3cb3 2022-03-16 op
367 678b3cb3 2022-03-16 op (with-eval-after-load 'cc-mode
368 678b3cb3 2022-03-16 op (setq c-basic-offset 8
369 71c456de 2022-03-30 op c-default-style "K&R")
370 678b3cb3 2022-03-16 op (dolist (hook '(c-mode-hook c++-mode-hook))
371 678b3cb3 2022-03-16 op (add-hook hook #'abbrev-mode)
372 678b3cb3 2022-03-16 op (add-hook hook #'subword-mode))
373 71c456de 2022-03-30 op (defun op/c-indent ()
374 71c456de 2022-03-30 op (interactive)
375 71c456de 2022-03-30 op (c-set-offset 'arglist-intro '+)
376 4bbfbbe5 2022-12-19 op (c-set-offset 'arglist-cont-nonempty '*)
377 4bbfbbe5 2022-12-19 op (c-set-offset 'label 1))
378 71c456de 2022-03-30 op (add-hook 'c-mode-hook #'op/c-indent)
379 678b3cb3 2022-03-16 op ;; TODO: improve it!
380 678b3cb3 2022-03-16 op (defun op/c-add-include (path &optional localp)
381 678b3cb3 2022-03-16 op "Include PATH at the start of the file.
382 678b3cb3 2022-03-16 op If LOCALP is non-nil, the include will be \"local\"."
383 678b3cb3 2022-03-16 op (interactive "Mheader to include: \nP")
384 678b3cb3 2022-03-16 op (save-excursion
385 678b3cb3 2022-03-16 op (let ((re (if localp
386 678b3cb3 2022-03-16 op "^#[ \t]*include[ \t]*\""
387 678b3cb3 2022-03-16 op "^#[ \t]*include[ \t]*<"))
388 678b3cb3 2022-03-16 op (ignore-re "^#include \"compat.h\"")
389 678b3cb3 2022-03-16 op start)
390 678b3cb3 2022-03-16 op (goto-char (point-min))
391 678b3cb3 2022-03-16 op (while (not (or (and (looking-at re)
392 678b3cb3 2022-03-16 op (not (looking-at ignore-re)))
393 678b3cb3 2022-03-16 op (eobp)))
394 678b3cb3 2022-03-16 op (forward-line))
395 678b3cb3 2022-03-16 op (when (eobp)
396 678b3cb3 2022-03-16 op (error "Don't know where to insert the header"))
397 678b3cb3 2022-03-16 op (open-line 1)
398 678b3cb3 2022-03-16 op (insert "#include " (if localp "\"\"" "<>"))
399 678b3cb3 2022-03-16 op (backward-char)
400 678b3cb3 2022-03-16 op (insert path)
401 678b3cb3 2022-03-16 op (move-beginning-of-line 1)
402 678b3cb3 2022-03-16 op (setq start (point))
403 678b3cb3 2022-03-16 op (forward-line)
404 678b3cb3 2022-03-16 op (while (and (looking-at re)
405 678b3cb3 2022-03-16 op (not (eobp)))
406 678b3cb3 2022-03-16 op (forward-line))
407 678b3cb3 2022-03-16 op (sort-lines nil start (point)))))
408 678b3cb3 2022-03-16 op (define-key c-mode-map (kbd "C-c C-a") #'op/c-add-include))
409 678b3cb3 2022-03-16 op
410 678b3cb3 2022-03-16 op (with-eval-after-load 'perl-mode
411 678b3cb3 2022-03-16 op (setq perl-indent-level 8))
412 678b3cb3 2022-03-16 op
413 678b3cb3 2022-03-16 op (with-eval-after-load 'sh-script
414 678b3cb3 2022-03-16 op (setq sh-basic-offset 8
415 678b3cb3 2022-03-16 op sh-indent-after-loop-construct 8
416 678b3cb3 2022-03-16 op sh-indent-after-continuation nil))
417 678b3cb3 2022-03-16 op
418 678b3cb3 2022-03-16 op
419 678b3cb3 2022-03-16 op
420 d55310b3 2022-04-06 op (setq eshell-hist-ignoredups t)
421 d55310b3 2022-04-06 op
422 678b3cb3 2022-03-16 op (defun op/eshell-bufname (dir)
423 678b3cb3 2022-03-16 op (concat "*eshell " (expand-file-name dir) "*"))
424 678b3cb3 2022-03-16 op
425 678b3cb3 2022-03-16 op (defun op/eshell (arg)
426 678b3cb3 2022-03-16 op "Run or jump to eshell in current project.
427 678b3cb3 2022-03-16 op If called with prefix argument ARG always create a new eshell
428 678b3cb3 2022-03-16 op buffer."
429 678b3cb3 2022-03-16 op (interactive "P")
430 678b3cb3 2022-03-16 op (let* ((proj (project-current))
431 678b3cb3 2022-03-16 op (dir (if (and proj (not arg))
432 678b3cb3 2022-03-16 op (project-root proj)
433 678b3cb3 2022-03-16 op default-directory))
434 678b3cb3 2022-03-16 op (default-directory dir)
435 678b3cb3 2022-03-16 op (eshell-buffer-name (let ((name (op/eshell-bufname dir)))
436 678b3cb3 2022-03-16 op (if arg
437 678b3cb3 2022-03-16 op (generate-new-buffer name)
438 678b3cb3 2022-03-16 op name))))
439 678b3cb3 2022-03-16 op (eshell)))
440 678b3cb3 2022-03-16 op (define-key global-map (kbd "C-c e") #'op/eshell)
441 678b3cb3 2022-03-16 op
442 678b3cb3 2022-03-16 op (with-eval-after-load 'eshell
443 678b3cb3 2022-03-16 op (setq eshell-save-history-on-exit t
444 678b3cb3 2022-03-16 op eshell-history-size 1024
445 678b3cb3 2022-03-16 op
446 678b3cb3 2022-03-16 op eshell-compl-dir-ignore
447 678b3cb3 2022-03-16 op "\\`\\(\\.\\.?\\|CVS\\|\\.svn\\|\\.git\\|\\.got\\)/\\'")
448 678b3cb3 2022-03-16 op
449 678b3cb3 2022-03-16 op (defun op/eshell-after-cd (&rest _)
450 678b3cb3 2022-03-16 op (rename-buffer (op/eshell-bufname default-directory) t))
451 678b3cb3 2022-03-16 op
452 c4b35be5 2022-05-09 op (advice-add #'eshell/cd :after #'op/eshell-after-cd))
453 678b3cb3 2022-03-16 op
454 c4b35be5 2022-05-09 op (with-eval-after-load 'esh-mode
455 678b3cb3 2022-03-16 op (defun op/clear-eshell ()
456 678b3cb3 2022-03-16 op (interactive "")
457 678b3cb3 2022-03-16 op (let ((inhibit-read-only t))
458 678b3cb3 2022-03-16 op (erase-buffer)
459 678b3cb3 2022-03-16 op (eshell-send-input)))
460 678b3cb3 2022-03-16 op
461 c4b35be5 2022-05-09 op (define-key eshell-command-map (kbd "M-o") #'op/clear-eshell))
462 678b3cb3 2022-03-16 op
463 678b3cb3 2022-03-16 op
464 678b3cb3 2022-03-16 op ;; sndio.el
465 678b3cb3 2022-03-16 op (unless (package-installed-p 'sndio)
466 678b3cb3 2022-03-16 op (package-install-file "~/w/sndio.el/sndio.el"))
467 678b3cb3 2022-03-16 op
468 678b3cb3 2022-03-16 op
469 678b3cb3 2022-03-16 op ;; saturn
470 678b3cb3 2022-03-16 op (unless (package-installed-p 'saturn)
471 678b3cb3 2022-03-16 op (package-install-file "~/w/saturn/GUI/saturn.el"))
472 678b3cb3 2022-03-16 op
473 678b3cb3 2022-03-16 op
474 f9fb86fa 2022-11-25 op ;; emacs-pq
475 f9fb86fa 2022-11-25 op (add-to-list 'load-path "~/build/emacs-libpq/")
476 f9fb86fa 2022-11-25 op (unless (package-installed-p 'pq)
477 f9fb86fa 2022-11-25 op (package-install-file "~/build/emacs-libpq/pq.el"))
478 678b3cb3 2022-03-16 op
479 678b3cb3 2022-03-16 op
480 f9fb86fa 2022-11-25 op ;; plass
481 f9fb86fa 2022-11-25 op (unless (package-installed-p 'plass)
482 f9fb86fa 2022-11-25 op (ignore-errors
483 6877640b 2023-03-07 op (package-install-file "~/w/plass/extra/plass.el")))
484 678b3cb3 2022-03-16 op
485 f9fb86fa 2022-11-25 op (with-eval-after-load 'plass
486 f9fb86fa 2022-11-25 op (setq plass-filter "!2fa"
487 f9fb86fa 2022-11-25 op plass-totp-filter "2fa"))
488 678b3cb3 2022-03-16 op
489 f9fb86fa 2022-11-25 op
490 678b3cb3 2022-03-16 op
491 678b3cb3 2022-03-16 op (setq shackle-default-rule nil
492 678b3cb3 2022-03-16 op shackle-rules
493 678b3cb3 2022-03-16 op (let ((repls "\\*\\(cider-repl\\|sly-mrepl\\|ielm\\)")
494 678b3cb3 2022-03-16 op (godot "\\*godot - .*\\*")
495 1d60e75f 2024-03-05 op (vcs "\\*\\(Flymake\\|Package-Lint\\|vc-\\(git\\|got\\|fossil\\) :\\).*")
496 678b3cb3 2022-03-16 op (elfeed "\\*elfeed-entry\\*")
497 678b3cb3 2022-03-16 op (vmd "\\*vmd console .*"))
498 dcac0b3b 2022-06-25 op `(("*Async Shell Command*" :ignore t)
499 678b3cb3 2022-03-16 op (,repls :regexp t
500 678b3cb3 2022-03-16 op :align below
501 678b3cb3 2022-03-16 op :size 0.3)
502 678b3cb3 2022-03-16 op (,godot :regexp t
503 678b3cb3 2022-03-16 op :align t
504 678b3cb3 2022-03-16 op :size 0.3)
505 678b3cb3 2022-03-16 op (occur-mode :select t
506 678b3cb3 2022-03-16 op :align right
507 678b3cb3 2022-03-16 op :size 0.3)
508 678b3cb3 2022-03-16 op (diff-mode :select t)
509 678b3cb3 2022-03-16 op (help-mode :select t
510 678b3cb3 2022-03-16 op :align left
511 678b3cb3 2022-03-16 op :size 0.3)
512 678b3cb3 2022-03-16 op (,vcs :regexp t
513 678b3cb3 2022-03-16 op :align above
514 678b3cb3 2022-03-16 op :size 0.15
515 678b3cb3 2022-03-16 op :select t)
516 678b3cb3 2022-03-16 op (,elfeed :regexp t
517 678b3cb3 2022-03-16 op :align t
518 678b3cb3 2022-03-16 op :select t
519 678b3cb3 2022-03-16 op :size 0.75)
520 678b3cb3 2022-03-16 op (,vmd :regexp t
521 678b3cb3 2022-03-16 op :align below
522 678b3cb3 2022-03-16 op :select t
523 678b3cb3 2022-03-16 op :size 0.3))))
524 678b3cb3 2022-03-16 op (shackle-mode +1)
525 678b3cb3 2022-03-16 op
526 dcac0b3b 2022-06-25 op ;; (setq display-buffer-alist nil)
527 1d60e75f 2024-03-05 op
528 1d60e75f 2024-03-05 op
529 1d60e75f 2024-03-05 op ;; rotate
530 1d60e75f 2024-03-05 op (define-key global-map (kbd "C-c R") #'rotate-window)
531 1d60e75f 2024-03-05 op (define-key global-map (kbd "C-c r") #'rotate-layout)
532 1d60e75f 2024-03-05 op
533 1d60e75f 2024-03-05 op
534 1d60e75f 2024-03-05 op ;; howm
535 1d60e75f 2024-03-05 op (require 'howm)
536 1d60e75f 2024-03-05 op
537 1d60e75f 2024-03-05 op (define-key howm-menu-mode-map "\C-h" nil)
538 1d60e75f 2024-03-05 op (define-key riffle-summary-mode-map "\C-h" nil)
539 1d60e75f 2024-03-05 op (define-key howm-view-contents-mode-map "\C-h" nil)
540 1d60e75f 2024-03-05 op
541 1d60e75f 2024-03-05 op ;; rename buffers to their title
542 1d60e75f 2024-03-05 op (add-hook 'howm-mode-hook 'howm-mode-set-buffer-name)
543 1d60e75f 2024-03-05 op (add-hook 'after-save-hook 'howm-mode-set-buffer-name)