;; -*- lexical-binding: t; -*- ;; General text editing configuration ;; Better isearch (use-package ctrlf :config (ctrlf-mode 1)) ;; "pair" management, where pairs are parentheses, braces, etc. (use-package smartparens :init (leader-def-key "s" '(nil :which-key "smartparens")) :config (require 'smartparens-config) (smartparens-global-mode) (defun sp-wrap-double-quote () (interactive) (sp-wrap-with-pair "\"")) (defun sp-wrap-single-quote () (interactive) (sp-wrap-with-pair "'")) :hook (prog-mode . smartparens-strict-mode) (eshell-mode . smartparens-strict-mode) :general ;; Wrapping (leader-map "s(" #'sp-wrap-round "s{" #'sp-wrap-curly "s'" #'sp-wrap-single-quote "s\"" #'sp-wrap-double-quote "sW" #'sp-unwrap-sexp "sl" #'sp-next-sexp "sh" #'sp-backward-sexp "sj" #'sp-down-sexp "sk" #'sp-backward-up-sexp "sL" #'sp-forward-symbol "sH" #'sp-backward-symbol "s^" #'sp-beginning-of-sexp "s$" #'sp-end-of-sexp "st" #'sp-transpose-sexp "su" #'undo-tree-undo "sy" #'sp-copy-sexp "sd" #'sp-kill-sexp "ss" #'sp-forward-slurp-sexp "sS" #'sp-backward-slurp-sexp "sb" #'sp-forward-barf-sexp "sB" #'sp-backward-barf-sexp "sv" #'sp-select-next-thing "sV" #'sp-select-previous-thing) (normal "g(" #'sp-wrap-round "g[" #'sp-wrap-square "g{" #'sp-wrap-curly "g\"" #'sp-wrap-double-quote "g'" #'sp-wrap-single-quote)) (use-package evil-smartparens :after (evil smartparens) :hook (smartparens-enabled . evil-smartparens-mode)) ;; Automagical indent (use-package aggressive-indent :hook ((lisp-mode . aggressive-indent-mode) (emacs-lisp-mode . aggressive-indent-mode) (clojure-mode . aggressive-indent-mode))) ;; Highlight indent level for whitespace-sensitive languages (use-package highlight-indent-guides :commands highlight-indent-guides-mode :custom (highlight-indent-guides-method 'character) (highlight-indent-guides-auto-character-face-perc 7) (highlight-indent-guides-responsive 'stack) (highlight-indent-guides-auto-stack-character-face-perc 10)) ;; Handy mode for prose writing and reading (use-package olivetti :general ("C-c o" #'olivetti-mode)) ;; Multiple cursors (use-package evil-multiedit :defer 2 :config (evil-multiedit-default-keybinds)) ;; Don't choke on files with long lines (use-package so-long :straight (:type built-in) :demand t :config (global-so-long-mode)) ;; Polite white-space trimming (use-package ws-butler :hook (prog-mode . ws-butler-mode)) (provide 'init-editing)