108 lines
3.1 KiB
EmacsLisp
108 lines
3.1 KiB
EmacsLisp
;;; init-paredit-x.el --- Paredit Extra Configuration File -*- lexical-binding: t -*-
|
|
;;; Commentary:
|
|
;; Code taken from emacswiki and https://github.com/bodil/emacs.d/blob/master/bodil/bodil-paredit.el
|
|
;;; Code:
|
|
|
|
(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 https://github.com/bodil/emacs.d/blob/master/bodil/bodil-paredit.el
|
|
;; 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 https://github.com/bodil/emacs.d/blob/master/bodil/bodil-paredit.el
|
|
;; 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-S-d")
|
|
'paredit-duplicate-after-point))
|
|
|
|
(provide 'init-paredit-x)
|
|
;;; init-paredit-x.el ends here
|