2025-10-30 18:42:01 +00:00
|
|
|
* Blocks, Parentheses and Formatting Oh My!
|
|
|
|
|
|
|
|
|
|
** Parentheses, and Structural Editing
|
|
|
|
|
|
|
|
|
|
Sometimes if I delete a parenthesis out of hand I spend the next minute or two
|
|
|
|
|
kicking myself as I count the parentheses here and there. Well no more! With
|
|
|
|
|
[[https://shaunlebron.github.io/parinfer/][Parinfer]] structural editing, and taming parentheses becomes a
|
|
|
|
|
breeze.
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package parinfer-rust-mode
|
|
|
|
|
:ensure t
|
|
|
|
|
:init
|
|
|
|
|
(setq parinfer-rust-auto-download t)
|
2026-01-31 17:34:09 +00:00
|
|
|
:hook
|
|
|
|
|
emacs-lisp-mode
|
|
|
|
|
clojure-ts-mode)
|
2025-10-30 18:42:01 +00:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
I also have =smart-parens= for parentheses matching in modes where =parinfer= would
|
|
|
|
|
be overkill.
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package smartparens
|
|
|
|
|
:ensure t
|
|
|
|
|
:hook (prog-mode text-mode markdown-mode)
|
|
|
|
|
:config
|
|
|
|
|
(require 'smartparens-config))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
Might as well highlight the parentheses to make them easier to spot.
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
2026-02-04 21:53:11 +00:00
|
|
|
(use-package indent-bars
|
2025-10-30 18:42:01 +00:00
|
|
|
:ensure t
|
2026-02-04 21:53:11 +00:00
|
|
|
:hook ((emacs-lisp-mode
|
|
|
|
|
c-ts-mode
|
|
|
|
|
c++-ts-mode
|
|
|
|
|
clojure-ts-mode
|
|
|
|
|
elisp-mode
|
|
|
|
|
lisp-mode
|
|
|
|
|
rust-ts-mode
|
|
|
|
|
ruby-ts-mode) . indent-bars-mode)
|
|
|
|
|
:custom
|
|
|
|
|
;; Character used for the bar (for terminal or if stipples are disabled)
|
|
|
|
|
(indent-bars-char "|")
|
|
|
|
|
;; The width of the bar (0.1 to 1.0)
|
|
|
|
|
(indent-bars-width-frac 0.1)
|
|
|
|
|
;; How "offset" the bar is from the left
|
|
|
|
|
(indent-bars-pad-frac 0.1)
|
|
|
|
|
;; Whether to draw bars on the first level of indentation
|
|
|
|
|
(indent-bars-starting-column 0)
|
|
|
|
|
;; Tree-sitter support (highly recommended for C, Rust, and Ruby)
|
|
|
|
|
(indent-bars-treesit-support t)
|
|
|
|
|
;; Optimization: don't draw bars in strings/comments
|
|
|
|
|
(indent-bars-no-descend-lists t)
|
|
|
|
|
:config
|
|
|
|
|
(setq
|
|
|
|
|
indent-bars-color '(highlight :face-bg t :blend 0.15)
|
|
|
|
|
indent-bars-pattern "."
|
|
|
|
|
indent-bars-width-frac 0.1
|
|
|
|
|
indent-bars-pad-frac 0.1
|
|
|
|
|
indent-bars-zigzag nil
|
|
|
|
|
indent-bars-color-by-depth '(:regexp "outline-\\([0-9]+\\)" :blend 1) ; blend=1: blend with BG only
|
|
|
|
|
indent-bars-highlight-current-depth '(:blend 0.5) ; pump up the BG blend on current
|
|
|
|
|
indent-bars-display-on-blank-lines t))
|
2025-10-30 18:42:01 +00:00
|
|
|
#+end_src
|
|
|
|
|
|
2025-12-02 10:30:57 +00:00
|
|
|
** Apheleia
|
|
|
|
|
|
|
|
|
|
[[https://github.com/radian-software/apheleia][Aphelia]] tries to use the right formatting for any file and applies it asynchronously.
|
|
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
|
(use-package apheleia
|
|
|
|
|
:config
|
|
|
|
|
(apheleia-global-mode +1))
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
2025-10-30 18:42:01 +00:00
|
|
|
** Indentation Level
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
;; Indent guides
|
|
|
|
|
(use-package highlight-indent-guides
|
|
|
|
|
:defer t
|
|
|
|
|
:hook (prog-mode . highlight-indent-guides-mode))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** List, and String Improvements
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package dash :ensure t)
|
|
|
|
|
(use-package s :ensure t)
|
|
|
|
|
#+end_src
|