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:
Grégoire Jadi 2013-05-01 19:19:57 +02:00
parent 73ce77f991
commit 168c5584f5
1 changed files with 80 additions and 78 deletions

View File

@ -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")