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

From: Stephen Berman <[email-masked]>
Date: Thu, 29 Jun 2023 10:46:11 +0200

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

>> 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))))

Why is the state of the mode-line face shown as "EDITED, shown value
does not take effect until you set or save it." before setting it in the
above recipe?  In fact, I see nine such faces in the buffer *Customize
Faces* with -Q (the state of all other faces is shown as "STANDARD").

Steve Berman