* How to let ob-shell to download file and get result as a link to file? @ 2018-03-26 15:35 stardiviner 2018-03-26 18:06 ` Michael Welle 0 siblings, 1 reply; 8+ messages in thread From: stardiviner @ 2018-03-26 15:35 UTC (permalink / raw) To: org-mode [-- Attachment #1: Type: text/plain, Size: 522 bytes --] I tried the following example: ``` #+begin_src shell :mkdir yes :dir "data/tmp" :results file :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]] ``` But the files is empty, I check out Org-mode document about `:file` header argument, seems org-babel will write result to `:file` specified file. I wander how I can handle upper case correctly? (don't write result to file, just insert a link to downloaded file as a result) [-- Attachment #2: Type: text/html, Size: 1216 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: How to let ob-shell to download file and get result as a link to file? 2018-03-26 15:35 How to let ob-shell to download file and get result as a link to file? stardiviner @ 2018-03-26 18:06 ` Michael Welle 2018-03-27 2:56 ` [PATCH] support insert link without write result to :file link stardiviner 0 siblings, 1 reply; 8+ messages in thread From: Michael Welle @ 2018-03-26 18:06 UTC (permalink / raw) To: emacs-orgmode Hello, stardiviner <numbchild@gmail.com> writes: > I tried the following example: > > ``` > > #+begin_src shell :mkdir yes :dir "data/tmp" :results file :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]] > ``` > > But the files is empty, I check out Org-mode document about `:file` > header argument, seems org-babel will write result to `:file` specified > file. I wander how I can handle upper case correctly? (don't write > result to file, just insert a link to downloaded file as a result) well, your above example would work, at least to a certain point, if you let wget write its output to stdout: #+begin_src sh :mkdir yes :dir "/tmp" :results file :file "crackzor_1.0.c.gz" wget -c "http://ben.akrin.com/crackzor/crackzor_1.0.c.gz" -O- #+end_src But I don't now know how to get the encoding right (I think that's the problem). The zip file contains rubbish. What I would do instead is something like this: #+begin_src sh :mkdir yes :dir "/tmp" :results raw :var fn="crackzor_1.0.c.gz" /usr/bin/wget -c "http://ben.akrin.com/crackzor/${fn}" echo "[[file:/tmp/${fn}]]" #+end_src Regards hmw ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] support insert link without write result to :file link 2018-03-26 18:06 ` Michael Welle @ 2018-03-27 2:56 ` stardiviner 2018-03-27 6:26 ` Nicolas Goaziou 0 siblings, 1 reply; 8+ messages in thread From: stardiviner @ 2018-03-27 2:56 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1.1: Type: text/plain, Size: 1504 bytes --] I added this patch to handle posted question case. This will improve Org-mode links with org-babel resulta lot. Make Org-mode can insert link as user want at many places. Hope can be merged. On 03/27/2018 02:06 AM, Michael Welle wrote: > Hello, > > stardiviner <numbchild@gmail.com> writes: > >> I tried the following example: >> >> ``` >> >> #+begin_src shell :mkdir yes :dir "data/tmp" :results file :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]] >> ``` >> >> But the files is empty, I check out Org-mode document about `:file` >> header argument, seems org-babel will write result to `:file` specified >> file. I wander how I can handle upper case correctly? (don't write >> result to file, just insert a link to downloaded file as a result) > well, your above example would work, at least to a certain point, if you > let wget write its output to stdout: > > #+begin_src sh :mkdir yes :dir "/tmp" :results file :file "crackzor_1.0.c.gz" > wget -c "http://ben.akrin.com/crackzor/crackzor_1.0.c.gz" -O- > #+end_src > > But I don't now know how to get the encoding right (I think that's the > problem). The zip file contains rubbish. What I would do instead is > something like this: > > #+begin_src sh :mkdir yes :dir "/tmp" :results raw :var fn="crackzor_1.0.c.gz" > /usr/bin/wget -c "http://ben.akrin.com/crackzor/${fn}" > echo "[[file:/tmp/${fn}]]" > #+end_src > > Regards > hmw > [-- Attachment #1.2: Type: text/html, Size: 2876 bytes --] [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-ob-core.el-org-babel-execute-src-block-support-resul.patch --] [-- Type: text/x-patch; name="0001-ob-core.el-org-babel-execute-src-block-support-resul.patch", Size: 1978 bytes --] From 6e6f04016525ece12610833d731e8a92d4473ee2 Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Tue, 27 Mar 2018 10:50:03 +0800 Subject: [PATCH] * ob-core.el (org-babel-execute-src-block) support :results link. --- etc/ORG-NEWS | 9 +++++++++ lisp/ob-core.el | 11 +++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index d479b982c..e2a02d0a2 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 e33168278..a0e5663ec 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -707,10 +707,13 @@ block." ;; 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?)) + (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))))))) -- 2.16.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] support insert link without write result to :file link 2018-03-27 2:56 ` [PATCH] support insert link without write result to :file link stardiviner @ 2018-03-27 6:26 ` Nicolas Goaziou 2018-03-28 16:11 ` stardiviner 0 siblings, 1 reply; 8+ messages in thread From: Nicolas Goaziou @ 2018-03-27 6:26 UTC (permalink / raw) To: stardiviner; +Cc: emacs-orgmode Hello, stardiviner <numbchild@gmail.com> writes: > I added this patch to handle posted question case. > > This will improve Org-mode links with org-babel resulta lot. Make > Org-mode can insert link as user want at many places. > > Hope can be merged. Thank you. However, before thinking about merging it, it requires documentation and tests. You also need to update `org-babel-common-header-args-w-values'. Also, there are still failing tests from the last change to :results behaviour in master, if you ever have time to look into it. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] support insert link without write result to :file link 2018-03-27 6:26 ` Nicolas Goaziou @ 2018-03-28 16:11 ` stardiviner 2018-03-28 16:23 ` Nicolas Goaziou 0 siblings, 1 reply; 8+ messages in thread From: stardiviner @ 2018-03-28 16:11 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode [-- Attachment #1.1: Type: text/plain, Size: 1569 bytes --] Hi, Nicolas, I have problem in my code. Even after many times and 5 hourse Edebug on ob-core.el code. Still can't find out where is wrong. After Edebug, just know somewhere is wrong. here is my info: - [ ] probelm is on ~org-babel-merge-params~, ~info~ is generated from it, but it removed ~link~ in ~:results~. - [ ] org-babel-execute-src-block - [ ] (org-babel-get-src-block-info) - [ ] (let* ((info .. (apply #'org-babel-merge-params ...)))) -> info -> :results file replace (been removed here) - because ~:results link file replace~ are merged into ~:results file replace~? - where does the ~file~ comes from? - from ~:file~ header argument? - which function get this? - [ ] org-babel-process-params info I added my latest patches in attachment (include test, and added your suggested modification). Can you help me on my code? On 03/27/2018 02:26 PM, Nicolas Goaziou wrote: > Hello, > > stardiviner <numbchild@gmail.com> writes: > >> I added this patch to handle posted question case. >> >> This will improve Org-mode links with org-babel resulta lot. Make >> Org-mode can insert link as user want at many places. >> >> Hope can be merged. > Thank you. > > However, before thinking about merging it, it requires documentation and > tests. You also need to update `org-babel-common-header-args-w-values'. > > Also, there are still failing tests from the last change to :results > behaviour in master, if you ever have time to look into it. > > Regards, > [-- Attachment #1.2: Type: text/html, Size: 3180 bytes --] [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-ob-core.el-org-babel-execute-src-block-support-resul.patch --] [-- Type: text/x-patch; name="0001-ob-core.el-org-babel-execute-src-block-support-resul.patch", Size: 4385 bytes --] From a4da247355dd0f347843b06d9e64d26d210a4b0a Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Tue, 27 Mar 2018 10:50:03 +0800 Subject: [PATCH 1/2] * ob-core.el (org-babel-execute-src-block) support :results link. - doc/org.texi (:results): support :results link type. Don't write non-empty result to :file when result type is link. Use it like this: wget -c "http://ben.akrin.com/crackzor/crackzor_1.0.c.gz" [[file:data/tmp/crackzor_1.0.c.gz]] - testing/lisp/test-ob.el (test-ob/result-file-link-type-header-argument) add test. --- doc/org.texi | 3 +++ etc/ORG-NEWS | 9 +++++++++ lisp/ob-core.el | 13 ++++++++----- testing/lisp/test-ob.el | 17 +++++++++++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index aaa180401..903f52143 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -16204,6 +16204,9 @@ example: @code{:results value verbatim}. @item @code{file} Interpret as path to a file. Inserts a link to the file. Usage example: @code{:results value file}. +@item @code{link} +Interpret as path to a file. Inserts a link to the file. Usage example: +@code{:results value link}. @end itemize @subsubheading Format diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index d479b982c..e2a02d0a2 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 e33168278..d2c1b70f3 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -413,7 +413,7 @@ then run `org-babel-switch-to-session'." (padline . ((yes no))) (post . :any) (prologue . :any) - (results . ((file list vector table scalar verbatim) + (results . ((file link list vector table scalar verbatim) (raw html latex org code pp drawer) (replace silent none append prepend) (output value))) @@ -707,10 +707,13 @@ block." ;; 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?)) + (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..93eb7736a 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -996,6 +996,23 @@ 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 sh :results link :file \"test.txt\" + echo \"hello\" > test.txt + echo \"test\" + #+end_src" + (org-babel-execute-src-block) + (goto-char (point-min)) + (should (search-forward "[[file:test.txt]]" nil t)) + (should (with-temp-buffer + (insert-file-contents "test.txt") + (string-match + "hello.*" + (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.16.3 [-- Attachment #3: 0002-ob-core.el-add-graphics-to-result-type.patch --] [-- Type: text/x-patch, Size: 2901 bytes --] From cacac1895c4871e122c16965edf6aad938c783dd Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Tue, 27 Mar 2018 20:03:48 +0800 Subject: [PATCH 2/2] * ob-core.el: add graphics to result type. enhance for commit 39bd69b08. - ob-core.el (org-babel-common-header-args-w-values): add keyword graphics. - doc/org.texi (:results): add document for :results value graphics. - testing/lisp/test-ob.el (test-ob/result-graphics-file-link-type-header-argument) add test. --- doc/org.texi | 3 +++ lisp/ob-core.el | 2 +- testing/lisp/test-ob.el | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/doc/org.texi b/doc/org.texi index 903f52143..be5d6ba2b 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -16207,6 +16207,9 @@ Interpret as path to a file. Inserts a link to the file. Usage example: @item @code{link} Interpret as path to a file. Inserts a link to the file. Usage example: @code{:results value link}. +@item @code{graphics} +Interpret as path to a graphic image file. Inserts a link to the file. Usage +example: @code{:results value graphics}. @end itemize @subsubheading Format diff --git a/lisp/ob-core.el b/lisp/ob-core.el index d2c1b70f3..ef67bc8a7 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -413,7 +413,7 @@ then run `org-babel-switch-to-session'." (padline . ((yes no))) (post . :any) (prologue . :any) - (results . ((file link list vector table scalar verbatim) + (results . ((file graphics link list vector table scalar verbatim) (raw html latex org code pp drawer) (replace silent none append prepend) (output value))) diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el index 93eb7736a..11b88275b 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -1013,6 +1013,23 @@ The file is just a link to :file value. Inhibit non-empty result write to :file. "hello.*" (buffer-substring-no-properties (point-min) (point-max))))))) +(ert-deftest test-ob/result-graphics-file-link-type-header-argument () + "Ensure that the result is a link to a graphic image file. +The file is just a link to :file value. Inhibit non-empty result write to :file." + (org-test-with-temp-text + "#+begin_src sh :results value graphics :file \"test.png\" + echo \"hello\" > test.png + echo \"test\" + #+end_src" + (org-babel-execute-src-block) + (goto-char (point-min)) + (should (search-forward "[[file:test.png]]" nil t)) + (should (with-temp-buffer + (insert-file-contents "test.png") + (string-match + "hello.*" + (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.16.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] support insert link without write result to :file link 2018-03-28 16:11 ` stardiviner @ 2018-03-28 16:23 ` Nicolas Goaziou 2018-03-29 3:39 ` stardiviner 0 siblings, 1 reply; 8+ messages in thread From: Nicolas Goaziou @ 2018-03-28 16:23 UTC (permalink / raw) To: stardiviner; +Cc: emacs-orgmode Hello, stardiviner <numbchild@gmail.com> writes: > Hi, Nicolas, I have problem in my code. Even after many times and > 5 hourse Edebug on ob-core.el code. Still can't find out where is > wrong. After Edebug, just know somewhere is wrong. here is my info: > > - [ ] probelm is on ~org-babel-merge-params~, ~info~ is generated from > it, but it removed ~link~ in ~:results~. > - [ ] org-babel-execute-src-block > - [ ] (org-babel-get-src-block-info) > - [ ] (let* ((info .. (apply #'org-babel-merge-params ...)))) -> > info -> :results file replace (been removed here) > - because ~:results link file replace~ are merged into ~:results > file replace~? > - where does the ~file~ comes from? > - from ~:file~ header argument? > - which function get this? > - [ ] org-babel-process-params info > > > I added my latest patches in attachment (include test, and added your > suggested modification). Can you help me on my code? What are the differences between ":results file" and ":results link"? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] support insert link without write result to :file link 2018-03-28 16:23 ` Nicolas Goaziou @ 2018-03-29 3:39 ` stardiviner 2018-03-29 16:30 ` Berry, Charles 0 siblings, 1 reply; 8+ messages in thread From: stardiviner @ 2018-03-29 3:39 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1380 bytes --] `:results file` will write non-empty result to `:file`. But `:results link` don't, it just insert a link of `:file` at result. And that is what I want to solve in the first post of this thread. On 03/29/2018 12:23 AM, Nicolas Goaziou wrote: > Hello, > > stardiviner <numbchild@gmail.com> writes: > >> Hi, Nicolas, I have problem in my code. Even after many times and >> 5 hourse Edebug on ob-core.el code. Still can't find out where is >> wrong. After Edebug, just know somewhere is wrong. here is my info: >> >> - [ ] probelm is on ~org-babel-merge-params~, ~info~ is generated from >> it, but it removed ~link~ in ~:results~. >> - [ ] org-babel-execute-src-block >> - [ ] (org-babel-get-src-block-info) >> - [ ] (let* ((info .. (apply #'org-babel-merge-params ...)))) -> >> info -> :results file replace (been removed here) >> - because ~:results link file replace~ are merged into ~:results >> file replace~? >> - where does the ~file~ comes from? >> - from ~:file~ header argument? >> - which function get this? >> - [ ] org-babel-process-params info >> >> >> I added my latest patches in attachment (include test, and added your >> suggested modification). Can you help me on my code? > What are the differences between ":results file" and ":results link"? > > Regards, > [-- Attachment #2: Type: text/html, Size: 2191 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] support insert link without write result to :file link 2018-03-29 3:39 ` stardiviner @ 2018-03-29 16:30 ` Berry, Charles 0 siblings, 0 replies; 8+ messages in thread From: Berry, Charles @ 2018-03-29 16:30 UTC (permalink / raw) To: stardiviner; +Cc: emacs-orgmode@gnu.org, Nicolas Goaziou > On Mar 28, 2018, at 8:39 PM, stardiviner <numbchild@gmail.com> wrote: > > `:results file` will write non-empty result to `:file`. But `:results link` don't, it just insert a link of `:file` at result. And that is what I want to solve in the first post of this thread. The :post header arg will allow this. In the examples below the first code line in the src block writes a file that is not subsequently overwritten. #+name: file-output #+begin_src emacs-lisp (org-babel-result-to-file *this*) #+end_src #+begin_src R :results raw :post file-output() cat("this is a test",file="testit.out") "testit.out" #+end_src #+RESULTS: [[file:testit.out]] #+name: file-output2 #+begin_src emacs-lisp :var fname="xxx" (org-babel-result-to-file fname) #+end_src #+begin_src R :results raw :post file-output2("testit2.out") cat("this is a test",file="testit2.out") #+end_src #+RESULTS: [[file:testit2.out]] HTH, Chuck ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-03-29 16:30 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-03-26 15:35 How to let ob-shell to download file and get result as a link to file? stardiviner 2018-03-26 18:06 ` Michael Welle 2018-03-27 2:56 ` [PATCH] support insert link without write result to :file link stardiviner 2018-03-27 6:26 ` Nicolas Goaziou 2018-03-28 16:11 ` stardiviner 2018-03-28 16:23 ` Nicolas Goaziou 2018-03-29 3:39 ` stardiviner 2018-03-29 16:30 ` Berry, Charles
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).