diff --git a/modules/tools/eval/autoload/eval.el b/modules/tools/eval/autoload/eval.el index 0ebc57a98..4fc951ae7 100644 --- a/modules/tools/eval/autoload/eval.el +++ b/modules/tools/eval/autoload/eval.el @@ -55,31 +55,50 @@ ;; ;;; Commands +(defvar quickrun-option-cmdkey) ;;;###autoload (defun +eval/buffer () "Evaluate the whole buffer." (interactive) - (if (or (assq major-mode +eval-runners) - (and (fboundp '+eval--ensure-in-repl-buffer) - (ignore-errors - (get-buffer-window (or (+eval--ensure-in-repl-buffer) - t))))) - (+eval/region (point-min) (point-max)) - (quickrun))) + (let ((quickrun-option-cmdkey (bound-and-true-p quickrun-option-cmdkey))) + (if (or (assq major-mode +eval-runners) + (and (fboundp '+eval--ensure-in-repl-buffer) + (ignore-errors + (get-buffer-window (or (+eval--ensure-in-repl-buffer) + t)))) + (and (require 'quickrun nil t) + (equal (setq + quickrun-option-cmdkey + (quickrun--command-key + (buffer-file-name (buffer-base-buffer)))) + "emacs") + (alist-get 'emacs-lisp-mode +eval-runners))) + (+eval/region (point-min) (point-max)) + (quickrun)))) ;;;###autoload (defun +eval/region (beg end) "Evaluate a region between BEG and END and display the output." (interactive "r") (let ((load-file-name buffer-file-name)) - (if (and (fboundp '+eval--ensure-in-repl-buffer) - (ignore-errors - (get-buffer-window (or (+eval--ensure-in-repl-buffer) - t)))) - (+eval/send-region-to-repl beg end) - (if-let (runner (alist-get major-mode +eval-runners)) - (funcall runner beg end) - (quickrun-region beg end))))) + (cond ((and (fboundp '+eval--ensure-in-repl-buffer) + (ignore-errors + (get-buffer-window (or (+eval--ensure-in-repl-buffer) + t)))) + (+eval/send-region-to-repl beg end)) + ((let ((runner + (or (alist-get major-mode +eval-runners) + (and (require 'quickrun nil t) + (equal (setq + lang (quickrun--command-key + (buffer-file-name (buffer-base-buffer)))) + "emacs") + (alist-get 'emacs-lisp-mode +eval-runners)))) + lang) + (if runner + (funcall runner beg end) + (let ((quickrun-option-cmdkey lang)) + (quickrun-region beg end)))))))) ;;;###autoload (defun +eval/line-or-region () @@ -102,11 +121,19 @@ (defun +eval/region-and-replace (beg end) "Evaluation a region between BEG and END, and replace it with the result." (interactive "r") - (cond ((eq major-mode 'emacs-lisp-mode) - (kill-region beg end) - (condition-case nil - (prin1 (eval (read (current-kill 0))) - (current-buffer)) - (error (message "Invalid expression") - (insert (current-kill 0))))) - ((quickrun-replace-region beg end)))) + (let (lang) + (cond + ((or (eq major-mode 'emacs-lisp-mode) + (and (require 'quickrun nil t) + (equal (setq + lang (quickrun--command-key + (buffer-file-name (buffer-base-buffer)))) + "emacs"))) + (kill-region beg end) + (condition-case nil + (prin1 (eval (read (current-kill 0))) + (current-buffer)) + (error (message "Invalid expression") + (insert (current-kill 0))))) + ((let ((quickrun-option-cmdkey lang)) + (quickrun-replace-region beg end))))))