* 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) :hook emacs-lisp-mode clojure-ts-mode) #+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 (use-package indent-bars :ensure t :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)) #+end_src ** 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 ** 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