Skip to content

Instantly share code, notes, and snippets.

@wsgac
Last active July 17, 2024 08:25
Show Gist options
  • Save wsgac/c6049fbf96699f8d2084b2f01d201e9e to your computer and use it in GitHub Desktop.
Save wsgac/c6049fbf96699f8d2084b2f01d201e9e to your computer and use it in GitHub Desktop.
A `use-package` enabled configuration of Paredit with an annoying problem worked around
;;;;;;;;;;;;;
;; Paredit ;;
;;;;;;;;;;;;;
(use-package paredit
:ensure t
:init
:config
(show-paren-mode t)
;; Workaround for superfluous spaces inserted in e.g. pathnames, as
;; described here:
;; https://www.n16f.net/blog/fixing-unquote-splicing-behaviour-with-paredit/
(defvar wsg-paredit-no-space-prefixes '(",@" "#p" "#P"))
(defun wsg-paredit-space-for-delimiter (endp delimiter)
(let ((point (point)))
(or endp
(seq-every-p
(lambda (prefix)
(and (> point (length prefix))
(let ((start (- point (length prefix)))
(end point))
(not (string= (buffer-substring start end) prefix)))))
wsg-paredit-no-space-prefixes))))
(defun wsg-init-paredit-space-for-delimiter ()
(add-to-list 'paredit-space-for-delimiter-predicates
'wsg-paredit-space-for-delimiter))
:hook ((paredit-mode . wsg-init-paredit-space-for-delimiter)
(clojure-mode . enable-paredit-mode)
(cider-repl-mode . enable-paredit-mode)
(emacs-lisp-mode . enable-paredit-mode)
(eval-expression-minibuffer-setup . enable-paredit-mode)
(ielm-mode . enable-paredit-mode)
(lisp-mode . enable-paredit-mode)
(lisp-interaction-mode . enable-paredit-mode)
(scheme-mode . enable-paredit-mode)
(slime-repl-mode . enable-paredit-mode))
:bind (:map paredit-mode-map
("RET" . nil)
("C-j" . paredit-newline)
("M-[" . paredit-wrap-square)
("M-{" . paredit-wrap-curly)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment