Subject: bug#79143: [PATCH] New user option to inhibit Calc startup message

From: Eli Zaretskii <[email-masked]>
Date: Sat, 02 Aug 2025 09:33:24 +0300

> From: Sean Devlin <[email-masked]>
> Date: Fri, 1 Aug 2025 17:15:36 -0500
> 
> This is a patch adding a new user option to suppress Calc’s startup
> message.
> 
> By default, Calc prints a message like this during startup:
> 
> "Welcome to the GNU Emacs Calculator!  Press ? or M-x calc-help-prefix
> for help, q to quit"
> 
> I find this a bit distracting, so I’d like to be able to silence it. The
> attached patch adds an option to allow this along with a small test
> harness and documentation in the NEWS file.
> 
> Please let me know if any changes are needed to the patch.

Thanks.

Christopher, any comments?  (I hope you don't mind being involved in
maintenance of Calc by way of reviewing patches of others.)

> From 1ad1f17b6c9326ffc009c6de5c5f2b9929014f52 Mon Sep 17 00:00:00 2001
> From: Sean Devlin <[email-masked]>
> Date: Fri, 1 Aug 2025 17:05:48 -0500
> Subject: [PATCH] New user option to inhibit Calc startup message
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> * etc/NEWS: Document the new option.
> * lisp/calc/calc.el (calc-inhibit-startup-message): New option to
> inhibit Calc’s startup message.
> (calc): Respect the option in Calc’s startup code.
> * test/lisp/calc/calc-tests.el (ert): Require ert-x for
> 'ert-with-message-capture'.
> (calc-inhibit-startup-message): Test the new user option.

Should this new option be in the Calc manual as well?  If you agree
and send an updated patch for that, then please (a) mention the bug
number in the commit log message, and (b) mark the NEWS entry as
"+++", to indicate that the relevant manuals have been updated.

> ---
>  etc/NEWS                     |  4 ++++
>  lisp/calc/calc.el            | 21 ++++++++++++++-------
>  test/lisp/calc/calc-tests.el | 15 +++++++++++++++
>  3 files changed, 33 insertions(+), 7 deletions(-)
> 
> diff --git a/etc/NEWS b/etc/NEWS
> index f4e64c0851f..aa1936fe7fc 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -2305,6 +2305,10 @@ Latin-1 range 0-255.  This hard-coded maximum is replaced by
>  the display of matching vectors as Unicode strings.  The default value
>  is 0xFF or 255 to preserve the existing behavior.
>  
> +*** New user option 'calc-inhibit-startup-message'.
> +If it is non-nil, inhibit Calc from printing its startup message.  The
> +default value is nil to preserve the existing behavior.
> +
>  ** Time
>  
>  *** New user option 'world-clock-sort-order'.
> diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
> index a350419b320..d4fb8776c6c 100644
> --- a/lisp/calc/calc.el
> +++ b/lisp/calc/calc.el
> @@ -1473,6 +1473,11 @@ calc-create-buffer
>      (require 'calc-ext)
>      (calc-set-language calc-language calc-language-option t)))
>  
> +(defcustom calc-inhibit-startup-message nil
> +  "If non-nil, inhibit the Calc startup message."
> +  :version "31.1"
> +  :type 'boolean)
> +
>  (defcustom calc-make-windows-dedicated nil
>    "If non-nil, windows displaying Calc buffers will be marked dedicated.
>  See `window-dedicated-p' for what that means."
> @@ -1524,9 +1529,10 @@ calc
>          (with-current-buffer (calc-trail-buffer)
>            (and calc-display-trail
>                 (calc-trail-display 1 t)))
> -        (message (substitute-command-keys
> -                  (concat "Welcome to the GNU Emacs Calculator!  \\<calc-mode-map>"
> -                          "Press \\[calc-help] or \\[calc-help-prefix] for help, \\[calc-quit] to quit")))
> +        (unless calc-inhibit-startup-message
> +          (message (substitute-command-keys
> +                    (concat "Welcome to the GNU Emacs Calculator!  \\<calc-mode-map>"
> +                            "Press \\[calc-help] or \\[calc-help-prefix] for help, \\[calc-quit] to quit"))))
>          (run-hooks 'calc-start-hook)
>          (and (windowp full-display)
>               (window-point full-display)
> @@ -1534,10 +1540,11 @@ calc
>          (and calc-make-windows-dedicated
>               (set-window-dedicated-p nil t))
>          (calc-check-defines)
> -        (when (and calc-said-hello interactive)
> -          (sit-for 2)
> -          (message ""))
> -        (setq calc-said-hello t)))))
> +        (unless calc-inhibit-startup-message
> +          (when (and calc-said-hello interactive)
> +            (sit-for 2)
> +            (message ""))
> +          (setq calc-said-hello t))))))
>  
>  ;;;###autoload
>  (defun full-calc (&optional interactive)
> diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el
> index 2fd6a6be45e..49762e146a5 100644
> --- a/test/lisp/calc/calc-tests.el
> +++ b/test/lisp/calc/calc-tests.el
> @@ -26,6 +26,7 @@
>  
>  (require 'cl-lib)
>  (require 'ert)
> +(require 'ert-x)
>  (require 'calc)
>  (require 'calc-ext)
>  (require 'calc-units)
> @@ -946,5 +947,19 @@ calc-math-vector-is-string
>        (should-error (math-vector-is-string cplx-vec)
>                      :type 'wrong-type-argument))))
>  
> +(ert-deftest calc-inhibit-startup-message ()
> +  "Test user option `calc-inhibit-startup-message'."
> +  (let ((welcome-message "Welcome to the GNU Emacs Calculator!"))
> +    (ert-with-message-capture messages
> +      (let ((calc-inhibit-startup-message t))
> +        (calc))
> +      (should-not (string-match-p welcome-message messages))
> +      (calc-quit))
> +    (ert-with-message-capture messages
> +      (let ((calc-inhibit-startup-message nil))
> +        (calc))
> +      (should (string-match-p welcome-message messages))
> +      (calc-quit))))
> +
>  (provide 'calc-tests)
>  ;;; calc-tests.el ends here
> -- 
> 2.39.5 (Apple Git-154)
>