* ob-clojure-literate.el support graphics inline image link result.
(ob-clojure-literate-inject-code): save Clojure image variable to :file. (ob-clojure-literate-support-graphics-result): fix src block does handle graphics file result issue. Use it like this: ,#+begin_src clojure :cache no :dir "data/images" :results graphics :file "ob-clojure-literate.png" (use '(incanter core stats datasets charts io pdf)) (def ob-clojure-literate (histogram (sample-normal 1000))) ,#+end_src
This commit is contained in:
parent
09af7f18b2
commit
6f976f1947
|
@ -223,6 +223,61 @@ Don't auto jack in by default for not rude."
|
|||
(cdr pair)))
|
||||
(org-babel--get-vars params)))
|
||||
|
||||
;;; Support header arguments :results graphics :file "image.png" by inject Clojure code.
|
||||
(defun ob-clojure-literate-inject-code (args)
|
||||
"Inject Clojure code into `BODY' in `ARGS'.
|
||||
It is used to change Clojure currently working directory in a FAKE way.
|
||||
And generate inline graphics image file link result.
|
||||
Use header argument like this:
|
||||
|
||||
:results graphics :file \"incanter-plot.png\"
|
||||
|
||||
Then you need to assign image variable to this :file value like:
|
||||
(def incanter-plot (histogram (sample-normal 1000)))
|
||||
|
||||
*NOTE*: Currently only support Incanter's `save' function.
|
||||
"
|
||||
(let* ((body (nth 0 args))
|
||||
(params (nth 1 args))
|
||||
(dir (cdr (assq :dir params)))
|
||||
(default-directory (and (buffer-file-name) (file-name-directory (buffer-file-name))))
|
||||
(directory (and dir (file-name-as-directory (expand-file-name dir))))
|
||||
(result-type (cdr (assq :results params)))
|
||||
(file (cdr (assq :file params)))
|
||||
(file-name (file-name-base file))
|
||||
;; TODO: future support `:graphics-file' to avoid collision.
|
||||
(graphics-result (member "graphics" (cdr (assq :result-params params))))
|
||||
;; (graphics-file (cdr (assq :graphics-file params)))
|
||||
;; (graphics-name (file-name-base graphics-file))
|
||||
(prepend-to-body (lambda (code)
|
||||
(setq body (concat code "\n" body))))
|
||||
(append-to-body (lambda (code)
|
||||
(setq body (concat body "\n" code "\n"))))
|
||||
)
|
||||
(when directory
|
||||
(unless (file-directory-p (expand-file-name directory))
|
||||
(warn (format "Target directory %s does not exist, please create it." dir))))
|
||||
(when file
|
||||
(funcall append-to-body
|
||||
(format "(save %s \"%s\")" file-name (concat directory file)))
|
||||
)
|
||||
(list body params) ; return modified argument list
|
||||
))
|
||||
|
||||
(advice-add 'org-babel-expand-body:clojure :filter-args #'ob-clojure-literate-inject-code)
|
||||
|
||||
;;; support :results graphics :dir "data/image" :file "incanter-plot.png"
|
||||
(defun ob-clojure-literate-support-graphics-result (result)
|
||||
"Support :results graphics :dir \"data/images\" :file \"incanter-plot.png\"
|
||||
reset `RESULT' to `nil'."
|
||||
(let* ((params (nth 2 info))
|
||||
(graphics-result (member "graphics" (cdr (assq :result-params params)))))
|
||||
(if graphics-result
|
||||
(setq result nil))
|
||||
result))
|
||||
|
||||
(advice-add 'org-babel-execute:clojure :filter-return #'ob-clojure-literate-support-graphics-result)
|
||||
|
||||
|
||||
(defvar ob-clojure-literate-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
|
Loading…
Reference in New Issue