GNU bug report logs - #74091
31.0.50; string-pixel-width in mode line disables region

Previous Next

Package: emacs;

Reported by: Eshel Yaron <me <at> eshelyaron.com>

Date: Tue, 29 Oct 2024 17:28:02 UTC

Severity: normal

Found in version 31.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eshel Yaron <me <at> eshelyaron.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 74091 <at> debbugs.gnu.org
Subject: bug#74091: 31.0.50; string-pixel-width in mode line disables region
Date: Wed, 30 Oct 2024 16:26:38 +0100
Hi Eli,

Eli Zaretskii <eliz <at> gnu.org> writes:

>> Date: Tue, 29 Oct 2024 18:27:05 +0100
>> From:  Eshel Yaron via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> 
>> 
>> 
>> The new implementation of string-pixel-width has some unexpected effect
>> when it is called from mode-line-format, as happens for example when
>> mode-line-format-right-align occurs in mode-line-format:
>> 
>> 1. emacs -Q
>> 2. (setq-default mode-line-format
>> 	      '("" (:eval (progn (string-pixel-width "foo") nil))))
>> 3. C-x C-f /path/to/emacs/lisp/subr.el
>> 4. C-SPC
>> 5. C-n
>> 
>> At this point the region is expected to be active since we activated it
>> in step 4.  But in step 5 the mode line is updated, which calls
>> string-pixel-width, which in turn unexpectedly disables the region.
>
> Thanks, should be fixed now.

Great!  That seems to work.

>> I'm not really sure why this happens...
>
> It happens because string-pixel-width modifies a buffer, and that sets
> deactivate-mark, which then causes the region to be deactivated when
> a command finishes.

Hmm but string-pixel-width used to modify a buffer also in the old
implementation, and that never caused this issue...  And in both the old
implementation and in the new one, the modification is in a different
buffer, is that expected to disable the mark in the original buffer?

> When you inject string-pixel-width into mode-line-format, you
> indirectly cause it to be called from C-n and the like, because those
> evaluate the mode-line format.  So doing that is quite a risky thing,
> in general.

Well, that's how Emacs implements mode-line-format-right-align :)


Thanks for the quick response,

Eshel




This bug report was last modified 194 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.