about summary refs log tree commit diff stats
path: root/.emacs.d
diff options
context:
space:
mode:
authorDavid Morgan <djm_uk@protonmail.com>2022-11-16 15:52:19 +0000
committerDavid Morgan <djm_uk@protonmail.com>2022-11-16 15:52:19 +0000
commita977aa74ff42f764a7883b572f8b924d154e2574 (patch)
treed7d6ec26acca3426345398da3a1b8e9b36525aa6 /.emacs.d
parentde38da5ddfc26667f490fce00db446a349345e8e (diff)
downloaddotfiles-a977aa74ff42f764a7883b572f8b924d154e2574.tar.gz
Add kill-around-sexp function
Diffstat (limited to '.emacs.d')
-rw-r--r--.emacs.d/lisp/init-smartparens.el13
1 files changed, 13 insertions, 0 deletions
diff --git a/.emacs.d/lisp/init-smartparens.el b/.emacs.d/lisp/init-smartparens.el
index 1366045..db995aa 100644
--- a/.emacs.d/lisp/init-smartparens.el
+++ b/.emacs.d/lisp/init-smartparens.el
@@ -53,6 +53,18 @@
     (sp-wrap-round)
     (insert " ")
     (forward-char -1))
+  (defun kill-around-sexp ()
+    "Kill everything in the current list, except the current expression.
+Equivalent to raising then wrapping."
+    (interactive)
+    (let ((paren-char (save-excursion
+                        (sp-backward-up-sexp)
+                        (following-char))))
+      (sp-raise-sexp)
+      (cond ((= paren-char ?\() (sp-wrap-round))
+            ((= paren-char ?\{) (sp-wrap-curly))
+            ((= paren-char ?\[) (sp-wrap-square))
+            (t (error "Not in a list")))))
   (unbind-key "M-?" 'smartparens-mode-map)
   (unbind-key "M-?" 'sp-keymap)
   :bind (:map smartparens-mode-map
@@ -68,6 +80,7 @@
               ("M-;" . paredit-comment-dwim)
               ("M-q" . sp-indent-defun)
               ("C-j" . sp-newline)
+              ("M-R" . kill-around-sexp)
               ("C-c C-S-d" . duplicate-sexp-after-point)
               ("C-c M-(" . wrap-round-from-behind)))