From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: are there hooks for text becoming visible or hidden in a given window? Date: Thu, 24 Feb 2022 19:10:39 -0500 Message-ID: References: <06e7c939da37479902e9a935fbaf487a@basiscraft.com> Reply-To: Stefan Monnier Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33590"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:7c8qKBZbPFtGymmh9qNRhJTgD5c= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Fri Feb 25 01:12:58 2022 Return-path: Envelope-to: geh-help-gnu-emacs@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 1nNOED-0008cF-8q for geh-help-gnu-emacs@m.gmane-mx.org; Fri, 25 Feb 2022 01:12:57 +0100 Original-Received: from localhost ([::1]:54702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNOEB-00015W-MR for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 24 Feb 2022 19:12:55 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:43068) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNOCB-00009u-Qt for help-gnu-emacs@gnu.org; Thu, 24 Feb 2022 19:10:51 -0500 Original-Received: from ciao.gmane.io ([116.202.254.214]:43044) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNOC9-0000kf-PT for help-gnu-emacs@gnu.org; Thu, 24 Feb 2022 19:10:51 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1nNOC6-0006AT-7n for help-gnu-emacs@gnu.org; Fri, 25 Feb 2022 01:10:46 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:136183 Archived-At: > Is there a way to mark a region of text in a buffer, so that when that text > becomes visible in any window, or when it stops being visible, a hook is > called and provided the location of the text in the buffer, and the window > in which its visibility has changed? To detect when a chunk of buffer is visible, you can use jit-lock. It's not exact (it will sometimes trigger even if the chunk is not actually visible), but it's probably the closest we have (especially if you want it to be efficient even where there are thousands of such buffer-chunks to "monitor"). > but disappear from the second window if the link is deleted or > scrolled outside of the window. We don't have anything for that, no. I'd suggest you use a post-command-hook that monitors which of those thingies is still visible. I have been known to propose the introduction of a `post-redisplay-function` which would work like `pre-redispay-function` except it's run after the redisplay. I think I have a patch for that lying around (IIRC originally written to try and improve the display of "tofu" by adding a `help-echo` property to those characters). I guess you could use such a thing as well (and potentially for both uses). Changing a buffer in response to changes to the display of another window isn't well supported by the redisplay (because it means you need a redisplay cycle right after a redisplay cycle), so you'd need to force a new redisplay "by hand". There might also be some questions about what "visible" means. E.g. is a chunk of buffer "visible" if it's between `window-start` and `window-end` but is covered by an `invisible` property? Or if it's (horizontally) scrolled out of view? Stefan