emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 2c7224f 1/2: Allow reveal.el to toggle `display' pr


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master 2c7224f 1/2: Allow reveal.el to toggle `display' properties
Date: Sat, 21 Sep 2019 06:04:09 -0400 (EDT)

branch: master
commit 2c7224f8942e6338ea9dce727a7b573bf4f3f5a6
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    Allow reveal.el to toggle `display' properties
    
    * lisp/reveal.el (reveal-open-new-overlays): Allow also toggling
    `displa' overlay properties (bug#28785).
---
 etc/NEWS       |  5 +++++
 lisp/reveal.el | 34 +++++++++++++++++++++++++---------
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index e8d3dff..02fe93a 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2130,6 +2130,11 @@ valid event type.
 
 * Lisp Changes in Emacs 27.1
 
+** 'reveal-mode' can now also be used for more than to toggle between
+invisible and visible: It can also toggle 'display' properties in
+overlays.  This is only done on 'display' properties that have the
+'reveal-toggle-invisible' property set.
+
 +++
 ** 'process-contact' now takes an optional NO-BLOCK parameter to allow
 not waiting for a process to be set up.
diff --git a/lisp/reveal.el b/lisp/reveal.el
index 67740c8..5483073 100644
--- a/lisp/reveal.el
+++ b/lisp/reveal.el
@@ -26,6 +26,11 @@
 ;; is always visible.  When point enters a region of hidden text,
 ;; `reveal-mode' temporarily makes it visible.
 ;;
+;; Overlays can also use the `display' property.  For them to be
+;; revealed, the `reveal-toggle-invisible' property also has to be
+;; present, and should be a function to toggle between having a
+;; display property and not.
+;;
 ;; This is normally used in conjunction with `outline-minor-mode',
 ;; `hs-minor-mode', `hide-ifdef-mode', ...
 ;;
@@ -103,21 +108,32 @@ Each element has the form (WINDOW . OVERLAY).")
                          (overlays-at (point))))
         (setq old-ols (delq ol old-ols))
         (when (overlay-start ol)        ;Check it's still live.
-          (let ((inv (overlay-get ol 'invisible)) open)
-            (when (and inv
-                       ;; There's an `invisible' property.  Make sure it's
-                       ;; actually invisible, and ellipsized.
-                       (and (consp buffer-invisibility-spec)
-                            (cdr (assq inv buffer-invisibility-spec)))
+          ;; We either have an invisible overlay, or a display
+          ;; overlay.  Always reveal invisible text, but only reveal
+          ;; display properties if `reveal-toggle-invisible' is
+          ;; present.
+          (let ((inv (overlay-get ol 'invisible))
+                (disp (and (overlay-get ol 'display)
+                           (overlay-get ol 'reveal-toggle-invisible)))
+                open)
+            (when (and (or (and inv
+                                ;; There's an `invisible' property.
+                                ;; Make sure it's actually invisible,
+                                ;; and ellipsized.
+                                (and (consp buffer-invisibility-spec)
+                                     (cdr (assq inv 
buffer-invisibility-spec))))
+                           disp)
                        (or (setq open
                                  (or (overlay-get ol 'reveal-toggle-invisible)
                                      (and (symbolp inv)
                                           (get inv 'reveal-toggle-invisible))
-                                     (overlay-get ol 
'isearch-open-invisible-temporary)))
+                                     (overlay-get
+                                      ol 'isearch-open-invisible-temporary)))
                            (overlay-get ol 'isearch-open-invisible)
                            (and (consp buffer-invisibility-spec)
-                                (cdr (assq inv buffer-invisibility-spec))))
-                       (overlay-put ol 'reveal-invisible inv))
+                                (cdr (assq inv buffer-invisibility-spec)))))
+              (when inv
+                (overlay-put ol 'reveal-invisible inv))
               (push (cons (selected-window) ol) reveal-open-spots)
               (if (null open)
                   (overlay-put ol 'invisible nil)



reply via email to

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