From: John Herrlin <jherrlin@gmail.com> To: ian martins <ianxm@jhu.edu> Cc: Org-Mode mailing list <emacs-orgmode@gnu.org> Subject: Re: [PATCH] ob-java Date: Wed, 21 Oct 2020 15:54:18 +0200 [thread overview] Message-ID: <87eelr1y7p.fsf@gmail.com> (raw) In-Reply-To: <CAC=rjb5EcgFDhzT3sh=VjcoT=VKBCm_5MW2BxfYr_OiWzzHt2w@mail.gmail.com> ian martins <ianxm@jhu.edu> writes: >> >> What do you think about having a configurable list where the user can >> add =org-babel-java--import-maybe=? In my current use case I could then >> add RxJava imports to that list and the imports could be removed from >> the source code block. > > > I think this can already be done. imports can be added to the headers, and > babel allows file-wide headers, so you could add a =#+HEADER: :import > rx.Observable= line to the file and all source blocks would get it. it's > slightly different in that =org-babel-java--import-maybe= skips imports > that it thinks aren't needed. also if there are any non-java source blocks > in the same file, these imports could be added to them which would be bad, > so when mixing multiple languages in the same file this wouldn't be an > option. Thanks for pointing that out! It work just fine! > > NIT >> Some spacing when writing =public static...= >> > > Thanks for fixing the spacing. I don't think I can give you credit for the > patch, though, without leaving it out until ob-java is accepted. I dont need any credits, the important part is the result! I have made a couple of more runs and I cant find anything that doesnt work! > > On Wed, Oct 21, 2020 at 1:59 AM John Herrlin <jherrlin@gmail.com> wrote: > >> >> I did and it looks really good. The difference in this example: >> >> #+BEGIN_SRC java >> import rx.Observable; >> >> Observable.range(5, 3) >> .subscribe((Integer i) -> { System.out.println("Got: " + i); }, >> (Throwable t) -> { t.printStackTrace();}, >> () -> { System.out.println("Ending >> stream"); }); >> #+END_SRC >> >> from the ones I posted yesterday is tremendous! >> >> I am not very experienced with Emacs lisp but I think it's pretty easy >> to understand how things works and follow the code. The comments are >> also of good help. I really appreciate the work you have done! >> >> >> What do you think about having a configurable list where the user can >> add =org-babel-java--import-maybe=? In my current use case I could then >> add RxJava imports to that list and the imports could be removed from >> the source code block. >> >> >> NIT >> >> Some spacing when writing =public static...= >> >> #+BEGIN_SRC diff >> diff --git a/lisp/ob-java.el b/lisp/ob-java.el >> index 94c3f69cf..4f3904871 100644 >> --- a/lisp/ob-java.el >> +++ b/lisp/ob-java.el >> @@ -220,7 +220,7 @@ RESULT-FILE is the temp file to write the result." >> (org-babel-java--move-past org-babel-java--class-re) >> (insert "\n public static void main(String[] args) { >> System.out.print(\"success\"); >> -}\n\n")) >> + }\n\n")) >> >> ;; special handling to return value >> (when (eq result-type 'value) >> #+END_SRC >> >> >> >> ian martins <ianxm@jhu.edu> writes: >> >> > Thanks for testing, and thanks for pointing that out. I will fix it so >> that >> > `public` is optional. >> > >> > btw, in your example you didn't have to specify `:classname` since you >> > defined the class name in the source block. >> > >> > btw2, did you notice that you can C-c C-c on source blocks that don't >> have >> > main methods and it'll compile without error? >> > >> > On Tue, Oct 20, 2020 at 3:17 PM John Herrlin <jherrlin@gmail.com> wrote: >> > >> >> >> >> Hey, >> >> >> >> Did some debugging and found out that my class didn't contained =public= >> >> and the patch requires it to be. >> >> >> >> This works fine: >> >> >> >> #+HEADER: :classname Main >> >> #+HEADER: :dir src >> >> #+HEADER: :cmdline -classpath ./rxjava-1.3.8.jar:. >> >> #+HEADER: :cmpflag -classpath ./rxjava-1.3.8.jar >> >> #+BEGIN_SRC java :results output code >> >> import rx.Observable; >> >> public class Main { >> >> public static void main(String[] args) { >> >> Observable.range(5, 5) >> >> .subscribe(System.out::println); >> >> } >> >> } >> >> #+END_SRC >> >> >> >> >> >> >> >> >> >> ian martins <ianxm@jhu.edu> writes: >> >> >> >> > I noticed that the tests didn't run with "make test." This updates the >> >> > patch so that they can. I didn't add java to the list of default >> >> languages >> >> > because the java tests are slow. >> >> > >> >> > On Mon, Oct 5, 2020 at 9:23 AM ian martins <ianxm@jhu.edu> wrote: >> >> > >> >> >> I wrote those examples in an org file so I could test as I wrote >> them, >> >> and >> >> >> then exported it to make it more readable, but the export resulted in >> >> >> source block headers being lost. Here is the same without export: >> >> >> ---- >> >> >> * Changes >> >> >> >> >> >> - support for functional mode (~:results value~) >> >> >> - accept variables >> >> >> - don't require package, class, and main definitions >> >> >> - write source and result tempfiles to >> ~org-babel-temporary-directory~, >> >> >> but respects the ~:dir~ header >> >> >> - work with tramp >> >> >> >> >> >> * Examples >> >> >> ** Example 1 >> >> >> This outputs "hello." If class and main definitions aren't given the >> >> >> code block will be wrapped in generic ones. >> >> >> >> >> >> #+begin_src java :results output silent >> >> >> System.out.print("hello"); >> >> >> #+end_src >> >> >> >> >> >> This is exactly equivalent: >> >> >> >> >> >> #+begin_src java :results output silent >> >> >> public class Main { >> >> >> public static void main(String[] args) { >> >> >> System.out.print("hello"); >> >> >> } >> >> >> } >> >> >> #+end_src >> >> >> >> >> >> ** Example 2 >> >> >> This also outputs "hello." >> >> >> >> >> >> #+begin_src java :results value silent >> >> >> return "hello"; >> >> >> #+end_src >> >> >> >> >> >> ** Example 3 >> >> >> This generates the class "Example" in the package "org.orgmode" in >> the >> >> >> current directory. >> >> >> >> >> >> #+begin_src java :results output silent :classname >> org.orgmode.Example >> >> >> :dir . >> >> >> System.out.print("hello, org-mode"); >> >> >> #+end_src >> >> >> >> >> >> ** Example 4 >> >> >> The "Hey" class defines a static method but no main. C-c C-c on the >> >> >> "Hey" source block will write "./org/orgmode/Hey.java" and compile >> it. >> >> >> >> >> >> The "Main" class calls the "Hey" class. C-c C-c on the "Main" source >> >> >> block will write "./org/orgmode/Main.java" and compile and run it. >> >> >> >> >> >> #+begin_src java :results output silent :dir . >> >> >> package org.orgmode; >> >> >> >> >> >> public class Hey { >> >> >> public static String say() { >> >> >> return "hey"; >> >> >> } >> >> >> } >> >> >> #+end_src >> >> >> >> >> >> #+begin_src java :results output silent :dir . >> >> >> package org.orgmode; >> >> >> >> >> >> public class Main { >> >> >> public static void main(String[] args) { >> >> >> System.out.print(Hey.say()); >> >> >> } >> >> >> } >> >> >> #+end_src >> >> >> >> >> >> Instead of C-c C-c, we could have added tangle headers and written >> the >> >> >> source files out by tangling. >> >> >> >> >> >> ** Example 5 >> >> >> This prints the variable from the header >> >> >> >> >> >> #+begin_src java :var msg="hello, org-mode" :results output silent >> >> >> System.out.print(msg); >> >> >> #+end_src >> >> >> >> >> >> ** Example 6 >> >> >> This prints "hello, org-mode." The table is provided to the method >> as a >> >> >> list of lists. >> >> >> >> >> >> #+name: table >> >> >> | message | hello, org-mode | >> >> >> >> >> >> #+begin_src java :var tbl=table :results output silent >> >> >> System.out.print(tbl.get(0).get(1)); >> >> >> #+end_src >> >> >> >> >> >> ** Example 7 >> >> >> This example returns a list. >> >> >> >> >> >> Note that you're allowed to specify imports without defining the >> class >> >> >> or main methods. >> >> >> >> >> >> #+begin_src java :results value :exports both >> >> >> import java.util.Arrays; >> >> >> >> >> >> return Arrays.asList("message", "hello, org-mode"); >> >> >> #+end_src >> >> >> >> >> >> #+RESULTS: >> >> >> | message | hello, org-mode | >> >> >> >> >> >> On Mon, Oct 5, 2020 at 8:35 AM ian martins <ianxm@jhu.edu> wrote: >> >> >> >> >> >>> 1 Changes >> >> >>> ========= >> >> >>> >> >> >>> - support for functional mode (`:results value') >> >> >>> - accept variables >> >> >>> - don't require package, class, and main definitions >> >> >>> - write source and result tempfiles to >> >> >>> `org-babel-temporary-directory', but respects the `:dir' header >> >> >>> - work with tramp >> >> >>> >> >> >>> >> >> >>> 2 Examples >> >> >>> ========== >> >> >>> Some examples follow. See the tests for more examples. I'll write >> >> >>> proper docs after review. >> >> >>> >> >> >>> 2.1 Example 1 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This outputs "hello." If class and main definitions aren't given >> the >> >> >>> code block will be wrapped in generic ones. >> >> >>> >> >> >>> ,---- >> >> >>> | System.out.print("hello"); >> >> >>> `---- >> >> >>> >> >> >>> This is exactly equivalent: >> >> >>> >> >> >>> ,---- >> >> >>> | public class Main { >> >> >>> | public static void main(String[] args) { >> >> >>> | System.out.print("hello"); >> >> >>> | } >> >> >>> | } >> >> >>> `---- >> >> >>> >> >> >>> >> >> >>> 2.2 Example 2 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This also outputs "hello." >> >> >>> >> >> >>> ,---- >> >> >>> | return "hello"; >> >> >>> `---- >> >> >>> >> >> >>> >> >> >>> 2.3 Example 3 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This generates the class "Example" in the package "org.orgmode" in >> >> the >> >> >>> current directory. >> >> >>> >> >> >>> ,---- >> >> >>> | System.out.print("hello, org-mode"); >> >> >>> `---- >> >> >>> >> >> >>> >> >> >>> 2.4 Example 4 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> The "Hey" class defines a static method but no main. C-c C-c on >> the >> >> >>> "Hey" source block will write "./org/orgmode/Hey.java" and compile >> >> it. >> >> >>> >> >> >>> The "Main" class calls the "Hey" class. C-c C-c on the "Main" >> source >> >> >>> block will write "./org/orgmode/Main.java" and compile and run it. >> >> >>> >> >> >>> ,---- >> >> >>> | package org.orgmode; >> >> >>> | >> >> >>> | public class Hey { >> >> >>> | public static String say() { >> >> >>> | return "hey"; >> >> >>> | } >> >> >>> | } >> >> >>> `---- >> >> >>> >> >> >>> ,---- >> >> >>> | package org.orgmode; >> >> >>> | >> >> >>> | public class Main { >> >> >>> | public static void main(String[] args) { >> >> >>> | System.out.print(Hey.say()); >> >> >>> | } >> >> >>> | } >> >> >>> `---- >> >> >>> >> >> >>> Instead of C-c C-c, we could have added tangle headers and written >> >> the >> >> >>> source files out by tangling. >> >> >>> >> >> >>> >> >> >>> 2.5 Example 5 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This prints the variable from the header >> >> >>> >> >> >>> ,---- >> >> >>> | System.out.print(msg); >> >> >>> `---- >> >> >>> >> >> >>> >> >> >>> 2.6 Example 6 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This prints "hello, org-mode." The table is provided to the >> method as >> >> >>> a list of lists. >> >> >>> >> >> >>> message hello, org-mode >> >> >>> >> >> >>> ,---- >> >> >>> | System.out.print(tbl.get(0).get(1)); >> >> >>> `---- >> >> >>> >> >> >>> >> >> >>> 2.7 Example 7 >> >> >>> ~~~~~~~~~~~~~ >> >> >>> >> >> >>> This example returns a list. >> >> >>> >> >> >>> Note that you're allowed to specify imports without defining the >> >> class >> >> >>> or main methods. >> >> >>> >> >> >>> ,---- >> >> >>> | import java.util.Arrays; >> >> >>> | >> >> >>> | return Arrays.asList("message", "hello, org-mode"); >> >> >>> `---- >> >> >>> >> >> >>> message hello, org-mode >> >> >>> >> >> >> >> >> >>
next prev parent reply other threads:[~2020-10-21 13:55 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-05 12:35 ian martins 2020-10-05 13:23 ` ian martins 2020-10-09 11:15 ` ian martins 2020-10-20 18:28 ` John Herrlin 2020-10-20 19:17 ` John Herrlin 2020-10-21 2:37 ` ian martins 2020-10-21 5:59 ` John Herrlin 2020-10-21 12:47 ` ian martins 2020-10-21 13:54 ` John Herrlin [this message] 2020-10-22 12:23 ` ian martins 2020-10-22 12:56 ` John Herrlin 2020-10-24 17:05 ` Kyle Meyer 2020-10-25 2:10 ` ian martins 2020-10-25 2:40 ` Kyle Meyer 2020-10-25 19:36 ` ian martins 2020-11-05 16:29 ` Jarmo Hurri 2020-11-05 17:10 ` ian martins 2020-11-06 5:21 ` Jarmo Hurri 2020-11-06 23:00 ` ian martins 2020-11-09 14:06 ` Jarmo Hurri 2020-11-10 13:14 ` ian martins 2020-11-10 6:29 ` Jarmo Hurri 2020-11-14 11:47 ` Jarmo Hurri 2020-11-14 15:46 ` ian martins 2020-11-15 4:36 ` Jarmo Hurri 2020-11-17 12:07 ` ian martins 2020-12-14 5:55 ` Bastien 2020-11-11 7:45 ` Bastien 2020-10-24 11:58 ` Bastien 2020-10-25 0:30 ` ian martins 2020-10-28 9:13 ` Bastien 2020-10-31 11:03 ` ian martins
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=87eelr1y7p.fsf@gmail.com \ --to=jherrlin@gmail.com \ --cc=emacs-orgmode@gnu.org \ --cc=ianxm@jhu.edu \ --subject='Re: [PATCH] ob-java' \ /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
Code repositories for project(s) associated with this 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).