emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [PATCH 2-v4] New: auto display inline images under subtree when `org


From: Ihor Radchenko
Subject: Re: [PATCH 2-v4] New: auto display inline images under subtree when `org-cycle'.
Date: Tue, 04 Oct 2022 12:36:32 +0800

"Christopher M. Miles" <numbchild@gmail.com> writes:

> I think the patch is finished. Please review, Ihor. Thanks for helping.

Thanks for the update!
I have cleaned the manual and ORG-NEWS wordings.

Upon reading the exported version of the manual, I realized that the
part in 2.2.1 Global and local cycling section sounds very awkward and
that we do not mention other cycle hooks like hiding archived
subtrees there. So, I decided to remove it.

I also rewrote the other part in a bit more direct tone and moved the
index entry.

(In general, it is useful to try reading the exported version of the
manual with the additions to check if things are still coherent - manual
is not just a collection of independent statements; we need to make sure
that it is not confusing the new readers).

I also updated the commit message adding the CHANGELOG entries about the
manual and ORG-NEWS.

However, upon testing your patch, tests are still failing on my side.
Can you please investigate?

I am attaching the updated version of the patch with my amendments.

Best,
Ihor

>From ab303eb5c007822d045f5e6ba3f00779c0abf1bc Mon Sep 17 00:00:00 2001
Message-Id: 
<ab303eb5c007822d045f5e6ba3f00779c0abf1bc.1664857900.git.yantar92@gmail.com>
From: stardiviner <numbchild@gmail.com>
Date: Wed, 28 Sep 2022 20:46:52 +0800
Subject: [PATCH] org.el: Support auto display inline images when cycling

* lisp/org.el (org-toggle-inline-images): Support region.
(org-display-inline-images): Fix refresh argument logic.
(org-remove-inline-images): Support region.

* lisp/org-keys.el (org-toggle-inline-images): Update arguments.

* lisp/org-cycle.el (org-cycle-inline-images-display): Add new option to
control whether auto display inline images when cycling.
(org-cycle-display-inline-images): Add new hook function to auto display
inline images when cycling.
(org-cycle-hook): Add `org-cycle-display-inline-images' into cycling
hook by default.

* testing/lisp/test-org-fold.el (test-org-fold/org-fold-display-inline-images):
Add test for inline image displaying when cycling.

* doc/org-manual.org (Exporting):
* etc/ORG-NEWS: Document the new option.
---
 doc/org-manual.org                            |   6 ++
 etc/ORG-NEWS                                  |   7 +++
 lisp/org-cycle.el                             |  38 ++++++++++++-
 lisp/org-keys.el                              |   2 +-
 lisp/org.el                                   |  21 ++++---
 .../images/Org mode logo mono-color.png       | Bin 0 -> 7523 bytes
 testing/lisp/test-org-fold.el                 |  52 ++++++++++++++++++
 7 files changed, 115 insertions(+), 11 deletions(-)
 create mode 100755 testing/examples/images/Org mode logo mono-color.png

diff --git a/doc/org-manual.org b/doc/org-manual.org
index a5fec8cf9..ec838df97 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -11470,6 +11470,12 @@ ** Images
   - When set to nil, try to get the width from an =#+ATTR.*= keyword
     and fall back on the original width if none is found.
 
+
+#+vindex: org-cycle-inline-images-display
+Inline images can also be displayed when cycling the folding state.
+When custom option ~org-cycle-inline-images-display~ is set, the
+visible inline images under subtree will be displayed automatically.
+
 ** Captions
 :PROPERTIES:
 :DESCRIPTION: Describe tables, images...
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 4728528f8..75a77378a 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -307,6 +307,13 @@ to pass the contents of a named code block as a string 
argument.
 The new property =ORG-IMAGE-ACTUAL-WIDTH= can override the global
 variable ~org-image-actual-width~ value for inline images display width.
 
+*** Outline cycling can now include inline image visibility
+
+New ~org-cycle-hook~ function ~org-cycle-display-inline-images~ for
+auto-displaying inline images in the visible parts of the subtree.
+This behavior is controlled by new custom option
+~org-cycle-inline-images-display~.
+
 *** New ~org-babel-tangle-finished-hook~ hook run at the very end of 
~org-babel-tangle~
 
 This provides a proper counterpart to ~org-babel-pre-tangle-hook~, as
diff --git a/lisp/org-cycle.el b/lisp/org-cycle.el
index 656ca83f2..212d25a44 100644
--- a/lisp/org-cycle.el
+++ b/lisp/org-cycle.el
@@ -208,8 +208,9 @@ (defcustom org-cycle-pre-hook nil
   :type 'hook)
 
 (defcustom org-cycle-hook '(org-cycle-hide-archived-subtrees
-                  org-cycle-show-empty-lines
-                  org-cycle-optimize-window-after-visibility-change)
+                            org-cycle-show-empty-lines
+                            org-cycle-optimize-window-after-visibility-change
+                            org-cycle-display-inline-images)
   "Hook that is run after `org-cycle' has changed the buffer visibility.
 The function(s) in this hook must accept a single argument which indicates
 the new state that was set by the most recent `org-cycle' command.  The
@@ -229,6 +230,13 @@ (defcustom org-cycle-open-archived-trees nil
   :group 'org-cycle
   :type 'boolean)
 
+(defcustom org-cycle-inline-images-display nil
+  "Non-nil means auto display inline images under subtree when cycling."
+  :group 'org-startup
+  :group 'org-cycle
+  :package-version '(Org . "9.6")
+  :type 'boolean)
+
 (defvar org-cycle-tab-first-hook nil
   "Hook for functions to attach themselves to TAB.
 See `org-ctrl-c-ctrl-c-hook' for more information.
@@ -776,6 +784,32 @@ (defun org-cycle-hide-archived-subtrees (state)
                       "Subtree is archived and stays closed.  Use \
 `\\[org-cycle-force-archived]' to cycle it anyway."))))))
 
+(defun org-cycle-display-inline-images (state)
+  "Auto display inline images under subtree when cycling.
+It works when `org-cycle-inline-images-display' is non-nil."
+  (when org-cycle-inline-images-display
+    (pcase state
+      ('children
+       (org-with-wide-buffer
+        (org-narrow-to-subtree)
+        ;; If has nested headlines, beg,end only from parent headline
+        ;; to first child headline which reference to upper
+        ;; let-binding `org-next-visible-heading'.
+        (org-display-inline-images
+         nil nil
+         (point-min) (progn (org-next-visible-heading 1) (point)))))
+      ('subtree
+       (org-with-wide-buffer
+        (org-narrow-to-subtree)
+        ;; If has nested headlines, also inline display images under all 
sub-headlines.
+        (org-display-inline-images nil nil (point-min) (point-max))))
+      ('folded
+       (org-with-wide-buffer
+        (org-narrow-to-subtree)
+        (if (numberp (point-max))
+            (org-remove-inline-images (point-min) (point-max))
+          (ignore)))))))
+
 (provide 'org-cycle)
 
 ;;; org-cycle.el ends here
diff --git a/lisp/org-keys.el b/lisp/org-keys.el
index d65379a72..79e34cbd1 100644
--- a/lisp/org-keys.el
+++ b/lisp/org-keys.el
@@ -204,7 +204,7 @@ (declare-function org-toggle-checkbox "org" (&optional 
toggle-presence))
 (declare-function org-toggle-radio-button "org" (&optional arg))
 (declare-function org-toggle-comment "org" ())
 (declare-function org-toggle-fixed-width "org" ())
-(declare-function org-toggle-inline-images "org" (&optional include-linked))
+(declare-function org-toggle-inline-images "org" (&optional include-linked beg 
end))
 (declare-function org-latex-preview "org" (&optional arg))
 (declare-function org-toggle-narrow-to-subtree "org" ())
 (declare-function org-toggle-ordered-property "org" ())
diff --git a/lisp/org.el b/lisp/org.el
index d438e76b1..26c6f50d8 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -16075,16 +16075,16 @@ (defun org-normalize-color (value)
 
 (defvar-local org-inline-image-overlays nil)
 
-(defun org-toggle-inline-images (&optional include-linked)
+(defun org-toggle-inline-images (&optional include-linked beg end)
   "Toggle the display of inline images.
 INCLUDE-LINKED is passed to `org-display-inline-images'."
   (interactive "P")
   (if org-inline-image-overlays
       (progn
-       (org-remove-inline-images)
+       (org-remove-inline-images beg end)
        (when (called-interactively-p 'interactive)
          (message "Inline image display turned off")))
-    (org-display-inline-images include-linked)
+    (org-display-inline-images include-linked nil beg end)
     (when (called-interactively-p 'interactive)
       (message (if org-inline-image-overlays
                   (format "%d images displayed inline"
@@ -16174,8 +16174,8 @@ (defun org-display-inline-images (&optional 
include-linked refresh beg end)
 buffer boundaries with possible narrowing."
   (interactive "P")
   (when (display-graphic-p)
-    (unless refresh
-      (org-remove-inline-images)
+    (when refresh
+      (org-remove-inline-images beg end)
       (when (fboundp 'clear-image-cache) (clear-image-cache)))
     (let ((end (or end (point-max))))
       (org-with-point-at (or beg (point-min))
@@ -16326,11 +16326,16 @@ (defun org-display-inline-remove-overlay (ov after 
_beg _end &optional _len)
       (delete ov org-inline-image-overlays)
       (delete-overlay ov))))
 
-(defun org-remove-inline-images ()
+(defun org-remove-inline-images (&optional beg end)
   "Remove inline display of images."
   (interactive)
-  (mapc #'delete-overlay org-inline-image-overlays)
-  (setq org-inline-image-overlays nil))
+  (let* ((beg (or beg (point-min)))
+         (end (or end (point-max)))
+         (overlays (overlays-in beg end)))
+    (dolist (ov overlays)
+      (when (memq ov org-inline-image-overlays)
+        (setq org-inline-image-overlays (delq ov org-inline-image-overlays))
+        (delete-overlay ov)))))
 
 (defvar org-self-insert-command-undo-counter 0)
 (defvar org-speed-command nil)
diff --git a/testing/examples/images/Org mode logo mono-color.png 
b/testing/examples/images/Org mode logo mono-color.png
new file mode 100755
index 
0000000000000000000000000000000000000000..9ac57e6a205257fd2fd21944a025190aa2f2db49
GIT binary patch
literal 7523
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

literal 0
HcmV?d00001

diff --git a/testing/lisp/test-org-fold.el b/testing/lisp/test-org-fold.el
index 0fa800dee..c1c9e835e 100644
--- a/testing/lisp/test-org-fold.el
+++ b/testing/lisp/test-org-fold.el
@@ -604,6 +604,58 @@ (ert-deftest test-org-fold/org-catch-invisible-edits ()
             (org-fold-check-before-invisible-edit kind)
             (should (org-invisible-p (1- (point))))))))))
 
+(ert-deftest test-org-fold/org-fold-display-inline-images ()
+  "Test inline images displaying when cycling."
+  (let* ((org-cycle-inline-images-display t)
+         (images-dir (expand-file-name "examples/images/" org-test-dir))
+         (org-logo-image (expand-file-name "Org mode logo mono-color.png" 
images-dir)))
+    ;; `org-cycle' -(state)-> `'children' display child inline images.
+    (org-test-with-temp-text
+        (format "<point>* Heading 1
+[[file:%s]]" org-logo-image)
+      (org-overview)
+      (org-fold-show-children)
+      (run-hook-with-args 'org-cycle-hook 'children)
+      (org-next-link)
+      (should (overlays-at (point)))
+      (org-toggle-inline-images)
+      (should-not (overlays-at (point))))
+    
+    ;; `org-cycle' -(state)-> `'subtree' display subtrees inline images.
+    (org-test-with-temp-text
+        (format "<point>* Heading 1
+[[file:%s]]
+** Subheading 1
+[[file:%s]]
+** Subheading 2
+[[file:%s]]" org-logo-image org-logo-image org-logo-image)
+      (org-overview)
+      (org-fold-show-subtree)
+      (run-hook-with-args 'org-cycle-hook 'subtree)
+      (org-next-link)
+      (org-next-link)
+      (should (overlays-at (point)))
+      (org-toggle-inline-images)
+      (should-not (overlays-at (point))))
+    
+    ;; `org-cycle' -(state)-> `'folded' remove inline image overlays.
+    (org-test-with-temp-text
+        (format "<point>* Heading 1
+[[file:%s]]
+** Subheading 1
+[[file:%s]]
+** Subheading 2
+[[file:%s]]" org-logo-image org-logo-image org-logo-image)
+      (org-overview)
+      (org-show-subtree)
+      (org-fold-subtree t)
+      (run-hook-with-args 'org-cycle-hook 'folded)
+      (should (null org-inline-image-overlays))
+      (should (null (overlays-in (point-min) (point-max))))
+      (org-show-subtree)
+      (should-not org-inline-image-overlays)
+      (should-not (overlays-in (point-min) (point-max))))))
+
 (provide 'test-org-fold)
 
 ;;; test-org-fold.el ends here
-- 
2.35.1


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>

reply via email to

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