Subject: bug#78861: closed (Re: bug#78861: [PATCH] Avoid calendar flicker)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 28 Jun 2025 09:54:03 +0000

Your bug report

#78861: [PATCH] Avoid calendar flicker

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
78861: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=78861
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#78861: [PATCH] Avoid calendar flicker
From: Eli Zaretskii <[email-masked]>
To: Manuel Giraud <[email-masked]>
Cc: [email-masked]
Date: Sat, 28 Jun 2025 12:53:30 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Manuel Giraud <[email-masked]>
> Cc: [email-masked]
> Date: Mon, 23 Jun 2025 09:50:23 +0200
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> From: Manuel Giraud <[email-masked]>
> >> Cc: [email-masked]
> >> Date: Sun, 22 Jun 2025 18:22:15 +0200
> >> 
> >> Eli Zaretskii <[email-masked]> writes:
> >> 
> >> >> From: Manuel Giraud <[email-masked]>
> >> >> Cc: [email-masked]
> >> >> Date: Sun, 22 Jun 2025 16:08:37 +0200
> >> >> 
> >> >> Eli Zaretskii <[email-masked]> writes:
> >> >> 
> >> >> > If the above is the best scenario you can offer, then please point me
> >> >> > to the code in calendar that first draws the numbers in black and then
> >> >> > redraws them in red, and I will take a look.
> >> >> 
> >> >> Thanks Eli.  I think most takes place in `diary-mark-entries' at
> >> >> diary-lib.el:1377.
> >> >
> >> > Thanks.  Then I guess the problem is the calls to sit-for, which
> >> > performs redisplay, in calendar-generate-window before it calls
> >> > diary-mark-entries.  Any idea why we are calling sit-for there?  If
> >> > you remove those calls or add the optional second argument non-nil to
> >> > them, does the problem go away?
> >> 
> >> Thanks.  I have commented both sit-for and the issue completely goes
> >> away.  I dig into history and those sit-for are here from ecaa0527104b
> >> (the initial revision in 1992!)
> >
> > Can you (or anyone else) think of any reasons to have these sit-for
> > calls there?  For example, when there's no need to call
> > diary-mark-entries at all?
> 
> Both sit-for are guarded behind a `in-calendar-window' meaning that the
> window-buffer is the calendar buffer.  So maybe the explanation for
> those sit-for was to have some interactive visual feed back when
> activating marks of diary entries.  But now that we could end up calling
> `dairy-mark-entries' when we scroll this just creates too much flicker,
> IMO.
> 
> > If we can think of no valid reason, I think TRT is simply to remove
> > these calls.  It's possible that this was there for when Emacs had a
> > completely different way of fontifying buffers than what we have now.
> 
> Here is an updated patch that removes those sit-for.

Thanks, installed on the master branch, and closing the bug.

Subject: [PATCH] Avoid calendar flicker
From: Manuel Giraud <[email-masked]>
To: [email-masked]
Date: Sun, 22 Jun 2025 09:00:02 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Tags: patch

Hi,

When you have diary marks activated in the calendar (with 'm',
diary-mark-entries) and when moving around (for example with '<' and
'>') you will see some flicker on dates where you have marks.  This
patch fixes this.

In GNU Emacs 31.0.50 (build 7, x86_64-unknown-openbsd7.7) of 2025-06-21
 built on computer
Repository revision: c916f816e0f12f876868f9ffa1be4b070933bb6f
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101016
System Description: OpenBSD computer 7.7 GENERIC.MP#23 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=no
 --with-toolkit-scroll-bars=no --without-cairo --without-dbus
 --without-gconf --without-gsettings --without-compress-install'

>From c08730525810adc5f7cbe196e86c707ca4fc98cc Mon Sep 17 00:00:00 2001
From: Manuel Giraud <[email-masked]>
Date: Sun, 22 Jun 2025 08:53:12 +0200
Subject: [PATCH] Avoid calendar flicker

* lisp/calendar/calendar.el (calendar-generate-window): Inhibit
redisplay when building the calendar window.
---
 lisp/calendar/calendar.el | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index 1c98de98b9b..47b6b512370 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -1410,7 +1410,8 @@ calendar-basic-setup
 (defun calendar-generate-window (&optional mon yr)
   "Generate the calendar window for the current date.
 Optional integers MON and YR are used instead of today's date."
-  (let* ((inhibit-read-only t)
+  (let* ((inhibit-redisplay t)
+         (inhibit-read-only t)
          (today (calendar-current-date))
          (month (calendar-extract-month today))
          ;; (day (calendar-extract-day today))
-- 
2.49.0

-- 
Manuel Giraud