* ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. @ 2018-11-30 8:46 stardiviner 2018-11-30 21:25 ` Tim Cross 2019-01-10 1:47 ` stardiviner 0 siblings, 2 replies; 10+ messages in thread From: stardiviner @ 2018-11-30 8:46 UTC (permalink / raw) To: org-mode The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~. #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj" (defproject xunfei-clj-demo "0.1.0-SNAPSHOT" :description "xunfei-clj demo" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.9.0"] [xunfei-clj "0.1.4-SNAPSHOT"]] :resource-paths ["lib/Msc.jar"]) #+end_src In upper case, obviously I don't want insert the ~(ns ..)~ line of code. I hope the ob-clojure header argument ~:ns~ should detect value like "nil", "" (empty string) or something else. Or when ~:ns~ header argument is not specified. So that the tangling will not auto insert ~(ns ..)~ line. -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2018-11-30 8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner @ 2018-11-30 21:25 ` Tim Cross 2018-12-03 6:25 ` stardiviner 2019-01-10 1:47 ` stardiviner 1 sibling, 1 reply; 10+ messages in thread From: Tim Cross @ 2018-11-30 21:25 UTC (permalink / raw) To: numbchild; +Cc: org-mode stardiviner <numbchild@gmail.com> writes: > The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~. > > #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj" > (defproject xunfei-clj-demo "0.1.0-SNAPSHOT" > :description "xunfei-clj demo" > :url "http://example.com/FIXME" > :license {:name "Eclipse Public License" > :url "http://www.eclipse.org/legal/epl-v10.html"} > :dependencies [[org.clojure/clojure "1.9.0"] > [xunfei-clj "0.1.4-SNAPSHOT"]] > :resource-paths ["lib/Msc.jar"]) > #+end_src > > In upper case, obviously I don't want insert the ~(ns ..)~ line of code. > > I hope the ob-clojure header argument ~:ns~ should detect value like > "nil", "" (empty string) or something else. Or when ~:ns~ header > argument is not specified. So that the tangling will not auto insert > ~(ns ..)~ line. I think the problem here is that really, project.clj is not a valid clojure source file. It is really a clojure data file or clojure snippet (I mean in the sense that you cannot execute it or include it as a dependency within a clojure program - it is input data for the lein build tool). If lein was being developed from scratch today, rather than project.clj, you would probably have project.edn. The question is, should we allow setting ns to nil/"", preventing inclusion of a ns line, which would make 'real' clojure source files invalid just to support this edge case or should we consider an alternative solution e.g. - have a 'lein-project' source type which could perhaps provide additional support for editing project.clj files (as I suspect lein is on the way out - replaced with things like clj or boot) - try using edn-mode and having support for edn as a valid language type. I've never used edn mode and I'm not 100% certain project.clj and edn are completely compatible. It seems to me that the preferred build tool is likely to become clj or derivatives of clj. I've noticed increasingly longer delays in new lein releases (the 'reflection' warning has been there for nearly 12 months now, as has the incorrect classpath warning on some platforms). In the long-term, I think org would probably benefit from integration with clj rather than cider for ob-clojure as it is likely to be more stable and less complex. Using cider has always felt like pushing a square peg into a round hole to me. Tim -- Tim Cross ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2018-11-30 21:25 ` Tim Cross @ 2018-12-03 6:25 ` stardiviner 2018-12-04 21:22 ` Tim Cross 0 siblings, 1 reply; 10+ messages in thread From: stardiviner @ 2018-12-03 6:25 UTC (permalink / raw) To: Tim Cross; +Cc: org-mode Tim Cross <theophilusx@gmail.com> writes: > I think the problem here is that really, project.clj is not a valid > clojure source file. It is really a clojure data file or clojure > snippet (I mean in the sense that you cannot execute it or include it as > a dependency within a clojure program - it is input data for the lein > build tool). If lein was being developed from scratch today, rather than > project.clj, you would probably have project.edn. Actually a few months ago, Sean on Slack clojurians helped me out for using clj and deps.edn. Just because of habit inertia. I'm still using Leiningen. As you said, the Clojure community is moving to clj/clojure + deps.edn. I decide to following the trend. Start to use it now. > > The question is, should we allow setting ns to nil/"", preventing > inclusion of a ns line, which would make 'real' clojure source files > invalid just to support this edge case or should we consider an > alternative solution e.g. > > - have a 'lein-project' source type which could perhaps provide > additional support for editing project.clj files (as I suspect lein is > on the way out - replaced with things like clj or boot) > - try using edn-mode and having support for edn as a valid language > type. I've never used edn mode and I'm not 100% certain project.clj > and edn are completely compatible. > > It seems to me that the preferred build tool is likely to become clj or > derivatives of clj. I've noticed increasingly longer delays in new lein > releases (the 'reflection' warning has been there for nearly 12 months > now, as has the incorrect classpath warning on some platforms). > > In the long-term, I think org would probably benefit from integration > with clj rather than cider for ob-clojure as it is likely to be more > stable and less complex. Using cider has always felt like pushing a > square peg into a round hole to me. I remember we have a short discussion about ob-clojure use clj instead of CIDER before. I totally agree on this. Seems already has an Emacs package named "inf-clojure". I added this "integrate inf-clojure to ob-clojure" as my task. But not sure when to check it out. I have many tasks on my list. I have an idea, would you create an GitHub repo for this? I would like to contribute on it. As I said previous, if I use "deps.edn", use `edn-mode' would solve this problem. But there is no `edn-mode'. I checked out MELPA, only has package named "edn" which is used to Support for reading and writing the edn data format from elisp. I also did a search on GitHub. No luck. Anyway, I'm going to switch to clj + deps.edn And Thanks, @Tim. -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2018-12-03 6:25 ` stardiviner @ 2018-12-04 21:22 ` Tim Cross 2018-12-05 9:04 ` stardiviner 0 siblings, 1 reply; 10+ messages in thread From: Tim Cross @ 2018-12-04 21:22 UTC (permalink / raw) To: numbchild; +Cc: org-mode Sorry, only just noticed this response in my spam folder - gmail is tagging your messages as spam because it could not verify it was legit. stardiviner <numbchild@gmail.com> writes: > Tim Cross <theophilusx@gmail.com> writes: > >> I think the problem here is that really, project.clj is not a valid >> clojure source file. It is really a clojure data file or clojure >> snippet (I mean in the sense that you cannot execute it or include it as >> a dependency within a clojure program - it is input data for the lein >> build tool). If lein was being developed from scratch today, rather than >> project.clj, you would probably have project.edn. > > Actually a few months ago, Sean on Slack clojurians helped me out for > using clj and deps.edn. Just because of habit inertia. I'm still using > Leiningen. As you said, the Clojure community is moving to clj/clojure + > deps.edn. I decide to following the trend. Start to use it now. > >> >> The question is, should we allow setting ns to nil/"", preventing >> inclusion of a ns line, which would make 'real' clojure source files >> invalid just to support this edge case or should we consider an >> alternative solution e.g. >> >> - have a 'lein-project' source type which could perhaps provide >> additional support for editing project.clj files (as I suspect lein is >> on the way out - replaced with things like clj or boot) >> - try using edn-mode and having support for edn as a valid language >> type. I've never used edn mode and I'm not 100% certain project.clj >> and edn are completely compatible. >> >> It seems to me that the preferred build tool is likely to become clj or >> derivatives of clj. I've noticed increasingly longer delays in new lein >> releases (the 'reflection' warning has been there for nearly 12 months >> now, as has the incorrect classpath warning on some platforms). >> >> In the long-term, I think org would probably benefit from integration >> with clj rather than cider for ob-clojure as it is likely to be more >> stable and less complex. Using cider has always felt like pushing a >> square peg into a round hole to me. > > I remember we have a short discussion about ob-clojure use clj instead > of CIDER before. I totally agree on this. Seems already has an Emacs > package named "inf-clojure". I added this "integrate inf-clojure to > ob-clojure" as my task. But not sure when to check it out. I have many > tasks on my list. I have an idea, would you create an GitHub repo for > this? I would like to contribute on it. > > As I said previous, if I use "deps.edn", use `edn-mode' would solve this > problem. But there is no `edn-mode'. I checked out MELPA, only has > package named "edn" which is used to Support for reading and writing the > edn data format from elisp. I also did a search on GitHub. No luck. > > Anyway, I'm going to switch to clj + deps.edn > > And Thanks, @Tim. At present, I have no time to work on any clojure. I'm completely consumed with work demands and unfortunately, I've not convinced them to allow me to use Clojre/clojurescript (yet!), so stuck in javascript world for now. I will have leave in the early year and will likely re-visit this. I too need to move from lein to clj + edn. It would be really good to simplify the org interface for clojre and clojurescript and I suspect clj + edn will be the way to go. The older inf-clojure was OK, but it lacked some higher level features we do need as well, so it will take a bit of work. Tim -- Tim Cross ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2018-12-04 21:22 ` Tim Cross @ 2018-12-05 9:04 ` stardiviner 0 siblings, 0 replies; 10+ messages in thread From: stardiviner @ 2018-12-05 9:04 UTC (permalink / raw) To: Tim Cross; +Cc: org-mode Tim Cross <theophilusx@gmail.com> writes: > Sorry, only just noticed this response in my spam folder - gmail is > tagging your messages as spam because it could not verify it was legit. Yeah, I found some other's emails in Gmail Spam too. I usually regularly check Spam folder a week. Might because GPG sign? I don't know why. > I will have leave in the early year and will likely re-visit this. I too > need to move from lein to clj + edn. It would be really good to simplify > the org interface for clojre and clojurescript and I suspect clj + edn > will be the way to go. The older inf-clojure was OK, but it lacked some > higher level features we do need as well, so it will take a bit of work. I'm currently switched to clj-new utility. I'm considering create an Emacs extension to invoke "clj-new". I'll start work on it in a few days. -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2018-11-30 8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner 2018-11-30 21:25 ` Tim Cross @ 2019-01-10 1:47 ` stardiviner 2019-01-14 5:52 ` stardiviner 1 sibling, 1 reply; 10+ messages in thread From: stardiviner @ 2019-01-10 1:47 UTC (permalink / raw) To: org-mode [-- Attachment #1: Type: text/plain, Size: 1109 bytes --] stardiviner <numbchild@gmail.com> writes: > The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~. > > #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj" > (defproject xunfei-clj-demo "0.1.0-SNAPSHOT" > :description "xunfei-clj demo" > :url "http://example.com/FIXME" > :license {:name "Eclipse Public License" > :url "http://www.eclipse.org/legal/epl-v10.html"} > :dependencies [[org.clojure/clojure "1.9.0"] > [xunfei-clj "0.1.4-SNAPSHOT"]] > :resource-paths ["lib/Msc.jar"]) > #+end_src > > In upper case, obviously I don't want insert the ~(ns ..)~ line of code. > > I hope the ob-clojure header argument ~:ns~ should detect value like > "nil", "" (empty string) or something else. Or when ~:ns~ header > argument is not specified. So that the tangling will not auto insert > ~(ns ..)~ line. I added an patch to detect :ns is not specified which is `nil'. This will be better for tangling. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --] [-- Type: text/x-patch, Size: 3154 bytes --] From 749e85a30ca6226c4b3aaef85ae0d72b51d6018e Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Thu, 10 Jan 2019 09:34:39 +0800 Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns statement * lisp/ob-clojure.el: (org-babel-expand-body:clojure, org-babel-header-args:clojure): whether auto prepend Clojure (ns ..) statement depend on whether have :ns header argument specified. * etc/ORG-NEWS: mentioned this changed in ORG-NEWS. --- etc/ORG-NEWS | 5 +++++ lisp/ob-clojure.el | 34 +++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 1bb485ad1..2eea00d97 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -13,6 +13,11 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org. * Version 9.3 ** Incompatible changes +*** ob-clojure will not auto prepend ~(ns ..)~ statement now +When tangling, user usually just want to tangle literally code instead +of prepend inserting a ~(ns ..)~ statement before source block +code. Now, when you have no ~:ns~ header argument specified, this +behavior will not happend automatically. *** Change in behavior on exit from an Org edit buffer Org will no longer attempt to restore the window configuration in the frame to which the user returns after editing a source block with diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 2088ab375..55a4c3eb4 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -63,7 +63,11 @@ (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) (defvar org-babel-default-header-args:clojure '()) -(defvar org-babel-header-args:clojure '((package . :any))) +(defvar org-babel-header-args:clojure '((package . :any)) + "For the :ns header argument, when you don't specify it, it + will not auto prepend (ns ..) statement before source block + code. If you have a :ns specified, the (ns ..) statement will + be auto prepended before source block code.") (defcustom org-babel-clojure-sync-nrepl-timeout 10 "Timeout value, in seconds, of a Clojure sync call. @@ -103,20 +107,20 @@ If the value is nil, timeout is disabled." (result-params (cdr (assq :result-params params))) (print-level nil) (print-length nil) - (body - (org-trim - (format "(ns %s)\n%s" - ;; Source block specified namespace :ns. - ns - ;; Variables binding. - (if (null vars) (org-trim body) - (format "(let [%s]\n%s)" - (mapconcat - (lambda (var) - (format "%S (quote %S)" (car var) (cdr var))) - vars - "\n ") - body)))))) + (body (org-trim + (concat + ;; Source block specified namespace :ns. + (if (not (null (cdr (assq :ns params)))) + (format "(ns %s)\n" ns)) + ;; Variables binding. + (if (null vars) (org-trim body) + (format "(let [%s]\n%s)" + (mapconcat + (lambda (var) + (format "%S (quote %S)" (car var) (cdr var))) + vars + "\n ") + body)))))) (if (or (member "code" result-params) (member "pp" result-params)) (format "(clojure.pprint/pprint (do %s))" body) -- 2.20.1 [-- Attachment #3: Type: text/plain, Size: 255 bytes --] -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2019-01-10 1:47 ` stardiviner @ 2019-01-14 5:52 ` stardiviner 2019-01-21 0:39 ` [PATCH] " stardiviner 0 siblings, 1 reply; 10+ messages in thread From: stardiviner @ 2019-01-14 5:52 UTC (permalink / raw) To: org-mode; +Cc: Nicolas Goaziou [-- Attachment #1: Type: text/plain, Size: 1631 bytes --] I updated the patch by adding a test. With command "make test" I got: ``` Tangled 0 code blocks from babel.org passed 132/828 ob-tangle/no-excessive-id-insertion-on-tangle passed 133/828 ob-test/org-babel-combine-header-arg-lists failed 134/828 org-missing-dependency/test-ob-R failed 135/828 org-missing-dependency/test-ob-clojure failed 136/828 org-missing-dependency/test-ob-eshell failed 137/828 org-missing-dependency/test-ob-lua failed 138/828 org-missing-dependency/test-ob-maxima failed 139/828 org-missing-dependency/test-ob-plantuml failed 140/828 org-missing-dependency/test-ob-ruby failed 141/828 org-missing-dependency/test-ob-scheme failed 142/828 org-missing-dependency/test-ob-vala failed 143/828 org-missing-dependency/test-org-attach-annex failed 144/828 org-missing-dependency/test-org-protocol passed 145/828 test-ob-exp/org-babel-exp-src-blocks/w-no-file passed 146/828 test-ob-exp/org-babel-exp-src-blocks/w-no-headers passed 147/828 test-ob-exp/org-babel-exp-src-blocks/w-no-headers2 executing Emacs-Lisp code block... ``` With command: $ make BTEST_RE="ob-clojure/tangle-without-ns" test-dirty I got: ``` Loading /home/stardiviner/Code/Emacs/org-mode/testing/lisp/test-property-inheritance.el (source)... selected tests: ob-clojure/tangle-without-ns Running 0 tests (2019-01-14 13:27:58+0800) Ran 0 tests, 0 results as expected (2019-01-14 13:27:58+0800) make cleantest ``` I don't know why it report missing requirement, so the test failed. Nicolas, do you have any idea why this? You can check out the test code. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --] [-- Type: text/x-patch, Size: 4052 bytes --] From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Thu, 10 Jan 2019 09:34:39 +0800 Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns statement * lisp/ob-clojure.el: (org-babel-expand-body:clojure, org-babel-header-args:clojure): whether auto prepend Clojure (ns ..) statement depend on whether have :ns header argument specified. * etc/ORG-NEWS: mentioned this changed in ORG-NEWS. * testing/test-ob-clojure.el: add a test for tangled clojure code without (ns ..). --- etc/ORG-NEWS | 5 +++++ lisp/ob-clojure.el | 34 ++++++++++++++++++--------------- testing/lisp/test-ob-clojure.el | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 1bb485ad1..2eea00d97 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -13,6 +13,11 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org. * Version 9.3 ** Incompatible changes +*** ob-clojure will not auto prepend ~(ns ..)~ statement now +When tangling, user usually just want to tangle literally code instead +of prepend inserting a ~(ns ..)~ statement before source block +code. Now, when you have no ~:ns~ header argument specified, this +behavior will not happend automatically. *** Change in behavior on exit from an Org edit buffer Org will no longer attempt to restore the window configuration in the frame to which the user returns after editing a source block with diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 2088ab375..55a4c3eb4 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -63,7 +63,11 @@ (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) (defvar org-babel-default-header-args:clojure '()) -(defvar org-babel-header-args:clojure '((package . :any))) +(defvar org-babel-header-args:clojure '((package . :any)) + "For the :ns header argument, when you don't specify it, it + will not auto prepend (ns ..) statement before source block + code. If you have a :ns specified, the (ns ..) statement will + be auto prepended before source block code.") (defcustom org-babel-clojure-sync-nrepl-timeout 10 "Timeout value, in seconds, of a Clojure sync call. @@ -103,20 +107,20 @@ If the value is nil, timeout is disabled." (result-params (cdr (assq :result-params params))) (print-level nil) (print-length nil) - (body - (org-trim - (format "(ns %s)\n%s" - ;; Source block specified namespace :ns. - ns - ;; Variables binding. - (if (null vars) (org-trim body) - (format "(let [%s]\n%s)" - (mapconcat - (lambda (var) - (format "%S (quote %S)" (car var) (cdr var))) - vars - "\n ") - body)))))) + (body (org-trim + (concat + ;; Source block specified namespace :ns. + (if (not (null (cdr (assq :ns params)))) + (format "(ns %s)\n" ns)) + ;; Variables binding. + (if (null vars) (org-trim body) + (format "(let [%s]\n%s)" + (mapconcat + (lambda (var) + (format "%S (quote %S)" (car var) (cdr var))) + vars + "\n ") + body)))))) (if (or (member "code" result-params) (member "pp" result-params)) (format "(clojure.pprint/pprint (do %s))" body) diff --git a/testing/lisp/test-ob-clojure.el b/testing/lisp/test-ob-clojure.el index f917ca4cc..a5391dcb3 100644 --- a/testing/lisp/test-ob-clojure.el +++ b/testing/lisp/test-ob-clojure.el @@ -71,6 +71,20 @@ (should (string= ": 1" (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))) +(ert-deftest ob-clojure/tangle-without-ns () + (org-test-with-temp-text + "#+begin_src clojure :tangle /tmp/test.clj +(print 1) +#+end_src" + (org-babel-next-src-block) + (org-babel-tangle) + (should + (string= + "(print 1) +" + (with-temp-buffer + (insert-file-contents "/tmp/test.clj") + (buffer-substring-no-properties (point-min) (point-max))))))) (provide 'test-ob-clojure) -- 2.20.1 [-- Attachment #3: Type: text/plain, Size: 247 bytes --] -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2019-01-14 5:52 ` stardiviner @ 2019-01-21 0:39 ` stardiviner 2019-01-21 20:19 ` Nicolas Goaziou 0 siblings, 1 reply; 10+ messages in thread From: stardiviner @ 2019-01-21 0:39 UTC (permalink / raw) To: org-mode [-- Attachment #1: Type: text/plain, Size: 381 bytes --] After few days later, I re-run "make test", it's fine now. 6 unexpected results: FAILED ob-D/inhomogeneous_table FAILED ob-D/list-list-var FAILED ob-D/list-var FAILED ob-D/vector-var FAILED test-org-clock/clocktable/lang FAILED test-org-colview/columns-width Because few days passed, make sure the patch is the latest version. I attached my patch again. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --] [-- Type: text/x-patch, Size: 4052 bytes --] From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001 From: stardiviner <numbchild@gmail.com> Date: Thu, 10 Jan 2019 09:34:39 +0800 Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns statement * lisp/ob-clojure.el: (org-babel-expand-body:clojure, org-babel-header-args:clojure): whether auto prepend Clojure (ns ..) statement depend on whether have :ns header argument specified. * etc/ORG-NEWS: mentioned this changed in ORG-NEWS. * testing/test-ob-clojure.el: add a test for tangled clojure code without (ns ..). --- etc/ORG-NEWS | 5 +++++ lisp/ob-clojure.el | 34 ++++++++++++++++++--------------- testing/lisp/test-ob-clojure.el | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 1bb485ad1..2eea00d97 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -13,6 +13,11 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org. * Version 9.3 ** Incompatible changes +*** ob-clojure will not auto prepend ~(ns ..)~ statement now +When tangling, user usually just want to tangle literally code instead +of prepend inserting a ~(ns ..)~ statement before source block +code. Now, when you have no ~:ns~ header argument specified, this +behavior will not happend automatically. *** Change in behavior on exit from an Org edit buffer Org will no longer attempt to restore the window configuration in the frame to which the user returns after editing a source block with diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 2088ab375..55a4c3eb4 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -63,7 +63,11 @@ (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) (defvar org-babel-default-header-args:clojure '()) -(defvar org-babel-header-args:clojure '((package . :any))) +(defvar org-babel-header-args:clojure '((package . :any)) + "For the :ns header argument, when you don't specify it, it + will not auto prepend (ns ..) statement before source block + code. If you have a :ns specified, the (ns ..) statement will + be auto prepended before source block code.") (defcustom org-babel-clojure-sync-nrepl-timeout 10 "Timeout value, in seconds, of a Clojure sync call. @@ -103,20 +107,20 @@ If the value is nil, timeout is disabled." (result-params (cdr (assq :result-params params))) (print-level nil) (print-length nil) - (body - (org-trim - (format "(ns %s)\n%s" - ;; Source block specified namespace :ns. - ns - ;; Variables binding. - (if (null vars) (org-trim body) - (format "(let [%s]\n%s)" - (mapconcat - (lambda (var) - (format "%S (quote %S)" (car var) (cdr var))) - vars - "\n ") - body)))))) + (body (org-trim + (concat + ;; Source block specified namespace :ns. + (if (not (null (cdr (assq :ns params)))) + (format "(ns %s)\n" ns)) + ;; Variables binding. + (if (null vars) (org-trim body) + (format "(let [%s]\n%s)" + (mapconcat + (lambda (var) + (format "%S (quote %S)" (car var) (cdr var))) + vars + "\n ") + body)))))) (if (or (member "code" result-params) (member "pp" result-params)) (format "(clojure.pprint/pprint (do %s))" body) diff --git a/testing/lisp/test-ob-clojure.el b/testing/lisp/test-ob-clojure.el index f917ca4cc..a5391dcb3 100644 --- a/testing/lisp/test-ob-clojure.el +++ b/testing/lisp/test-ob-clojure.el @@ -71,6 +71,20 @@ (should (string= ": 1" (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))) +(ert-deftest ob-clojure/tangle-without-ns () + (org-test-with-temp-text + "#+begin_src clojure :tangle /tmp/test.clj +(print 1) +#+end_src" + (org-babel-next-src-block) + (org-babel-tangle) + (should + (string= + "(print 1) +" + (with-temp-buffer + (insert-file-contents "/tmp/test.clj") + (buffer-substring-no-properties (point-min) (point-max))))))) (provide 'test-ob-clojure) -- 2.20.1 [-- Attachment #3: Type: text/plain, Size: 255 bytes --] -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2019-01-21 0:39 ` [PATCH] " stardiviner @ 2019-01-21 20:19 ` Nicolas Goaziou 2019-01-22 7:57 ` stardiviner 0 siblings, 1 reply; 10+ messages in thread From: Nicolas Goaziou @ 2019-01-21 20:19 UTC (permalink / raw) To: stardiviner; +Cc: org-mode Hello, stardiviner <numbchild@gmail.com> writes: > From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001 > From: stardiviner <numbchild@gmail.com> > Date: Thu, 10 Jan 2019 09:34:39 +0800 > Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns > statement Applied, with tiny changes. Thank you. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. 2019-01-21 20:19 ` Nicolas Goaziou @ 2019-01-22 7:57 ` stardiviner 0 siblings, 0 replies; 10+ messages in thread From: stardiviner @ 2019-01-22 7:57 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: org-mode Nicolas Goaziou <mail@nicolasgoaziou.fr> writes: > Hello, > > stardiviner <numbchild@gmail.com> writes: > >> From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001 >> From: stardiviner <numbchild@gmail.com> >> Date: Thu, 10 Jan 2019 09:34:39 +0800 >> Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns >> statement > > Applied, with tiny changes. Thank you. Thanks as always, Nicolas. > > Regards, -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2019-01-22 7:54 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-11-30 8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner 2018-11-30 21:25 ` Tim Cross 2018-12-03 6:25 ` stardiviner 2018-12-04 21:22 ` Tim Cross 2018-12-05 9:04 ` stardiviner 2019-01-10 1:47 ` stardiviner 2019-01-14 5:52 ` stardiviner 2019-01-21 0:39 ` [PATCH] " stardiviner 2019-01-21 20:19 ` Nicolas Goaziou 2019-01-22 7:57 ` stardiviner
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).