Org-mode mailing list
 help / color / mirror / Atom feed
* Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)]
@ 2021-04-06 21:34 Daniel E. Doherty
  2021-04-07  1:14 ` Nick Dokos
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel E. Doherty @ 2021-04-06 21:34 UTC (permalink / raw)
  To: emacs-orgmode


I have a hook function (cribbed from Emacs Stack Exchange) to re-display 
inline images in the current subtree after execution of a source block 
if the header argument contains, ':results graphics'.  As its last 
action, it calls:

(org-display-inline-images nil nil beg end)

where beg and end have been set to the bounds of the current subtree.

This works perfectly if the image file is in the current directory.  For
example, here is a block that displays as expected:

#+begin_SRC dot :file lehman.svg :cmdline -Kdot -Tsvg :results graphics
  digraph lehman {
    Thomas [shape=circle];
    TideWater [shape = box, label="Tide Water\nSecurities\n(Issuer)"];
    Lehman [shape = box];
    Thomas -> TideWater [label="Director"];
    Lehman -> TideWater [label="Shareholder"];
    Thomas -> Lehman [label="Partner"];
  }
#+end_SRC

However, if I add a :dir header, it ceases to work:

#+begin_SRC dot :dir dot :file lehman.svg :cmdline -Kdot -Tsvg :results 
 graphics
  digraph lehman {
    Thomas [shape=circle];
    TideWater [shape = box, label="Tide Water\nSecurities\n(Issuer)"];
    Lehman [shape = box];
    Thomas -> TideWater [label="Director"];
    Lehman -> TideWater [label="Shareholder"];
    Thomas -> Lehman [label="Partner"];
  }
#+end_SRC

#+RESULTS:
[[file:dot/lehman.svg]]

I have run edebug on the function, and the only difference I can detect
is the location of the image file in a subdirectory called 'dot'.

Here is my hook function, just for the record:

#+begin_SRC emacs-lisp
  (setq org-startup-with-inline-images t)
  (require 'subr-x)
  (defun ded:org-babel-display-subtree ()
    "Redisplay inline images in subtree if cursor in source block with 
    :result graphics."

    (when (org-in-src-block-p)
      (let (beg end)
        (save-excursion
          (org-mark-subtree)
          (setq beg (point))
          (setq end (mark)))
        (when-let ((info (org-babel-get-src-block-info t))
                   (params (org-babel-process-params (nth 2 info)))
                   (result-params (cdr (assq :result-params params)))
                   ((member "graphics" result-params)))
          (org-display-inline-images nil nil beg end)))))

  (add-hook 'org-babel-after-execute-hook 
  #'ded:org-babel-display-subtree)
#+end_SRC


------------------------------------------------------------------------



Emacs  : GNU Emacs 28.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 
3.24.20, cairo version 1.16.0)
 of 2021-02-09
Package: Org mode version 9.4.4 (9.4.4-33-g5450d6-elpaplus @ 
/home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)

current state:
==============
(setq
 org-link-elisp-confirm-function 'yes-or-no-p
 org-shiftdown-final-hook '(windmove-down)
 org-directory "/home/ded/work/Projects/"
 org-noter-notes-window-location 'other-frame
 org-caldav-backup-file 
 "/home/ded/.emacs.d/ded/data/org-caldav-backup.org"
 org-crypt-key "C0A9F2F0"
 org-bibtex-headline-format-function #[257 "\300\236A\207" [:title] 3 
 "\n\n(fn ENTRY)"]
 org-log-done 'time
 org-log-into-drawer t
 org-startup-folded 'overview
 org-babel-after-execute-hook '(ded:org-babel-display-subtree)
 org-link-abbrev-alist '(("bugzilla" 
 . "http://10.1.2.9/bugzilla/show_bug.cgi?id=")
                         ("google" . "http://www.google.com/search?q=")
                         ("gmap" . "http://maps.google.com/maps?q=%s")
                         ("omap" . "http://nominatim.openstreetmap.org/search?q=%s&polygon=1")
                         ("ads" .
                          "http://adsabs.harvard.edu/cgi-bin/nph-abs_connect?author=%s&db_key=AST")
                         )
 org-agenda-files "/home/ded/work/Projects/agenda-files"
 org-capture-templates '(("t" "Todo Item" entry (file+headline 
 "Office.org" "Tasks")
                          "* TODO %? \n  %a")
                         ("a" "Appointment" entry (file+headline 
                         "Office.org" "Appointments")
                          "* %? \n %a")
                         ("p" "Phone Call Log" entry (file+headline 
                         "Office.org" "Phone calls")
                          "* %U Phone call with %^{Name|%:name} \n\n 
                          %?")
                         ("l" "Link" entry (file+headline "Links.org" 
                         "Links")
                          "* %a %^g\n %?\n %T\n %i")
                         ("i" "Invoice" entry (file+headline 
                         "Office.org" "Invoices")
                          "* %^T  %^G\n  %?")
                         ("j" "Journal Entry" entry (file+olp+datetree 
                         "Journal.org")
                          "* Entered on %U\n %i%?\n%a")
                         )
 org-format-latex-options '(:foreground default :background default 
 :scale 1.6 :html-foreground
                            "Black" :html-background "Transparent" 
                            :html-scale 1.0 :matchers
                            ("begin" "$1" "$" "$$" "\\(" "\\["))
 org-babel-noweb-wrap-end "»"
 org-refile-targets '((nil :maxlevel . 3) (org-agenda-files :maxlevel 
 . 3))
 org-export-before-parsing-hook '(org-attach-expand-links)
 org-icalendar-exclude-tags '("noical")
 org-refile-use-outline-path 'file
 org-finalize-agenda-hook '(ded:org-agenda-to-appt)
 org-archive-hook '(org-attach-archive-delete-maybe)
 org-footnote-auto-adjust t
 org-file-apps '((auto-mode . emacs) ("\\.mm\\'" . default) 
 ("\\.x?html?\\'" . default)
                 ("\\.pdf\\'" . default) ("ods" . "oocalc"))
 org-odt-format-inlinetask-function 
 'org-odt-format-inlinetask-default-function
 org-ascii-format-drawer-function #[771 "\207" [] 4 "\n\n(fn NAME 
 CONTENTS WIDTH)"]
 org-cycle-hook '(org-cycle-hide-archived-subtrees 
 org-cycle-hide-drawers org-cycle-show-empty-lines
                  org-optimize-window-after-visibility-change)
 org-noter-auto-save-last-location t
 org-export-with-broken-links t
 org-link-from-user-regexp "\\<ded@micah\\>\\|\\<Daniel E\\. Doherty\\>"
 org-export-use-babel nil
 org-noter-doc-property-in-notes t
 org-clock-persist-query-save t
 org-mode-hook '(#<subr 
 F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_7> org-tempo-setup
                 org-clock-load ded:org-hook beginend-org-mode
                 #[0 "\301\211\207" [imenu-create-index-function 
                 org-imenu-get-tree] 2]
                 #[0 "\300\301\302\303\304$\207"
                   [add-hook change-major-mode-hook org-show-all append 
                   local] 5]
                 #[0 "\300\301\302\303\304$\207"
                   [add-hook change-major-mode-hook 
                   org-babel-show-result-all append local] 5]
                 org-babel-result-hide-spec org-babel-hide-all-hashes 
                 org-eldoc-load)
 org-babel-load-languages '((C) (C++) (R . t) (asymptote . t) (awk . t) 
 (calc . t) (clojure . t)
                            (css . t) (ditaa . t) (dot . t) (emacs-lisp 
                            . t) (gnuplot . t)
                            (haskell . t) (js . t) (latex . t) (ledger 
                            . t) (lisp . t)
                            (mathematica . t) (org . t) (perl . t) 
                            (python . t) (ruby . t)
                            (scheme . t) (screen . t) (shell . t) (sql 
                            . t) (sqlite . t))
 org-shiftup-final-hook '(windmove-up)
 org-mime-html-hook '((lambda nil
                       (org-mime-change-element-style "blockquote"
                        "border-left: 2px solid gray; padding-left: 
                        4px;")
                       )
                      (lambda nil
                       (org-mime-change-element-style "pre"
                        (format "color: %s; background-color: %s; 
                        padding: 0.5em;" "#E6E1DC" "#232323")
                        )
                       )
                      )
 org-roam-directory "/home/ded/work/Projects/Notes"
 org-table-copy-increment nil
 outline-mode-hook '(beginend-outline-mode)
 org-agenda-span 'day
 org-latex-format-drawer-function #[514 "\207" [] 3 "\n\n(fn _ 
 CONTENTS)"]
 org-icalendar-use-scheduled '(event-if-todo event-if-not-todo 
 todo-start)
 org-table-number-regexp 
 "^\\([<>]?[\\$,-+^.0-9]*[,0-9][-+^.0-9eEdDx()%:]*\\|[<>]?[-+]?0[xX][[:xdigit:].]+\\|[<>]?[-+]?[\\$0-9]+#[,0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$"
 org-latex-format-headline-function 
 'org-latex-format-headline-default-function
 org-babel-noweb-wrap-start "«"
 org-confirm-shell-link-function 'yes-or-no-p
 org-reveal-start-hook '(org-decrypt-entry)
 org-noter-insert-note-no-questions t
 org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME 
 CONTENTS)"]
 outline-isearch-open-invisible-function 'outline-isearch-open-invisible
 org-use-sub-superscripts nil
 org-roam-buffer-preview-function 'org-roam-buffer--preview
 org-icalendar-include-todo t
 org-roam-buffer-prepare-hook '(org-roam-buffer--insert-title 
 org-roam-buffer--insert-backlinks
                                org-roam-buffer--insert-ref-links)
 org-startup-indented t
 org-latex-classes '(("beamer" "\\documentclass[presentation]{beamer}"
                      ("\\section{%s}" . "\\section*{%s}") 
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
                     ("article" "\\documentclass[11pt]{article}" 
                     ("\\section{%s}" . "\\section*{%s}")
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                      ("\\paragraph{%s}" . "\\paragraph*{%s}")
                      ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                     ("report" "\\documentclass[11pt]{report}" 
                     ("\\part{%s}" . "\\part*{%s}")
                      ("\\chapter{%s}" . "\\chapter*{%s}") 
                      ("\\section{%s}" . "\\section*{%s}")
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
                     ("book" "\\documentclass[11pt]{book}" ("\\part{%s}" 
                     . "\\part*{%s}")
                      ("\\chapter{%s}" . "\\chapter*{%s}") 
                      ("\\section{%s}" . "\\section*{%s}")
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
                     ("komaarticle" "\\documentclass[11pt]{scrartcl}"
                      ("\\section{%s}" . "\\section*{%s}") 
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                      ("\\paragraph{%s}" . "\\paragraph*{%s}")
                      ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                     ("memo" "\\documentclass[11pt]{memo}" 
                     ("\\section{%s}" . "\\section*{%s}")
                      ("\\subsection{%s}" . "\\subsection*{%s}")
                      ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                      ("\\paragraph{%s}" . "\\paragraph*{%s}")
                      ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                     )
 org-table-auto-blank-field nil
 org-highlight-latex-and-related '(latex)
 org-odt-format-headline-function 
 'org-odt-format-headline-default-function
 org-use-speed-commands t
 org-src-ask-before-returning-to-edit-buffer nil
 org-agenda-mode-hook '(beginend-org-agenda-mode)
 org-latex-inactive-timestamp-format "\\textrm{%s}"
 org-agenda-before-write-hook '(org-agenda-add-entry-text)
 org-roam-title-change-hook '(org-roam--update-file-name-on-title-change
                              org-roam--update-links-on-title-change)
 org-roam-dailies-calendar-hook 
 '(org-roam-dailies-calendar-mark-entries)
 org-capture-prepare-finalize-hook '(org-roam-capture--install-finalize)
 org-latex-packages-alist '(("" "minted") ("" "color") ("" "listings") 
 ("" "booktabs"))
 org-babel-tangle-lang-exts '(("ruby" . "rb") ("python" . "py") ("perl" 
 . "pl") ("mathematica" . "m")
                              ("lisp" . "lisp") ("latex" . "tex") 
                              ("haskell" . "hs")
                              ("clojurescript" . "cljs") ("clojure" 
                              . "clj") ("awk" . "awk")
                              ("asymptote" . "asy") ("emacs-lisp" 
                              . "el") ("elisp" . "el"))
 org-src-mode-hook '(doom-modeline-set-org-src-modeline 
 org-src-babel-configure-edit-buffer
                     org-src-mode-configure-edit-buffer)
 org-icalendar-store-UID t
 org-confirm-elisp-link-function 'yes-or-no-p
 org-roam-title-to-slug-function 'org-roam--title-to-slug
 org-noter-separate-notes-from-heading t
 org-tags-exclude-from-inheritance '("crypt")
 org-icalendar-include-body 1000
 org-todo-keywords '((sequence "TODO(t)" "WAIT(w)" "|" "DONE(d)" 
 "CNCL(x)"))
 org-roam-completion-system 'ivy
 org-deadline-warning-days 5
 org-mime-src-mode-hook '(org-mime-src-mode-configure-edit-buffer)
 org-clock-out-hook '(org-clock-remove-empty-clock-drawer)
 org-latex-listings 'minted
 org-structure-template-alist '(("r" . "SRC ruby")
                                ("d" . "SRC dot :file file_name.dot 
                                :cmdline -Kdot -Tpng")
                                ("m" . "SRC emacs-lisp") ("a" . "export 
                                ascii") ("c" . "center")
                                ("C" . "comment") ("e" . "example") ("E" 
                                . "export")
                                ("h" . "export html") ("l" . "export 
                                latex") ("q" . "quote")
                                ("s" . "src") ("v" . "verse"))
 org-footnote-fill-after-inline-note-extraction t
 org-shiftright-final-hook '(windmove-right)
 org-speed-command-hook '(org-speed-command-activate 
 org-babel-speed-command-activate)
 org-html-format-inlinetask-function 
 'org-html-format-inlinetask-default-function
 org-clock-persist-file "/home/ded/.emacs.d/ded/cache/org-clock-save.el"
 org-ascii-format-inlinetask-function 
 'org-ascii-format-inlinetask-default
 org-caldav-files 
 '("/home/ded/work/ReviveInvestingLLC/CotyInc---Laubies/LaubiesPierre/2672973/CotyNotes.org" 
 "/home/ded/work/ReviveInvestingLLC/Pulte---PulteTrust/PulteNotes.org" 
 "/home/ded/work/ReviveInvestingLLC/AytuBiosciInc---Boyd/BoydSteven/2685394/AytuNotes.org" 
 "/home/ded/work/Projects/Nextcloud.org" 
 "/home/ded/work/Projects/Notes.org" 
 "/home/ded/work/Projects/Office.org" "/home/ded/work/Projects/Home.org" 
 "/home/ded/work/Projects/Invest.org")
 org-icalendar-use-deadline '(event-if-todo event-if-not-todo todo-due)
 org-latex-default-class "komaarticle"
 org-latex-active-timestamp-format "\\textrm{%s}"
 org-odt-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME 
 CONTENTS)"]
 org-icalendar-combined-name "Org"
 org-table-convert-region-max-lines 2000
 org-export-backends '(ascii beamer html icalendar latex man odt 
 texinfo)
 org-icalendar-alarm-time 60
 org-icalendar-include-sexps nil
 org-bullets-bullet-list '("①  " "②  " "③  " "④  " "⑤  " "⑥  " "⑦ " "⑧ " 
 "⑨ ")
 org-confirm-babel-evaluate nil
 org-icalendar-combined-description "Appointments from all org agenda 
 files"
 org-export-with-smart-quotes t
 org-export-with-email t
 org-clock-persist 'history
 org-latex-format-inlinetask-function 
 'org-latex-format-inlinetask-default-function
 org-caldav-url "https://db1.ddoherty.net/remote.php/dav/calendars/ded"
 org-tab-first-hook '(org-babel-hide-result-toggle-maybe 
 org-babel-header-arg-expand)
 org-texinfo-format-headline-function 
 'org-texinfo-format-headline-default-function
 org-link-shell-confirm-function 'yes-or-no-p
 org-shiftleft-final-hook '(windmove-left)
 org-babel-pre-tangle-hook '(save-buffer)
 org-agenda-loop-over-headlines-in-active-region nil
 org-attach-id-dir "/home/ded/.emacs.d/ded/data/"
 org-noter-hide-other nil
 org-noter-notes-search-path '("/home/ded/work/Projects/Notes")
 org-occur-hook '(org-first-headline-recenter)
 org-metadown-hook '(org-babel-pop-to-session-maybe)
 org-link-parameters '(("attachment" :follow org-attach-follow :complete 
 org-attach-complete-link)
                       ("mu4e" :follow mu4e-org-open :store 
                       mu4e-org-store-link)
                       ("eww" :follow org-eww-open :store 
                       org-eww-store-link)
                       ("rmail" :follow org-rmail-open :store 
                       org-rmail-store-link)
                       ("mhe" :follow org-mhe-open :store 
                       org-mhe-store-link)
                       ("irc" :follow org-irc-visit :store 
                       org-irc-store-link :export org-irc-export)
                       ("info" :follow org-info-open :export 
                       org-info-export :store
                        org-info-store-link)
                       ("gnus" :follow org-gnus-open :store 
                       org-gnus-store-link)
                       ("docview" :follow org-docview-open :export 
                       org-docview-export :store
                        org-docview-store-link)
                       ("bibtex" :follow org-bibtex-open :store 
                       org-bibtex-store-link)
                       ("bbdb" :follow org-bbdb-open :export 
                       org-bbdb-export :complete
                        org-bbdb-complete-link :store 
                        org-bbdb-store-link)
                       ("w3m" :store org-w3m-store-link) ("roam" :follow 
                       org-roam-link-follow-link)
                       ("man" :follow org-man-open :export nil) ("id" 
                       :follow org-id-open)
                       ("elfeed" :follow elfeed-link-open :store 
                       elfeed-link-store-link) ("file+sys")
                       ("file+emacs") ("shell" :follow 
                       org-link--open-shell)
                       ("news" :follow
                        #[514 "\301\300\302Q\"\207" ["news" browse-url 
                        ":"] 6 "\n\n(fn URL ARG)"])
                       ("mailto" :follow
                        #[514 "\301\300\302Q\"\207" ["mailto" browse-url 
                        ":"] 6 "\n\n(fn URL ARG)"]
                        )
                       ("https" :follow
                        #[514 "\301\300\302Q\"\207" ["https" browse-url 
                        ":"] 6 "\n\n(fn URL ARG)"])
                       ("http" :follow
                        #[514 "\301\300\302Q\"\207" ["http" browse-url 
                        ":"] 6 "\n\n(fn URL ARG)"])
                       ("ftp" :follow
                        #[514 "\301\300\302Q\"\207" ["ftp" browse-url 
                        ":"] 6 "\n\n(fn URL ARG)"])
                       ("help" :follow org-link--open-help) ("file" 
                       :complete org-link-complete-file)
                       ("elisp" :follow org-link--open-elisp) ("doi" 
                       :follow org-link--open-doi))
 org-roam-capture-function 'org-capture
 org-html-format-headline-function 
 'org-html-format-headline-default-function
 org-caldav-inbox "/home/ded/work/Projects/Nextcloud.org"
 outline-minor-mode-hook-hook 
 '(outline-minor-faces-add-font-lock-keywords)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-caldav-save-directory "/home/ded/work/Projects/"
 org-refile-allow-creating-parent-nodes t
 org-agenda-include-diary t
 org-startup-with-inline-images t
 org-footnote-define-inline t
 org-speed-commands-user '(("0" . delete-window) ("1" 
 . delete-other-windows)
                           ("2" . split-window-vertically) ("3" 
                           . split-window-horizontally)
                           ("h" . hide-other) ("k" . org-kill-note-or-show-branches)
                           ("r" . org-reveal) ("s" . org-save-all-org-buffers) 
                           ("z" . org-add-note)
                           ("J" . org-clock-goto))
 org-return-follows-link t
 org-outline-path-complete-in-steps nil
 org-icalendar-combined-agenda-file 
 "/home/ded/work/Projects/cal/org.ics"
 org-noter-always-create-frame nil
 org-special-ctrl-a/e t
 org-table-header-line-p t
 org-caldav-calendar-id "D7FBFCCB-DED5-492E-9E60-E30D8767BF0C"
 org-src-lang-modes '(("dot" . graphviz-dot) ("mathematica" . wolfram) 
 ("redis" . redis) ("php" . php)
                      ("arduino" . arduino) ("C" . c) ("C++" . c++) 
                      ("asymptote" . asy) ("bash" . sh)
                      ("beamer" . latex) ("calc" . fundamental) ("cpp" 
                      . c++) ("ditaa" . artist)
                      ("dot" . fundamental) ("elisp" . emacs-lisp) 
                      ("ocaml" . tuareg)
                      ("screen" . shell-script) ("shell" . sh) ("sqlite" 
                      . sql))
 org-tab-before-tab-emulation-hook '(org-tempo-complete-tag)
 org-icalendar-categories '(category local-tags)
 org-texinfo-format-inlinetask-function 
 'org-texinfo-format-inlinetask-default-function
 org-caldav-resume-aborted 'always
 org-clock-sound "/home/ded/.emacs.d/ded/etc/pill.ogg"
 org-list-allow-alphabetical t
 org-texinfo-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME 
 CONTENTS)"]
 )


--
====================================================
Daniel E. Doherty
ded@ddoherty.net


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)]
  2021-04-06 21:34 Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)] Daniel E. Doherty
@ 2021-04-07  1:14 ` Nick Dokos
  2021-04-08 11:57   ` Daniel E. Doherty
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Dokos @ 2021-04-07  1:14 UTC (permalink / raw)
  To: emacs-orgmode

"Daniel E. Doherty" <ded@ddoherty.net> writes:

> I have a hook function (cribbed from Emacs Stack Exchange) to re-display 
> inline images in the current subtree after execution of a source block 
> if the header argument contains, ':results graphics'.  As its last 
> action, it calls:
>
> (org-display-inline-images nil nil beg end)
>
> where beg and end have been set to the bounds of the current subtree.
>
> This works perfectly if the image file is in the current directory.  For
> example, here is a block that displays as expected:
>
> #+begin_SRC dot :file lehman.svg :cmdline -Kdot -Tsvg :results graphics
>   digraph lehman {
>     Thomas [shape=circle];
>     TideWater [shape = box, label="Tide Water\nSecurities\n(Issuer)"];
>     Lehman [shape = box];
>     Thomas -> TideWater [label="Director"];
>     Lehman -> TideWater [label="Shareholder"];
>     Thomas -> Lehman [label="Partner"];
>   }
> #+end_SRC
>
>
> However, if I add a :dir header, it ceases to work:
>
> #+begin_SRC dot :dir dot :file lehman.svg :cmdline -Kdot -Tsvg :results 
>  graphics
>   digraph lehman {
>     Thomas [shape=circle];
>     TideWater [shape = box, label="Tide Water\nSecurities\n(Issuer)"];
>     Lehman [shape = box];
>     Thomas -> TideWater [label="Director"];
>     Lehman -> TideWater [label="Shareholder"];
>     Thomas -> Lehman [label="Partner"];
>   }
> #+end_SRC
>
>
> #+RESULTS:
> [[file:dot/lehman.svg]]
>
> I have run edebug on the function, and the only difference I can detect
> is the location of the image file in a subdirectory called 'dot'.
>
> Here is my hook function, just for the record:
>
> #+begin_SRC emacs-lisp
>   (setq org-startup-with-inline-images t)
>   (require 'subr-x)
>   (defun ded:org-babel-display-subtree ()
>     "Redisplay inline images in subtree if cursor in source block with 
>     :result graphics."
>
>     (when (org-in-src-block-p)
>       (let (beg end)
>         (save-excursion
>           (org-mark-subtree)
>           (setq beg (point))
>           (setq end (mark)))
>         (when-let ((info (org-babel-get-src-block-info t))
>                    (params (org-babel-process-params (nth 2 info)))
>                    (result-params (cdr (assq :result-params params)))
>                    ((member "graphics" result-params)))
>           (org-display-inline-images nil nil beg end)))))
>
>   (add-hook 'org-babel-after-execute-hook 
>   #'ded:org-babel-display-subtree)
> #+end_SRC
>

FWIW, this works fine for me: Org mode version 9.4.4 (release_9.4.4-231-gf46925 @ /home/nick/elisp/org-mode/lisp/)

The only things I had to do was 1) to make the above into a tree by
adding a headline (otherwise, I guess org-mark-subtree would complain:
Not in a subtree) and 2) create the dot subdirectory.

-- 
Nick

"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)]
  2021-04-07  1:14 ` Nick Dokos
@ 2021-04-08 11:57   ` Daniel E. Doherty
  2021-04-10 20:54     ` Kyle Meyer
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel E. Doherty @ 2021-04-08 11:57 UTC (permalink / raw)
  To: emacs-orgmode


On Tue, Apr 06 2021, Nick Dokos wrote:

>
> FWIW, this works fine for me: Org mode version 9.4.4
> (release_9.4.4-231-gf46925 @ /home/nick/elisp/org-mode/lisp/)
>
> The only things I had to do was 1) to make the above into a tree by
> adding a headline (otherwise, I guess org-mark-subtree would complain:
> Not in a subtree) and 2) create the dot subdirectory.

Nick,

Thanks for trying this out.  I tried this again using emacs -Q with both
emacs27 and emacs28, and I still get the same result, i.e., it produces
the link but does not display it inline.  Both versions supported
display of SVG graphics files.

,----[ Org and Emacs Versions ]
| Org version: Org mode version 9.4.4 (9.4.4-33-g5450d6-elpaplus @ 
  /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)
|
| GNU Emacs 28.0.50 (build 7, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, 
  cairo version 1.16.0) of 2021-04-02
|
| and
|
| GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, 
  cairo version 1.16.0) of 2020-09-19
`----

I did the following:

1. Start emacs with the -Q flag
2. Load the file inline.el (shown below)
3. Create a directory 'dots' in the current directory
4. Open the file inline.org (shown below)
5. Run C-c C-c on the dot src block in inline.org and confirm execution
   of the block
6. Org creates the SVG file, but does not display it.
7. If I remove the ':dir dots' header argument, the image /does/ display
   inline.

,----[ inline.el ]
| (org-babel-do-load-languages
|  'org-babel-load-languages
|  '(
|    (dot . t)
|    (emacs-lisp . t)
|    (ruby . t)))
|
|
| (setq org-startup-with-inline-images t)
| (require 'subr-x)
| (defun ded:org-babel-inline-display-subtree ()
|   "Redisplay inline images in subtree if cursor in source block with 
    :result graphics."
|
|   (when (org-in-src-block-p)
|     (let (beg end)
|       (save-mark-and-excursion
|         (org-mark-subtree)
|         (setq beg (point))
|         (setq end (mark)))
|       (when-let ((info (org-babel-get-src-block-info t))
|                  (params (org-babel-process-params (nth 2 info)))
|                  (result-params (cdr (assq :result-params params)))
|                  ((member "graphics" result-params)))
|         (org-display-inline-images nil nil beg end)))))
|
| (add-hook 'org-babel-after-execute-hook 
  #'ded:org-babel-inline-display-subtree)
`----

,----[ inline.org ]
| * Supreme Court
| ** Blau v. Lehman, 368 U.S. 403 (1962).
| #+begin_SRC dot :file lehman.svg :cmdline -Kdot -Tsvg :results 
   graphics
|   digraph lehman {
|     Thomas [shape=circle];
|     TideWater [shape = box, label="Tide Water\nSecurities\n(Issuer)"];
|     Lehman [shape = box];
|     Thomas -> TideWater [label="Director"];
|     Lehman -> TideWater [label="Shareholder"];
|     Thomas -> Lehman [label="Partner"];
|   }
| #+end_SRC
`----

If others could try this out, I would appreciate it.

--
====================================================
Daniel E. Doherty
ded@ddoherty.net


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)]
  2021-04-08 11:57   ` Daniel E. Doherty
@ 2021-04-10 20:54     ` Kyle Meyer
  2021-04-13 13:21       ` Daniel E. Doherty
  0 siblings, 1 reply; 5+ messages in thread
From: Kyle Meyer @ 2021-04-10 20:54 UTC (permalink / raw)
  To: Daniel E. Doherty; +Cc: emacs-orgmode

Daniel E. Doherty writes:

> Nick,
>
> Thanks for trying this out.  I tried this again using emacs -Q with both
> emacs27 and emacs28, and I still get the same result, i.e., it produces
> the link but does not display it inline.  Both versions supported
> display of SVG graphics files.

Hmm, I see the same behavior you're describing: your custom function
doesn't trigger the inline display when :dir is used.

Let's look at the custom function...

> | (defun ded:org-babel-inline-display-subtree ()
> |   "Redisplay inline images in subtree if cursor in source block with 
>     :result graphics."
> |
> |   (when (org-in-src-block-p)
> |     (let (beg end)
> |       (save-mark-and-excursion
> |         (org-mark-subtree)
> |         (setq beg (point))
> |         (setq end (mark)))
> |       (when-let ((info (org-babel-get-src-block-info t))
> |                  (params (org-babel-process-params (nth 2 info)))
> |                  (result-params (cdr (assq :result-params params)))
> |                  ((member "graphics" result-params)))
> |         (org-display-inline-images nil nil beg end)))))
> |
> | (add-hook 'org-babel-after-execute-hook 
>   #'ded:org-babel-inline-display-subtree)

So, org-display-inline-images is probably the place to start debugging.
You can step through its execution [1] and compare the "no :dir" vs
":dir" cases.  When I did that, I noticed that a

  (expand-file-name "dot/lehman.svg")

leads to a non-existent "/path/to/dot/dot/lehman.svg" (note the
repeating "dot/").  That's because :dir temporarily changes the
directory, and org-babel-after-execute-hook executes in that context.

To work around that, you could avoid using org-babel-after-execute-hook
and instead advise org-babel-execute-src-block so that your function is
called afterward.  Another approach would be to let-bind the
default-directory in your function:

  (when (org-in-src-block-p)
    (let ((default-directory (if-let ((fname (buffer-file-name)))
                                 (file-name-directory fname)
                               default-directory))
          ...)
      ...))


[1] (info "(elisp)Instrumenting")


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)]
  2021-04-10 20:54     ` Kyle Meyer
@ 2021-04-13 13:21       ` Daniel E. Doherty
  0 siblings, 0 replies; 5+ messages in thread
From: Daniel E. Doherty @ 2021-04-13 13:21 UTC (permalink / raw)
  To: Kyle Meyer; +Cc: emacs-orgmode

Kyle,

Thanks for the excellent sleuthing.  Nailed it.

I took your second suggestion, and ended up with the following (for
those interested), which works like a charm:

=================================
  (setq org-startup-with-inline-images t)
  (require 'subr-x)
  (defun ded:org-babel-inline-display-subtree ()
    "Redisplay inline images in subtree if cursor in source block with :result graphics."

    (when (org-in-src-block-p)
      (let (beg end
                (default-directory (if-let ((fname (buffer-file-name)))
                                       (file-name-directory fname)
                                     default-directory)))
        (save-mark-and-excursion
          (org-mark-subtree)
          (setq beg (point))
          (setq end (mark)))
        (when-let ((info (org-babel-get-src-block-info t))
                   (params (org-babel-process-params (nth 2 info)))
                   (result-params (cdr (assq :result-params params)))
                   ((member "graphics" result-params)))
          (org-display-inline-images nil nil beg end)))))

  (add-hook 'org-babel-after-execute-hook #'ded:org-babel-inline-display-subtree)
========================

On Sat, Apr 10 2021, Kyle Meyer wrote:

> Daniel E. Doherty writes:
>
>> Nick,
>>
>> Thanks for trying this out.  I tried this again using emacs -Q with both
>> emacs27 and emacs28, and I still get the same result, i.e., it produces
>> the link but does not display it inline.  Both versions supported
>> display of SVG graphics files.
>
> Hmm, I see the same behavior you're describing: your custom function
> doesn't trigger the inline display when :dir is used.
>
> Let's look at the custom function...
>
>> | (defun ded:org-babel-inline-display-subtree ()
>> |   "Redisplay inline images in subtree if cursor in source block with
>>     :result graphics."
>> |
>> |   (when (org-in-src-block-p)
>> |     (let (beg end)
>> |       (save-mark-and-excursion
>> |         (org-mark-subtree)
>> |         (setq beg (point))
>> |         (setq end (mark)))
>> |       (when-let ((info (org-babel-get-src-block-info t))
>> |                  (params (org-babel-process-params (nth 2 info)))
>> |                  (result-params (cdr (assq :result-params params)))
>> |                  ((member "graphics" result-params)))
>> |         (org-display-inline-images nil nil beg end)))))
>> |
>> | (add-hook 'org-babel-after-execute-hook
>>   #'ded:org-babel-inline-display-subtree)
>
> So, org-display-inline-images is probably the place to start debugging.
> You can step through its execution [1] and compare the "no :dir" vs
> ":dir" cases.  When I did that, I noticed that a
>
>   (expand-file-name "dot/lehman.svg")
>
> leads to a non-existent "/path/to/dot/dot/lehman.svg" (note the
> repeating "dot/").  That's because :dir temporarily changes the
> directory, and org-babel-after-execute-hook executes in that context.
>
> To work around that, you could avoid using org-babel-after-execute-hook
> and instead advise org-babel-execute-src-block so that your function is
> called afterward.  Another approach would be to let-bind the
> default-directory in your function:
>
>   (when (org-in-src-block-p)
>     (let ((default-directory (if-let ((fname (buffer-file-name)))
>                                  (file-name-directory fname)
>                                default-directory))
>           ...)
>       ...))
>
>
> [1] (info "(elisp)Instrumenting")


--
====================================================
Daniel E. Doherty
Law Offices of Daniel E. Doherty
7300 W. 110th Street, Suite 930
Overland Park, KS 66210
913.338.7182 (Phone)
913.338.7164 (FAX)
ded@ddoherty.net


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-04-13 13:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-06 21:34 Bug: Display Inline Images from Subdirectory [9.4.4 (9.4.4-33-g5450d6-elpaplus @ /home/ded/.emacs.d/elpa/org-plus-contrib-20210322/)] Daniel E. Doherty
2021-04-07  1:14 ` Nick Dokos
2021-04-08 11:57   ` Daniel E. Doherty
2021-04-10 20:54     ` Kyle Meyer
2021-04-13 13:21       ` Daniel E. Doherty

Org-mode mailing list

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://orgmode.org/list/0 list/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 list list/ https://orgmode.org/list \
		emacs-orgmode@gnu.org
	public-inbox-index list

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.yhetil.org/yhetil.emacs.orgmode
	nntp://news.gmane.io/gmane.emacs.orgmode


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git