bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#54450: 29.0.50; redisplay--pre-redisplay-functions issue


From: Ergus
Subject: bug#54450: 29.0.50; redisplay--pre-redisplay-functions issue
Date: Fri, 18 Mar 2022 18:42:52 +0100

On Fri, Mar 18, 2022 at 07:01:06PM +0200, Eli Zaretskii wrote:
Date: Fri, 18 Mar 2022 16:38:45 +0100
From:  Ergus via "Bug reports for GNU Emacs,
 the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>

emacs -Q
(setq highlight-nonselected-windows t)

C-x 2
C-x o
C-x C-f /tmp/test
(insert some text)
C-a C-SPC C-f C-f C-f
C-x o

[at this point we should see a region highlighted over the 3 first
letters of the inserted text in the other winfow buffer (test)]

then eval this several times:

(with-selected-window (get-buffer-window "test" 0)
    (right-char))

This will move the point in the test window, but the region won't be
updated.

Thanks.  Does the patch below solve the problem?

diff --git a/src/intervals.c b/src/intervals.c
index 687b237..cbcc100 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -44,6 +44,7 @@
#include "lisp.h"
#include "intervals.h"
#include "buffer.h"
+#include "window.h"
#include "puresize.h"
#include "keymap.h"

@@ -1885,6 +1886,11 @@ set_point_both (ptrdiff_t charpos, ptrdiff_t bytepos)
      return;
    }

+  if (highlight_nonselected_windows
+      && !NILP (Vtransient_mark_mode)
+      && !NILP (BVAR (current_buffer, mark_active)))
+    bset_redisplay (current_buffer);
+
  /* Set TO to the interval containing the char after CHARPOS,
     and TOPREV to the interval containing the char before CHARPOS.
     Either one may be null.  They may be equal.  */

Hi Eli:

Yes, this could solve the issue for the region, but not in general for
redisplay--update-cursor-face-highlight which was the initial problem
with Juri's code. Same for any other function that goes into the
pre-redisplay-functions hook.

The region example reported in this issue was only the simplest way I
found to give you a simple reproducible snippet, but the issue is a bit
more general.

With the cursor-face we may have a similar issue cause such hook works
in the same way, so this condition will need to be extended and extended
and extended on every case for every function in
pre-redisplay-functions hook.

else

For Juri's code maybe there is a way that he can explicitly do
bset_redisplay at the end of the with-selected-window?

Does it makes sense?

Best,
Ergus




reply via email to

[Prev in Thread] Current Thread [Next in Thread]