mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-12-25 10:47:12 +00:00
lisp/org.el: Do not inline images when no graphic display is available
* lisp/org.el (org-preview-latex-fragment) (org-display-inline-images): Detect whether a graphic display is available before inlining images to prevent an error. Thanks to Rick Frankel for the report and the solution. > `org-startup-with-inline-images' is a customizable variable. The > problem is that if an org file is visited in a non-graphics buffer (or > batch), `org-display-inline-images' is called an throws an error > ("Non-X frame used"). > > This problem also occurs when e.g., `org-babel-after-execute-hook' is > set to 'org-display-inline-images (which can be mitigated by not > setting the hook in a non-x frame). > > Since the startup variable is a customization, and causes problems if > not set programatically, IMHO, the best solution would be to wrap the > `org-display-inline-images' function in a test so that is is a no-op > on non graphic displays:
This commit is contained in:
parent
73ce77f991
commit
168c5584f5
158
lisp/org.el
158
lisp/org.el
@ -18195,37 +18195,38 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
|
||||
(interactive "P")
|
||||
(unless buffer-file-name
|
||||
(user-error "Can't preview LaTeX fragment in a non-file buffer"))
|
||||
(org-remove-latex-fragment-image-overlays)
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(let (beg end at msg)
|
||||
(cond
|
||||
((or (equal subtree '(16))
|
||||
(not (save-excursion
|
||||
(re-search-backward org-outline-regexp-bol nil t))))
|
||||
(setq beg (point-min) end (point-max)
|
||||
msg "Creating images for buffer...%s"))
|
||||
((equal subtree '(4))
|
||||
(org-back-to-heading)
|
||||
(setq beg (point) end (org-end-of-subtree t)
|
||||
msg "Creating images for subtree...%s"))
|
||||
(t
|
||||
(if (setq at (org-inside-LaTeX-fragment-p))
|
||||
(goto-char (max (point-min) (- (cdr at) 2)))
|
||||
(org-back-to-heading))
|
||||
(setq beg (point) end (progn (outline-next-heading) (point))
|
||||
msg (if at "Creating image...%s"
|
||||
"Creating images for entry...%s"))))
|
||||
(message msg "")
|
||||
(narrow-to-region beg end)
|
||||
(goto-char beg)
|
||||
(org-format-latex
|
||||
(concat org-latex-preview-ltxpng-directory (file-name-sans-extension
|
||||
(file-name-nondirectory
|
||||
buffer-file-name)))
|
||||
default-directory 'overlays msg at 'forbuffer
|
||||
org-latex-create-formula-image-program)
|
||||
(message msg "done. Use `C-c C-c' to remove images.")))))
|
||||
(when (display-graphic-p)
|
||||
(org-remove-latex-fragment-image-overlays)
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(let (beg end at msg)
|
||||
(cond
|
||||
((or (equal subtree '(16))
|
||||
(not (save-excursion
|
||||
(re-search-backward org-outline-regexp-bol nil t))))
|
||||
(setq beg (point-min) end (point-max)
|
||||
msg "Creating images for buffer...%s"))
|
||||
((equal subtree '(4))
|
||||
(org-back-to-heading)
|
||||
(setq beg (point) end (org-end-of-subtree t)
|
||||
msg "Creating images for subtree...%s"))
|
||||
(t
|
||||
(if (setq at (org-inside-LaTeX-fragment-p))
|
||||
(goto-char (max (point-min) (- (cdr at) 2)))
|
||||
(org-back-to-heading))
|
||||
(setq beg (point) end (progn (outline-next-heading) (point))
|
||||
msg (if at "Creating image...%s"
|
||||
"Creating images for entry...%s"))))
|
||||
(message msg "")
|
||||
(narrow-to-region beg end)
|
||||
(goto-char beg)
|
||||
(org-format-latex
|
||||
(concat org-latex-preview-ltxpng-directory (file-name-sans-extension
|
||||
(file-name-nondirectory
|
||||
buffer-file-name)))
|
||||
default-directory 'overlays msg at 'forbuffer
|
||||
org-latex-create-formula-image-program)
|
||||
(message msg "done. Use `C-c C-c' to remove images."))))))
|
||||
|
||||
(defun org-format-latex (prefix &optional dir overlays msg at
|
||||
forbuffer processing-type)
|
||||
@ -18747,53 +18748,54 @@ When REFRESH is set, refresh existing images between BEG and END.
|
||||
This will create new image displays only if necessary.
|
||||
BEG and END default to the buffer boundaries."
|
||||
(interactive "P")
|
||||
(unless refresh
|
||||
(org-remove-inline-images)
|
||||
(if (fboundp 'clear-image-cache) (clear-image-cache)))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(setq beg (or beg (point-min)) end (or end (point-max)))
|
||||
(goto-char beg)
|
||||
(let ((re (concat "\\[\\[\\(\\(file:\\)\\|\\([./~]\\)\\)\\([^]\n]+?"
|
||||
(substring (org-image-file-name-regexp) 0 -2)
|
||||
"\\)\\]" (if include-linked "" "\\]")))
|
||||
(case-fold-search t)
|
||||
old file ov img type attrwidth width)
|
||||
(while (re-search-forward re end t)
|
||||
(setq old (get-char-property-and-overlay (match-beginning 1)
|
||||
'org-image-overlay)
|
||||
file (expand-file-name
|
||||
(concat (or (match-string 3) "") (match-string 4))))
|
||||
(when (image-type-available-p 'imagemagick)
|
||||
(setq attrwidth (if (or (listp org-image-actual-width)
|
||||
(null org-image-actual-width))
|
||||
(save-excursion
|
||||
(save-match-data
|
||||
(when (re-search-backward
|
||||
"#\\+attr.*:width[ \t]+\\([^ ]+\\)"
|
||||
(save-excursion
|
||||
(re-search-backward "^[ \t]*$\\|\\`" nil t)) t)
|
||||
(string-to-number (match-string 1))))))
|
||||
width (cond ((eq org-image-actual-width t) nil)
|
||||
((null org-image-actual-width) attrwidth)
|
||||
((numberp org-image-actual-width)
|
||||
org-image-actual-width)
|
||||
((listp org-image-actual-width)
|
||||
(or attrwidth (car org-image-actual-width))))
|
||||
type (if width 'imagemagick)))
|
||||
(when (file-exists-p file)
|
||||
(if (and (car-safe old) refresh)
|
||||
(image-refresh (overlay-get (cdr old) 'display))
|
||||
(setq img (save-match-data (create-image file type nil :width width)))
|
||||
(when img
|
||||
(setq ov (make-overlay (match-beginning 0) (match-end 0)))
|
||||
(overlay-put ov 'display img)
|
||||
(overlay-put ov 'face 'default)
|
||||
(overlay-put ov 'org-image-overlay t)
|
||||
(overlay-put ov 'modification-hooks
|
||||
(list 'org-display-inline-remove-overlay))
|
||||
(push ov org-inline-image-overlays)))))))))
|
||||
(when (display-graphic-p)
|
||||
(unless refresh
|
||||
(org-remove-inline-images)
|
||||
(if (fboundp 'clear-image-cache) (clear-image-cache)))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(setq beg (or beg (point-min)) end (or end (point-max)))
|
||||
(goto-char beg)
|
||||
(let ((re (concat "\\[\\[\\(\\(file:\\)\\|\\([./~]\\)\\)\\([^]\n]+?"
|
||||
(substring (org-image-file-name-regexp) 0 -2)
|
||||
"\\)\\]" (if include-linked "" "\\]")))
|
||||
(case-fold-search t)
|
||||
old file ov img type attrwidth width)
|
||||
(while (re-search-forward re end t)
|
||||
(setq old (get-char-property-and-overlay (match-beginning 1)
|
||||
'org-image-overlay)
|
||||
file (expand-file-name
|
||||
(concat (or (match-string 3) "") (match-string 4))))
|
||||
(when (image-type-available-p 'imagemagick)
|
||||
(setq attrwidth (if (or (listp org-image-actual-width)
|
||||
(null org-image-actual-width))
|
||||
(save-excursion
|
||||
(save-match-data
|
||||
(when (re-search-backward
|
||||
"#\\+attr.*:width[ \t]+\\([^ ]+\\)"
|
||||
(save-excursion
|
||||
(re-search-backward "^[ \t]*$\\|\\`" nil t)) t)
|
||||
(string-to-number (match-string 1))))))
|
||||
width (cond ((eq org-image-actual-width t) nil)
|
||||
((null org-image-actual-width) attrwidth)
|
||||
((numberp org-image-actual-width)
|
||||
org-image-actual-width)
|
||||
((listp org-image-actual-width)
|
||||
(or attrwidth (car org-image-actual-width))))
|
||||
type (if width 'imagemagick)))
|
||||
(when (file-exists-p file)
|
||||
(if (and (car-safe old) refresh)
|
||||
(image-refresh (overlay-get (cdr old) 'display))
|
||||
(setq img (save-match-data (create-image file type nil :width width)))
|
||||
(when img
|
||||
(setq ov (make-overlay (match-beginning 0) (match-end 0)))
|
||||
(overlay-put ov 'display img)
|
||||
(overlay-put ov 'face 'default)
|
||||
(overlay-put ov 'org-image-overlay t)
|
||||
(overlay-put ov 'modification-hooks
|
||||
(list 'org-display-inline-remove-overlay))
|
||||
(push ov org-inline-image-overlays))))))))))
|
||||
|
||||
(define-obsolete-function-alias
|
||||
'org-display-inline-modification-hook 'org-display-inline-remove-overlay "24.3")
|
||||
|
Loading…
Reference in New Issue
Block a user