From 360bd4e083f836301121787ca9c8216027c162cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Mon, 22 Sep 2025 11:20:33 -0600 Subject: [PATCH] feat(emacs): Save last eval-expression result into register --- .../home/users/msyds/emacs/lisp/syd/evil.el | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/modules/home/users/msyds/emacs/lisp/syd/evil.el b/modules/home/users/msyds/emacs/lisp/syd/evil.el index 1db3293..e2cd1a9 100644 --- a/modules/home/users/msyds/emacs/lisp/syd/evil.el +++ b/modules/home/users/msyds/emacs/lisp/syd/evil.el @@ -404,20 +404,30 @@ modules." ;;; Save the last 'M-x eval-expression' input to an Evil register. -(defvar syd-evil-last-eval-expression-register ?e - "An Evil-mode register in which the last expression evaluated with an -interactive call to `eval-expression' is stored.") +(defvar syd-last-eval-expression-register ?e + "An Evil-mode register to which the last expression evaluated with an +interactive call to `eval-expression' is saved. Note that the register is only +set by interactive usage of `eval-expression'.") + +(defvar syd-last-eval-result-register ?r + "An Evil-mode register to which the result of the last `eval-expression' +invocation is saved. Note that the register is only set by interactive usage of +`eval-expression'.") (with-eval-after-load 'evil - (defun syd-set-eval-expression-register-a (expr &rest _) - "If called interactively, set the register -`syd-evil-last-eval-expression-register' to a printed form of EXPR." - (when (called-interactively-p 'interactive) - (->> (pp-to-string expr) - (string-remove-suffix "\n") - (evil-set-register syd-evil-last-eval-expression-register)))) - (advice-add #'eval-expression - :after #'syd-set-eval-expression-register-a)) + (syd-defadvice syd--set-eval-expression-register-a (fn expr &rest args) + :around #'eval-expression + "When `eval-expression' is called interactively, update the registers +`syd-last-eval-expression-register' and `syd-last-eval-result-register'." + (let ((r (apply fn expr args))) + (when (called-interactively-p 'interactive) + (evil-set-register syd-last-eval-expression-register + (->> (pp-to-string expr) + (string-remove-suffix "\n"))) + (evil-set-register syd-last-eval-result-register + (->> (pp-to-string r) + (string-remove-suffix "\n")))) + r)))