From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id wFX6HFq4O2OsGAEAbAwnHQ (envelope-from ) for ; Tue, 04 Oct 2022 06:36:42 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id 6KcHHVq4O2OlaAEAauVa8A (envelope-from ) for ; Tue, 04 Oct 2022 06:36:42 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id EAF103D709 for ; Tue, 4 Oct 2022 06:36:40 +0200 (CEST) Received: from localhost ([::1]:60448 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofZfb-0007Kh-RE for larch@yhetil.org; Tue, 04 Oct 2022 00:36:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofZek-0007KQ-1M for emacs-orgmode@gnu.org; Tue, 04 Oct 2022 00:35:46 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:42563) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ofZeg-0000CI-JE for emacs-orgmode@gnu.org; Tue, 04 Oct 2022 00:35:45 -0400 Received: by mail-pg1-x530.google.com with SMTP id e129so11700483pgc.9 for ; Mon, 03 Oct 2022 21:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date; bh=ib0iQRFII4MvvvBQPH+GNuflge2nXV63+n9AtdqfVag=; b=j3u4k5pQlgolsOR8gGXHE8WT2EpY07MHWDCxSENUZryEYF/6AAWf60YpfdNSxwiVh9 oG67oGTYC7Q0biR5RuXWsg0zMzazOZIFzTexkGqPpYUaNjiAQe5S8Aaw9ZbwuGLJ39sy OgGH6c6Vzb9NBRIROtUgmMGigbdDNZfIbXr0jeoOqtHb1v08ZX/e7L6w0BWf89NHZgXl 6Ed3KwaauXF8D44zu1CcmG7GdumnwYtXbiatuKosnFYQXBrhcpylmFh+kkbFhUyUe9Tn JAKp1NI7H8YsytJ22VBZA6Wuveh9Zus+Ebb5ZChOs9HUp8g/GrlmhsSmloT1ndeXZLny PnSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date; bh=ib0iQRFII4MvvvBQPH+GNuflge2nXV63+n9AtdqfVag=; b=Tkn8dHaMQZu6eHnn5jlWeiRCRTdJ57X107agfQ9X+rRxGtcAQEdoibmuwR/WcqniuW WsR4rAOjr6+rM6rrq8BGAl0JkpMSOw/PLCCkGLHgWS+AfXSU33vxJzja5UKPzMXl8n/o 4efe85xo3ZMbfZ2PXhbQ/rNW209C5Yxwq5Q6tf42UT61CRAcmvMCIybaLKajito5BXod yDenc9IyTIq2RrIcgKL8PuHezWPR4s9Z8j/dYsm4RRfIewFp3Ut2mYLeXlUkHdvgUOUU tmb1iMc/SjiGV/1EEjwhzv2BZnSC/b+9UZsbtaodlORlvNmUZsAcKu521GzhwdMhoQJ3 zRwA== X-Gm-Message-State: ACrzQf2lw4aLCW3gN8rOlydxZcaAvVBW7Aw0nsDl2sJzew00V427r3CY rqlVQ6AxeUAMer7b11ps40U= X-Google-Smtp-Source: AMsMyM63RsClRjRlHgI0tVPFOX4n8M7ziPPsj6Hf7rBw7d+wgVSK9ODbMpXD6TH4ferLnQ4btC247A== X-Received: by 2002:a63:c1f:0:b0:41a:9b73:a89e with SMTP id b31-20020a630c1f000000b0041a9b73a89emr21478005pgl.342.1664858139622; Mon, 03 Oct 2022 21:35:39 -0700 (PDT) Received: from localhost ([1.83.154.214]) by smtp.gmail.com with ESMTPSA id c3-20020a170903234300b0017834a6966csm8110288plh.176.2022.10.03.21.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Oct 2022 21:35:38 -0700 (PDT) From: Ihor Radchenko To: "Christopher M. Miles" Cc: emacs-orgmode@gnu.org Subject: Re: [PATCH 2-v4] New: auto display inline images under subtree when `org-cycle'. In-Reply-To: <633a67d8.050a0220.733e8.e57dSMTPIN_ADDED_BROKEN@mx.google.com> References: <631e92ee.050a0220.f9c18.92f5SMTPIN_ADDED_BROKEN@mx.google.com> <87y1uovp9w.fsf@localhost> <631fe1c9.050a0220.3ab2b.3f52SMTPIN_ADDED_BROKEN@mx.google.com> <87bkrhwc42.fsf@localhost> <6322b0a8.050a0220.59bb8.6923SMTPIN_ADDED_BROKEN@mx.google.com> <87y1uluir1.fsf@localhost> <6322f5ad.c80a0220.5e936.823eSMTPIN_ADDED_BROKEN@mx.google.com> <878rmesf64.fsf@localhost> <6329c8b0.050a0220.412d.0a6cSMTPIN_ADDED_BROKEN@mx.google.com> <87tu51xivh.fsf@localhost> <633454e3.050a0220.7278b.1fa5SMTPIN_ADDED_BROKEN@mx.google.com> <87y1u298yn.fsf@localhost> <63353c69.370a0220.67788.e8a1SMTPIN_ADDED_BROKEN@mx.google.com> <87o7ux4khz.fsf@localhost> <6336a955.050a0220.4e72e.2b23SMTPIN_ADDED_BROKEN@mx.google.com> <87bkqw2pzc.fsf@localhost> <63380f57.370a0220.a9d9a.dee8SMTPIN_ADDED_BROKEN@mx.google.com> <878rlxzj5i.fsf@localhost> <633a67d8.050a0220.733e8.e57dSMTPIN_ADDED_BROKEN@mx.google.com> Date: Tue, 04 Oct 2022 12:36:32 +0800 Message-ID: <87sfk4urvz.fsf@localhost> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=yantar92@gmail.com; helo=mail-pg1-x530.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1664858201; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=ib0iQRFII4MvvvBQPH+GNuflge2nXV63+n9AtdqfVag=; b=bMXy7+W6mySfX3xIxfgwdiPxYCKaCYpRZbVUm1i3eqKg2UmZBuovX67MzSex6K2ZCF4nwv eqh/OwwHc+SDQE4lcqU9X2b/WBVZvFU60dC2W8o1mGwAEqcvJ46Kp7uzIo5h/sLmLOEYcD 1woj6JUQgm+7rwWO4NBKAzaSVWd5KWd91gdCxg7OOPtS5Daot80j9dvxyRNj+6O6VpFZcz lMeQpTZVWUi62W/p6a3eEx6wfNMGPKC+ce5srLfGBA9LfHFHN+eq97OzYWRvWxl/jNehIr kJ3avP7okYrpf6gOKfGmmRNoJeYSkH37QSim6GCEpv65O5ksy6W1qywXoMJxFw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1664858201; a=rsa-sha256; cv=none; b=uXrbFGO5ETFStoYhVqM6Wmyy+t93jhdUAz9XIzaD/NHd6fDs7n2gFiBPqUNhgntes7If/n ACBrVgjAg0UUb6A9cIVAdN2WUIOHosMkmc9bracFcMPIwFDnIcwc3ZBSRpJ89nhjY40bqv omD5lEJzisDmpBb9ljCOILhTh58V5LfObmK0j5lCNwCOZscDMK6R/KrOIHyIBM+uC8E9TK Pg6k0k2FKcFNamROS9TPqU34PdpJmkipQcQggrWB2MiB7C0f+yXVJ/y+4TMm8X5oxI/qHA oj5PVYBbRKa/JFHSN8m8ZLHDrvWJMHsZJ+MAQ6L1wSlt9mfh370Z9wOebXD13A== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=j3u4k5pQ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -1.86 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=j3u4k5pQ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: EAF103D709 X-Spam-Score: -1.86 X-Migadu-Scanner: scn1.migadu.com X-TUID: pplmP+Bnig3L --=-=-= Content-Type: text/plain "Christopher M. Miles" 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 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-org.el-Support-auto-display-inline-images-when-cycli.patch >From ab303eb5c007822d045f5e6ba3f00779c0abf1bc Mon Sep 17 00:00:00 2001 Message-Id: From: stardiviner 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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

#{quj_+|17J-kb7}c7l2dWFflO;bXv` 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 `'children' display child inline images. + (org-test-with-temp-text + (format "* 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 "* 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 "* 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 --=-=-= Content-Type: text/plain -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at . Support Org development at , or support my work at --=-=-=--