Subject: bug#64344: [PATCH] Make calculator work with customized mode-line

From: Eli Zaretskii <[email-masked]>
Date: Thu, 29 Jun 2023 10:49:38 +0300

> Date: Wed, 28 Jun 2023 13:23:45 -0500
> From:  john muhl via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <[email-masked]>
> 
> calculator.el doesn’t work after customizing the mode-line. It assumes
> the line-width is always an integer but after using customize it is a
> dotted list.
> 
>   - emacs -Q
>   - M-x customize-apropos-faces RET mode-line RET
>   - Ensure ‘mode-line-face’ has a box property with vertical and
>     horizontal widths. The default config includes these already.
>   - Set for current session
>   - M-x calculator RET
>   => calculator: Wrong type argument: number-or-marker-p, (1 . -1)

Thanks.

> diff --git a/lisp/calculator.el b/lisp/calculator.el
> index bf2ac9b6215..6af6464d2f4 100644
> --- a/lisp/calculator.el
> +++ b/lisp/calculator.el
> @@ -746,7 +746,7 @@ calculator-need-3-lines
>               ;; use 3 lines
>               (let* ((bx (face-attribute 'mode-line :box))
>                      (lh (plist-get bx :line-width)))
> -               (and bx (or (not lh) (> lh 0))))
> +               (and bx (or (not lh) (> (if (listp lh) (cdr lh) lh) 0))))
                                               ^^^^^
Shouldn't that be 'consp' instead?  'listp' returns non-nil for nil
argument.