From: Eshel Yaron Date: Tue, 25 Feb 2025 19:54:05 +0000 (+0100) Subject: New command 'lisp-duplicate-sexp' X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7df2d4447fe998174bc66ad1d9d1f6604b7d387a;p=emacs.git New command 'lisp-duplicate-sexp' --- diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 8ae1e7f4e04..787bc7f634e 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -1064,6 +1064,18 @@ font-lock keywords will not be case sensitive." (backward-sexp) (delete-char 1))) +(defun lisp-duplicate-sexp (n) + "Duplicate sexp immediately after or before point in a new line N times." + (interactive "p") + (let ((exp (thing-at-point 'sexp))) + (dotimes (_ n) + (save-excursion + (cond + ((equal (char-after) ?\() (insert exp "\n")) + ((equal (char-before) ?\)) (insert "\n" exp)) + (t (user-error "No list at point"))) + (when (nth 9 (syntax-ppss)) (lisp-tidy-sexp)))))) + (defvar-keymap lisp-mode-shared-map :doc "Keymap for commands shared by all sorts of Lisp modes." :parent prog-mode-map @@ -1076,6 +1088,7 @@ font-lock keywords will not be case sensitive." "M-r" #'raise-sexp "M-S" #'lisp-split-sexp "M-J" #'lisp-join-sexps + "M-D" #'lisp-duplicate-sexp "M-" #'lisp-splice-following "?" #'lisp-character "C-)" #'lisp-slurp-forward