Ihor Radchenko <yanta...@posteo.net> writes: > "Christopher M. Miles" <numbch...@gmail.com> writes: > >>> I think that instead of changing the existing function, we can convert >>> your patch into a new function `org-toggle-inline-images-command' that >>> will be free to alter the argument order. We can then re-bind that >>> function in org-keys to make it used by default, but only interactively. >>> >> I don't think so, the patch main purpose is for improve image refreshing >> after babel result image displaying. Because the function is hooked by >> other ob-* packages. Another purpose is headline level images displaying. >> So modifying this function is the only way. > > Fair point. > Then, for backward compatibility, we may treat any non-nil, non-list > (like '(4), '(16), '(64)), non-number (like 1, 11) value as > INCLUDE-LINKED. This way, the existing calls like > (org-toggle-inline-images t) will not be broken. > > Also, the signature should be > > (defun org-toggle-inline-images (&optional arg beg end include-linked) > > So that the meaning of the second and third argument is unchanged. >
I prefer this compromise result. I updated the patch, Please review it whether it's correct. >>> As for displaying linked images, what about something like >>> >>> >>> C-1 C-c C-x C-v being equivalent of >>> C-c C-x C-v + INCLUDE-LINKED=t >>> (display in current section/region, with linked) >>> >>> and >>> >>> C-11 C-c C-x C-v being equivalent of >>> C-u C-u C-c C-x C-v + INCLUDE-LINKED=t >>> (display in the whole buffer, with linked) >>> >> Don't know, I have not use it this way. I think INCLUDE-LINKED is just a >> option argument for function org-display-inline-images. No need to be >> available for toggle in interactive command. An option like >> org-inline-images-include-linked is enough. > > Sorry, but ignoring backwards compatibility is not an option. > If you personally haven't used some feature, it does not mean that > others also didn't. > > We can make limited compromises, but should try our best not to break > things that were working before. > See https://bzg.fr/en/the-software-maintainers-pledge/ > I agree with backward compatibility is very important. I did a source code statistics researching of using the function org-toggle-inline-images at two places: - GitHub: https://github.com/search?q=org-toggle-inline-images&ref=opensearch&type=code&p=3 (Only package scimax incoke this function with INCLUDE-LINKED argument t) - My installed Emacs packages, NO package invoke this function with argument INCLUDE-LINKED. So lucky this change will not affect lot. >>>> +If cursor is on an inline image link, display the inline image. >>>> +If there is none, remove it otherwise. >>> >>> I do not quite understand what the last line is trying to say. >> >> Emmm, I forget the meaning of it. I read the docstring again, seems it >> can be deleted. I will delete it in my patch. > >> After yesterday night studying source code, I still can't figure out >> solution. So I pass this patch to you. Wait you to finish the unfinished >> part of path. > > I hope that now you have enough information to update the patch. > Let me know if not. If this patch is still not ok, really hope you can edit my patch.
From a2707a0f92c76188c3ebb412fe2b57788b50ca9a Mon Sep 17 00:00:00 2001 From: stardiviner <numbch...@gmail.com> Date: Mon, 22 May 2023 16:25:33 +0800 Subject: [PATCH] org: Improve inline images displaying like LaTeX previewing * lisp/org.el (org-toggle-inline-images): Implement LaTeX previewing same logic in inline images toggle displaying. --- lisp/org-keys.el | 2 +- lisp/org.el | 95 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 81 insertions(+), 16 deletions(-) diff --git a/lisp/org-keys.el b/lisp/org-keys.el index 38fac57d8..7b3b84af4 100644 --- a/lisp/org-keys.el +++ b/lisp/org-keys.el @@ -204,7 +204,7 @@ (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 beg end)) +(declare-function org-toggle-inline-images "org" (&optional arg beg end include-linked)) (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 e72cf056a..c01952b97 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -16160,22 +16160,87 @@ SNIPPETS-P indicates if this is run to create snippet images for HTML." (when (memq ov org-inline-image-overlays) (push ov result))))) -(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'." +(defun org-toggle-inline-images (&optional arg beg end include-linked) + "Toggle the display of inline images at point. +INCLUDE-LINKED is passed to `org-display-inline-images'. + +If cursor is on an inline image link, display the inline image. +If there is no inline image link at point, display all inline images in the current section. +With an active region, display inline images in the region. + +With a `\\[universal-argument]' prefix argument ARG, clear inline +images in the current section. + +With a `\\[universal-argument] \\[universal-argument]' prefix + argument ARG, display all inline images in the buffer. + +With a `\\[universal-argument] \\[universal-argument] \ +\\[universal-argument]' prefix argument ARG, clear all inline +images in the buffer." (interactive "P") - (if (org--inline-image-overlays beg end) - (progn - (org-remove-inline-images beg end) - (when (called-interactively-p 'interactive) - (message "Inline image display turned off"))) - (org-display-inline-images include-linked nil beg end) - (when (called-interactively-p 'interactive) - (let ((new (org--inline-image-overlays beg end))) - (message (if new - (format "%d images displayed inline" - (length new)) - "No images to display inline")))))) + (cond + ((not (display-graphic-p)) nil) + ;; Clear whole buffer inline images. + ((equal arg '(64)) + (org-remove-inline-images (point-min) (point-max)) + (message "Inline images preview disabled in buffer.")) + ;; Display whole buffer inline images. + ((equal arg '(16)) + (message "Displaying all inline images in buffer...") + (let ((include-linked t)) ; assume INCLUDE-LINKED be t here for backward compatibility. + (org-display-inline-images include-linked nil (point-min) (point-max))) + (message "Displaying all inline images in buffer... done.")) + ;; Clear current section. + ((equal arg '(4)) + (let* ((beg (if (use-region-p) + (region-beginning) + (if (org-before-first-heading-p) (point-min) + (save-excursion + (org-with-limited-levels (org-back-to-heading t) (point)))))) + (end (if (use-region-p) + (region-end) + (org-with-limited-levels (org-entry-end-position)))) + (inline-images (org--inline-image-overlays beg end))) + (org-remove-inline-images beg end) + (message "%d inline images display removed." (length inline-images)))) + ;; [M-1] / [C-1] argument for linked images like: + ;; [[https://orgmode.org/resources/img/org-mode-unicorn.svg][description]] + ((equal arg 1) + (let ((current-prefix-arg nil) + (include-linked t)) ; assume INCLUDE-LINKED be t here for backward compatibility. + (org-toggle-inline-images nil nil nil include-linked))) + ;; Display region selected inline images. + ((use-region-p) + (let ((beg (region-beginning)) + (end (region-end))) + (if (org--inline-image-overlays beg end) + (progn + (org-remove-inline-images beg end) + (message "Inline images in region removed.")) + (message "Displaying inline images in region...") + (org-display-inline-images include-linked t beg end) + (message "Displaying inline images in region... done.")))) + ;; Toggle display of inline image link at point. + ((let ((context (org-element-context))) + (and (memq (org-element-type context) '(link)) + (let ((beg (org-element-property :begin context)) + (end (org-element-property :end context))) + (if (org--inline-image-overlays beg end) + (progn + (org-remove-inline-images beg end) + (message "Display inline image at point removed.")) + (org-display-inline-images include-linked t beg end) + (message "Displaying inline image at point ... done.")) + t)))) + ;; Display inline images under current section. + (t + (let ((beg (if (org-before-first-heading-p) (point-min) + (save-excursion + (org-with-limited-levels (org-back-to-heading t) (point))))) + (end (org-with-limited-levels (org-entry-end-position)))) + (message "Displaying inline images in section...") + (org-display-inline-images include-linked t beg end) + (message "Displaying inline images in section... done."))))) (defun org-redisplay-inline-images () "Assure display of inline images and refresh them." -- 2.39.2 (Apple Git-143)
-- [ stardiviner ] I try to make every word tell the meaning that I want to express without misunderstanding. Blog: https://stardiviner.github.io/ IRC(libera.chat, freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
signature.asc
Description: PGP signature