From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: What's the best (i.e. least bad) way to re-redisplay? Date: Mon, 23 Aug 2021 22:35:22 +0300 Message-ID: <83fsv0vts5.fsf@gnu.org> References: Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26035"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Aug 23 21:36:14 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mIFjx-0006UB-DO for ged-emacs-devel@m.gmane-mx.org; Mon, 23 Aug 2021 21:36:13 +0200 Original-Received: from localhost ([::1]:32836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mIFjv-0006e2-FR for ged-emacs-devel@m.gmane-mx.org; Mon, 23 Aug 2021 15:36:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:55006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mIFjI-0005wx-15 for emacs-devel@gnu.org; Mon, 23 Aug 2021 15:35:32 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:33244) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mIFjH-0006I1-9z; Mon, 23 Aug 2021 15:35:31 -0400 Original-Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:1860 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mIFjG-0003MT-SO; Mon, 23 Aug 2021 15:35:31 -0400 In-Reply-To: (message from Alan Mackenzie on Mon, 23 Aug 2021 18:41:59 +0000) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:272885 Archived-At: > Date: Mon, 23 Aug 2021 18:41:59 +0000 > From: Alan Mackenzie > > I envisage a situation where an identifier is identified as a type during > jit-lock fontification, and thus font-lock-type-face needs to be applied > to all occurrences of this identifier. > > The problem is, there will be occurences in the foreground window before > the one which triggered the fontification. Redisplay will already have > passed this earlier buffer position. So I need to trigger another > redisplay immediately after the current one. > > What is the least bad way of doing this? You mean, the same identifier is somewhere in the same window-ful, but before the position where you suddenly decided your previous fontification was incorrect? (Why is this a reasonable scenario, btw?) > Currently, I'm thinking of something like the CC Mode fontification > functions setting a flag, and a repeating timer function testing this > flag every 0.025s, say, and triggering a redisplay if it's set. Why not simply call a one-time timer function that runs jit-lock-force-redisplay, when you decide that you need to refontify? jit-lock.el already does that in some cases. I see no reason to have a periodic timer and a flag, because the same code that sets the flag could instead arm a one-time timer. > One problem is knowing whether or not redisplay is currently active. Is > there a simple way to do this in Lisp? (I know there is in C.) I don't understand your problem here. Timers cannot run while redisplay works, because timers are only run by the main loop. So when a timer runs, redisplay by definition isn't.