From: stardiviner <numbchild@gmail.com>
To: org-mode <emacs-orgmode@gnu.org>
Subject: [PATCH] add "link" :results type for Babel
Date: Tue, 10 Apr 2018 18:07:47 +0800 [thread overview]
Message-ID: <87vacztlvw.fsf@gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 798 bytes --]
This patch try to support following way:
#+begin_src sh :results link :file "/tmp/test.txt"
echo "hello" > /tmp/test.txt
echo "test"
#+end_src
#+RESULTS:
[[file:/tmp/test.txt]]
Because:
- ~org-babel-execute-src-block~
- ~(org-babel-get-src-block-info)~
- (let* ((info .. (apply #'org-babel-merge-params ...))))
- ~org-babel-merge-params~
- [ ] *because* code ~(`(,(or :file :file-ext) . ,value) ...)~
lines logic in function ~org-babel-get-src-block-info~, it
merge "file" ~:results~, so override params plist :results
value ~link~.
- [ ] So I put ~link~ and ~graphics~ "~:results~" type into a
separate group in constant
~org-babel-common-header-args-w-values~.
If anybody has better way, please improve my code.
[-- Attachment #1.2: 0001-ob-core.el-add-results-link-type-result-for-babel.patch --]
[-- Type: text/x-patch, Size: 5102 bytes --]
From dc3e482b1cad581b74a4303ca79375db6a6ba885 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Sun, 8 Apr 2018 20:56:28 +0800
Subject: [PATCH 1/2] ob-core.el: add :results link type result for babel.
* lisp/ob-core.el (org-babel-execute-src-block): handle :results link
type. Like :results graphics, don't write result to :file specified file.
* etc/ORG-NEWS: declare new :results type "link".
* doc/org-manual.org: add document for new type result "link".
* testing/lisp/test-ob.el (test-ob/result-file-link-type-header-argument):
Add test for new added :results type "link".
---
doc/org-manual.org | 12 ++++++++++++
etc/ORG-NEWS | 9 +++++++++
lisp/ob-core.el | 16 ++++++++++------
testing/lisp/test-ob.el | 16 ++++++++++++++++
4 files changed, 47 insertions(+), 6 deletions(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index d787e5da4..3c759d601 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -17177,6 +17177,18 @@ default behavior is to automatically determine the result type.
uses the generated file name for both the "link" and
"description" parts of the link.
+- =link= ::
+
+ #+cindex: @samp{link}, header argument
+ When this result type used with header argument =:file=. Generate a
+ link to =:file= specified file. Instead of writing src block
+ evaluate non-empty result to =:file= specified file. Like following
+ example:
+
+ #+begin_src shell :results link :file "download.tar.gz"
+ wget -c "http://example.com/download.tar.gz"
+ #+end_src
+
*** Format
:PROPERTIES:
:UNNUMBERED: notoc
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 0edd77115..3833b57b2 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -113,6 +113,15 @@ now sort according to the locale’s collation rules instead of by
code-point.
** New features
+*** Add ~:results link~ support for org-babel
+This will support only insert file link without writing result to file.
+Like this case:
+#+begin_src shell :dir "data/tmp" :results link :file "crackzor_1.0.c.gz"
+wget -c "http://ben.akrin.com/crackzor/crackzor_1.0.c.gz"
+#+end_src
+
+#+RESULTS:
+[[file:data/tmp/crackzor_1.0.c.gz]]
*** Add ~:session~ support of ob-js for js-comint
#+begin_src js :session "*Javascript REPL*"
console.log("stardiviner")
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 129e17f62..e21cbf963 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -413,7 +413,11 @@ then run `org-babel-switch-to-session'."
(padline . ((yes no)))
(post . :any)
(prologue . :any)
- (results . ((file list vector table scalar verbatim)
+ (results . (
+ ;; separate group to avoid been override by "file"
+ ;; :results in `org-babel-merge-params'.
+ (link)
+ (file list vector table scalar verbatim)
(raw html latex org code pp drawer)
(replace silent none append prepend)
(output value)))
@@ -706,11 +710,11 @@ block."
(let ((file (cdr (assq :file params))))
;; If non-empty result and :file then write to :file.
(when file
- (let ((graphics?
- (member "graphics" (cdr (assq :result-params params)))))
- ;; Handle :results graphics :file case. Don't
- ;; write result to file if result is graphics.
- (when (and result (not graphics?))
+ (let ((graphics? (member "graphics" (cdr (assq :result-params params))))
+ (file-link? (member "link" (cdr (assq :result-params params)))))
+ ;; If :results are special types like `link', `graphics' etc.
+ ;; don't write result to `:file'. Literately only insert link to :file.
+ (when (and result (not graphics?) (not file-link?))
(with-temp-file file
(insert (org-babel-format-result
result (cdr (assq :sep params)))))))
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index a4a590d6a..e541ad726 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -996,6 +996,22 @@ trying to find the :END: marker."
(should (search-forward "[[file:foo][bar]]" nil t))
(should (search-forward "[[file:foo][foo]]" nil t))))
+(ert-deftest test-ob/result-file-link-type-header-argument ()
+ "Ensure that the result is a link to a file.
+The file is just a link to :file value. Inhibit non-empty result write to :file."
+ (org-test-with-temp-text "#+begin_src shell :results value link :file \"/tmp/test.txt\"
+echo \"hello\" > /tmp/test.txt
+echo \"test\"
+#+end_src"
+ (org-babel-execute-src-block)
+ (goto-char (point-min))
+ (should (search-forward "[[file:/tmp/test.txt]]" nil nil))
+ (should (with-temp-buffer
+ (insert-file-contents "/tmp/test.txt")
+ (string=
+ "hello\n"
+ (buffer-substring-no-properties (point-min) (point-max)))))))
+
(ert-deftest test-ob/inline-src_blk-preceded-punct-preceded-by-point ()
(let ((test-line ".src_emacs-lisp[ :results verbatim ]{ \"x\" }")
(org-babel-inline-result-wrap "=%s="))
--
2.17.0
[-- Attachment #1.3: Type: text/plain, Size: 86 bytes --]
The second patch is to add testing and document for merged graphics
implementation.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.4: 0002-ob-core.el-support-graphics-results-type.patch --]
[-- Type: text/x-patch, Size: 3268 bytes --]
From e626b929e0c89b9a09f83eb20bffbe5a56a5256f Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
Date: Tue, 10 Apr 2018 17:44:41 +0800
Subject: [PATCH 2/2] ob-core.el: support graphics :results type.
* lisp/ob-core.el (org-babel-common-header-args-w-values): Add
"graphics" :results type.
* testing/lisp/test-ob.el (test-ob/result-graphics-link-type-header-argument)
Add test for "graphics" :results type.
* doc/org-manual.org: add manual for "graphics" :results type.
---
doc/org-manual.org | 16 ++++++++++++++++
lisp/ob-core.el | 2 +-
testing/lisp/test-ob.el | 16 ++++++++++++++++
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index 3c759d601..4b851e534 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -17189,6 +17189,22 @@ default behavior is to automatically determine the result type.
wget -c "http://example.com/download.tar.gz"
#+end_src
+- =graphics= ::
+
+ #+cindex: @samp{graphics}, header argument
+ When this result type used with header argument =:file=, generate a
+ link to =:file= specified file. Instead of writing src block
+ evaluate non-empty result to =:file= specified file. This will be
+ useful for generating Org inline image for src blocks. Like
+ following example:
+
+ #+begin_src R :results graphics :file "graphics-result.png"
+ plot(seq(1,10))
+ #+end_src
+
+ #+RESULTS:
+ [[file:graphics-result.png]]
+
*** Format
:PROPERTIES:
:UNNUMBERED: notoc
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index e21cbf963..9c72bbccb 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -416,7 +416,7 @@ then run `org-babel-switch-to-session'."
(results . (
;; separate group to avoid been override by "file"
;; :results in `org-babel-merge-params'.
- (link)
+ (link graphics)
(file list vector table scalar verbatim)
(raw html latex org code pp drawer)
(replace silent none append prepend)
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index e541ad726..3b7958552 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -1012,6 +1012,22 @@ echo \"test\"
"hello\n"
(buffer-substring-no-properties (point-min) (point-max)))))))
+(ert-deftest test-ob/result-graphics-link-type-header-argument ()
+ "Ensure that the result is a link to an image.
+The file is just a link to :file value. Inhibit non-empty result write to :file."
+(org-test-with-temp-text "#+begin_src shell :results value graphics :file \"/tmp/test.txt\"
+echo \"hello\" > /tmp/test.txt
+echo \"test\"
+#+end_src"
+ (org-babel-execute-src-block)
+ (goto-char (point-min))
+ (should (search-forward "[[file:/tmp/test.txt]]" nil nil))
+ (should (with-temp-buffer
+ (insert-file-contents "/tmp/test.txt")
+ (string=
+ "hello\n"
+ (buffer-substring-no-properties (point-min) (point-max)))))))
+
(ert-deftest test-ob/inline-src_blk-preceded-punct-preceded-by-point ()
(let ((test-line ".src_emacs-lisp[ :results verbatim ]{ \"x\" }")
(org-babel-inline-result-wrap "=%s="))
--
2.17.0
[-- Attachment #1.5: Type: text/plain, Size: 187 bytes --]
--
[ stardiviner ] don't need to convince with trends.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]
next reply other threads:[~2018-04-10 10:08 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-10 10:07 stardiviner [this message]
2018-04-11 20:55 ` [PATCH] add "link" :results type for Babel Nicolas Goaziou
2018-04-12 2:04 ` stardiviner
2018-04-12 13:17 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87vacztlvw.fsf@gmail.com \
--to=numbchild@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).