diff options
author | David Morgan <djm_uk@protonmail.com> | 2021-05-26 10:06:56 +0000 |
---|---|---|
committer | David Morgan <djm_uk@protonmail.com> | 2021-05-26 10:06:56 +0000 |
commit | b5e8c2052c43e9865aad35380ff0b36cabae19d2 (patch) | |
tree | 64df1a2604066e1f5d3c0c2fc6a01ce85090d17b /emacs-prelude/personal/lisp/paredit-functions.el | |
parent | ccfeb564b6507fdf9b202527f90e6d11d50350eb (diff) | |
download | dotfiles-b5e8c2052c43e9865aad35380ff0b36cabae19d2.tar.gz |
Add emacs prelude config
Diffstat (limited to 'emacs-prelude/personal/lisp/paredit-functions.el')
-rw-r--r-- | emacs-prelude/personal/lisp/paredit-functions.el | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/emacs-prelude/personal/lisp/paredit-functions.el b/emacs-prelude/personal/lisp/paredit-functions.el new file mode 100644 index 0000000..12fd4e0 --- /dev/null +++ b/emacs-prelude/personal/lisp/paredit-functions.el @@ -0,0 +1,102 @@ +(with-eval-after-load 'paredit +;; From emacswiki +(defun paredit-barf-all-the-way-backward () + (interactive) + (paredit-split-sexp) + (paredit-backward-down) + (paredit-splice-sexp)) + +(defun paredit-barf-all-the-way-forward () + (interactive) + (paredit-split-sexp) + (paredit-forward-down) + (paredit-splice-sexp) + (if (eolp) (delete-horizontal-space))) + +(defun paredit-slurp-all-the-way-backward () + (interactive) + (catch 'done + (while (not (bobp)) + (save-excursion + (paredit-backward-up) + (if (eq (char-before) ?\() + (throw 'done t))) + (paredit-backward-slurp-sexp)))) + +(defun paredit-slurp-all-the-way-forward () + (interactive) + (catch 'done + (while (not (eobp)) + (save-excursion + (paredit-forward-up) + (if (eq (char-after) ?\)) + (throw 'done t))) + (paredit-forward-slurp-sexp)))) + +(nconc paredit-commands + '("Extreme Barfage & Slurpage" + (("C-M-)") + paredit-slurp-all-the-way-forward + ("(foo (bar |baz) quux zot)" + "(foo (bar |baz quux zot))") + ("(a b ((c| d)) e f)" + "(a b ((c| d)) e f)")) + (("C-M-}" "M-F") + paredit-barf-all-the-way-forward + ("(foo (bar |baz quux) zot)" + "(foo (bar|) baz quux zot)")) + (("C-M-(") + paredit-slurp-all-the-way-backward + ("(foo bar (baz| quux) zot)" + "((foo bar baz| quux) zot)") + ("(a b ((c| d)) e f)" + "(a b ((c| d)) e f)")) + (("C-M-{" "M-B") + paredit-barf-all-the-way-backward + ("(foo (bar baz |quux) zot)" + "(foo bar baz (|quux) zot)")))) + +(paredit-define-keys) +(paredit-annotate-mode-with-examples) +(paredit-annotate-functions-with-examples) + +;; From bodil +;; Inverse M-( +(defun paredit-wrap-round-from-behind () + (interactive) + (forward-sexp -1) + (paredit-wrap-round) + (insert " ") + (forward-char -1)) +(eval-after-load "paredit" + '(define-key paredit-mode-map (kbd "M-)") + 'paredit-wrap-round-from-behind)) + +;; From bodil +;; Duplicate sexp +(defun paredit-duplicate-after-point + () + "Duplicates the content of the line that is after the point." + (interactive) + ;; skips to the next sexp + (while (looking-at " ") + (forward-char)) + (set-mark-command nil) + ;; while we find sexps we move forward on the line + (while (and (<= (point) (car (bounds-of-thing-at-point 'sexp))) + (not (= (point) (line-end-position)))) + (forward-sexp) + (while (looking-at " ") + (forward-char))) + (kill-ring-save (mark) (point)) + ;; go to the next line and copy the sexprs we encountered + (paredit-newline) + (set-mark-command nil) + (yank) + (exchange-point-and-mark))) +(eval-after-load "paredit" + '(define-key paredit-mode-map (kbd "C-c C-d") + 'paredit-duplicate-after-point)) + +(provide 'paredit-functions) + |