1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-10-18 02:19:46 +00:00

org-toggle-inline-images-command: New command for C-c C-x C-v binding

* lisp/org.el (org-toggle-inline-images-command): New command to
toggle images.  Unlike the old `org-toggle-inline-image', it is more
flexible and default to toggling images at point/current entry.
* lisp/org-keys.el (org-mode-map): Bind C-c C-x C-v to the new
command.
* doc/org-manual.org (Images): Update the manual describing the new
command behaviour.
* etc/ORG-NEWS (=C-c C-x C-v= command toggling inline image display
has been reworked): Document the breaking change.

Link: https://list.orgmode.org/6461a84b.a70a0220.b6d36.5d00@mx.google.com/
This commit is contained in:
Ihor Radchenko 2024-08-12 12:11:17 +02:00
parent 6bf748e0d9
commit d51dc4aa29
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
4 changed files with 126 additions and 8 deletions

View File

@ -11806,14 +11806,21 @@ make sure that the link is on a line by itself and precede it with
Such images can be displayed within the buffer with the following
command:
- {{{kbd(C-c C-x C-v)}}} (~org-toggle-inline-images~) ::
- {{{kbd(C-c C-x C-v)}}} (~org-toggle-inline-images-command~) ::
#+kindex: C-c C-x C-v
#+findex: org-toggle-inline-images
#+findex: org-toggle-inline-images-command
Toggle the inline display of linked images in current section or at
point. With a prefix argument, toggle inline images in the whole
buffer. With double prefix argument, hide all the images in buffer.
By default, only the image links without description are displayed.
You can force displaying all the images using numeric argument to
toggle all the images in current section (~1~ argument) or the whole
buffer (~11~ argument).
#+vindex: org-startup-with-inline-images
Toggle the inline display of linked images. When called with a
prefix argument, also display images that do have a link
description. You can ask for inline images to be displayed at
You can ask for inline images to be displayed at
startup by configuring the variable
~org-startup-with-inline-images~[fn:: The variable
~org-startup-with-inline-images~ can be set within a buffer with the

View File

@ -18,6 +18,37 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
# require user action for most Org mode users.
# Sorted from most important to least important.
*** =C-c C-x C-v= command toggling inline image display has been reworked
Previously, =C-c C-x C-v= always toggled image display in the whole
buffer (or narrowed part of the buffer). With prefix argument, it
also forced displaying image links with description.
Now, =C-c C-x C-v= is bound to a new command
~org-toggle-inline-images-command~, which uses different defaults:
1. By default, it toggles image at point or, if there is no image at
point, images in current entry
2. When region is active, it is honored
3. =C-u= argument changed its meaning. Now, it forces toggling images
in the whole buffer
4. =C-u C-u= argument unconditionally hides all the images in buffer
5. Displaying images over links with description can be forced using
numeric argument:
- ~C-u 1~ for toggling all images at point/current entry
- ~C-u 11~ for toggling all images in buffer
The old ~org-toggle-inline-images~ command is still available. You
can bind it back to =C-c C-x C-v= by adding the following to you config:
#+begin_src emacs-lisp
(eval-after-load 'org-keys
(org-defkey org-mode-map (kbd "C-c C-x C-v") #'org-toggle-inline-images))
#+end_src
*** Org mode may throw an error when attempting to include remote unsafe resource noninteractively
Previously, when ~org-resource-download-policy~ is ~ask~ (default),

View File

@ -218,7 +218,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-command "org" (&optional arg 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" ())
@ -618,7 +618,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(org-defkey org-mode-map (kbd "C-c C-x x") #'org-dynamic-block-insert-dblock)
(org-defkey org-mode-map (kbd "C-c C-x C-u") #'org-dblock-update)
(org-defkey org-mode-map (kbd "C-c C-x C-l") #'org-latex-preview)
(org-defkey org-mode-map (kbd "C-c C-x C-v") #'org-toggle-inline-images)
(org-defkey org-mode-map (kbd "C-c C-x C-v") #'org-toggle-inline-images-command)
(org-defkey org-mode-map (kbd "C-c C-x C-M-v") #'org-redisplay-inline-images)
(org-defkey org-mode-map (kbd "C-c C-x \\") #'org-toggle-pretty-entities)
(org-defkey org-mode-map (kbd "C-c C-x C-b") #'org-toggle-checkbox)

View File

@ -16654,7 +16654,8 @@ SNIPPETS-P indicates if this is run to create snippet images for HTML."
(defvar-local org-inline-image-overlays nil)
;; Preserve when switching modes or when restarting Org.
;; If we clear the overlay list and later enable Or mode, the existing
;; image overlays will never be cleared by `org-toggle-inline-images'.
;; image overlays will never be cleared by `org-toggle-inline-images'
;; and `org-toggle-inline-images-command'.
(put 'org-inline-image-overlays 'permanent-local t)
(defun org--inline-image-overlays (&optional beg end)
@ -16667,6 +16668,85 @@ 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-command (&optional arg beg end)
"Toggle display of inline images without description at point.
When point is at an image link, toggle displaying that image.
Otherwise, toggle displaying images in current entry.
When region BEG..END is active, toggle displaying images in the
region.
With numeric prefix ARG 1, display images with description as well.
With prefix ARG `\\[universal-argument]', toggle displaying images in
the accessible portion of the buffer. With numeric prefix ARG 11, do
the same, but include images with description.
With prefix ARG `\\[universal-argument] \\[universal-argument]', hide
all the images in accessible portion of the buffer.
This command is designed for interactive use. From Elisp, you can
also use `org-toggle-inline-images'."
(interactive (cons current-prefix-arg
(when (use-region-p)
(list (region-beginning) (region-end)))))
(let* ((include-linked
(cond
((member arg '(nil (4) (16)) ) nil)
((member arg '(1 11)) 'include-linked)
(t 'include-linked)))
(interactive? (called-interactively-p 'any))
(toggle-images
(lambda (&optional beg end scope force-remove)
(let* ((beg (or beg (point-min)))
(end (or end (point-max)))
(old (org--inline-image-overlays beg end))
(scope (or scope (format "%d:%d" beg end))))
(if (or old force-remove)
(progn
(org-remove-inline-images beg end)
(when interactive?
(message
"[%s] Inline image display turned off (removed %d images)"
scope (length old))))
(org-display-inline-images include-linked t beg end)
(when interactive?
(let ((new (org--inline-image-overlays beg end)))
(message
(if new
(format "[%s] %d images displayed inline %s"
scope (length new)
(if include-linked "(including images with description)"
""))
(format "[%s] No images to display inline" scope))))))))))
(cond
((not (display-graphic-p))
(message "Your Emacs does not support displaying images!"))
;; Region selected :: toggle images in region.
((and beg end) (funcall toggle-images beg end "region"))
;; C-u or C-11 argument :: toggle images in the whole buffer.
((member arg '(11 (4))) (funcall toggle-images nil nil "buffer"))
;; C-u C-u argument :: unconditionally hide images in the buffer.
((equal arg '(16)) (funcall toggle-images nil nil "buffer" 'remove))
;; Argument nil or 1, no region selected :: toggle (display or hide
;; dwim) images in current section or image link at point.
((and (member arg '(nil 1)) (null beg) (null end))
(let ((context (org-element-context)))
;; toggle display of inline image link at point.
(if (org-element-type-p context 'link)
(funcall toggle-images
(org-element-begin context)
(org-element-end context)
"image at point")
(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))))
(funcall toggle-images beg end "current section")))))
;; Any other non-nil argument.
((not (null arg)) (funcall toggle-images beg end "region")))))
(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'."