From: "numbchild@gmail.com" <numbchild@gmail.com>
To: Tim Cross <theophilusx@gmail.com>
Cc: Org-mode <emacs-orgmode@gnu.org>
Subject: Re: ob-clojure evaluate error when Org-mode buffer has ns clojure code
Date: Sun, 18 Jun 2017 13:48:45 +0800 [thread overview]
Message-ID: <CAL1eYu+Q7JRFEDv2y=p23EiEKPptyWTD_eh=2pHKFqOeR2it+g@mail.gmail.com> (raw)
In-Reply-To: <87vanuayo1.fsf@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 13702 bytes --]
I see, thanks very much.
[stardiviner] <Hack this world!> GPG key ID: 47C32433
IRC(freeenode): stardiviner Twitter: @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/
On Sun, Jun 18, 2017 at 9:10 AM, Tim Cross <theophilusx@gmail.com> wrote:
>
> It looks like you have a combination of both clojure errors and possibly
> org babel errors. You need to sort out the clojure errors before you can
> verify there are any problems with org babel clojure support.
>
> You mention that
>
> > I start CIDER REPL session with `cider-jack-in` without project in
> > Emacs.
>
> but then you say
>
> > But I require `incanter` works, I have `incanter` in Leiningen
> > dependencies.
>
> However, if you don't have a project, then you don't have a project.clj
> file and if you don't have a project.clj file, you don't have a
> :dependencies block with incanter as a specified dependency, so incanter
> is not in your classpath and therefore will not be found when you try to
> require it.
>
> Note also that you have incorrect syntax for your require
> statement. Also to be clear, (ns ... (:require ...)) does not define
> dependencies. It simply loads the library into the namespace.
>
> The correct syntax for your first block is
>
> (ns my-kk
> (:require [incanter.core :as k]))
>
> There is no quote before the lib spec - this is also what the error
> message is telling you. If you call require as a function, then you do
> need to use the quote i.e.
>
> (require 'incanter.core :as k)
>
> You appear to have two main problems here and that is making things
> 'muddy'. I'm guessing your learning clojure as well as using org babel
> clojure support. You need to sort out the clojure problems first. Highly
> recommend you suspend using org mode to do your clojure until your
> across all the clojure specifics and have a good understanding of the
> clojure environment. You will need a good understanding of how clojure
> works to then be able to work out what you need to do to get it to work
> with org mode. Trying to do both at the same time will just cause
> confusion.
>
> HTH
>
> Tim
>
> numbchild@gmail.com writes:
>
> > I did configure `ob-clojure` with the following settings:
> >
> > ```elisp
> > (require 'ob-clojure)
> >
> > ;; use CIDER as the Clojure execution backend
> > (setq org-babel-clojure-backend 'cider)
> >
> > ;; Useful keybindings when using Clojure from Org
> > ;; (org-defkey org-mode-map (kbd "C-x C-e") 'cider-eval-last-sexp)
> > ;; (org-defkey org-mode-map (kbd "C-c C-d") 'cider-doc)
> >
> > ;; No timeout when executing calls on Cider via nrepl
> > ;; (setq org-babel-clojure-sync-nrepl-timeout nil)
> >
> > ;; let `ob-clojure' babel src blocks allow evaluation.
> > (add-to-list 'org-babel-default-header-args:clojure
> > '(:eval . "yes"))
> > (add-to-list 'org-babel-default-header-args:clojure
> > '(:results . "output"))
> > ;; (add-to-list 'org-babel-default-header-args:clojure
> > ;; '(:show-process . t))
> > ```
> >
> > I start CIDER REPL session with `cider-jack-in` without project in Emacs.
> >
> > I changed namespace to `user` in src blocks like this:
> >
> > ```org
> > #+BEGIN_SRC clojure
> > (ns user
> > (:require '[incanter.core :as kk]))
> > #+END_SRC
> >
> > #+RESULTS:
> >
> > #+BEGIN_SRC clojure :session :results output
> > (print "hi")
> > (def kkkk "hello")
> > #+END_SRC
> >
> > #+RESULTS:
> > : hi
> > ```
> >
> > Then it works.
> >
> > Seems you're right, might my first src block can't work correctly. That
> > caused second src block evaluation failed.
> >
> > But I require `incanter` works, I have `incanter` in Leiningen
> dependencies.
> > ```clojure
> > (require '[incanter.core :as kk])
> > ```
> >
> > But include `incanter` in namespace failed:
> > ```clojure
> > (ns user
> > (:require '[incanter.core :as kk]))
> > ```
> > with the following error.
> > ```
> > Show: Clojure Java REPL Tooling Duplicates All (29 frames hidden)
> >
> > 2. Unhandled clojure.lang.Compiler$CompilerException
> > Error compiling Code/learning/Emacs/Org-mode/ob-clojure.org at (1:1)
> >
> > core.clj: 5771 clojure.core/throw-if
> > core.clj: 5835 clojure.core/load-lib
> > core.clj: 5832 clojure.core/load-lib
> > RestFn.java: 142 clojure.lang.RestFn/applyTo
> > core.clj: 659 clojure.core/apply
> > core.clj: 5893 clojure.core/load-libs
> > core.clj: 5873 clojure.core/load-libs
> > RestFn.java: 137 clojure.lang.RestFn/applyTo
> > core.clj: 659 clojure.core/apply
> > core.clj: 5911 clojure.core/require
> > core.clj: 5911 clojure.core/require
> > RestFn.java: 408 clojure.lang.RestFn/invoke
> > REPL: 1 user/eval46259/loading--auto--
> > REPL: 1 user/eval46259
> > REPL: 1 user/eval46259
> > Compiler.java: 6977 clojure.lang.Compiler/eval
> > Compiler.java: 6966 clojure.lang.Compiler/eval
> > Compiler.java: 6940 clojure.lang.Compiler/eval
> > core.clj: 3187 clojure.core/eval
> > core.clj: 3183 clojure.core/eval
> > main.clj: 242 clojure.main/repl/read-eval-print/fn
> > main.clj: 242 clojure.main/repl/read-eval-print
> > main.clj: 260 clojure.main/repl/fn
> > main.clj: 260 clojure.main/repl
> > main.clj: 176 clojure.main/repl
> > RestFn.java: 1523 clojure.lang.RestFn/invoke
> > interruptible_eval.clj: 87
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
> > AFn.java: 152 clojure.lang.AFn/applyToHelper
> > AFn.java: 144 clojure.lang.AFn/applyTo
> > core.clj: 657 clojure.core/apply
> > core.clj: 1963 clojure.core/with-bindings*
> > core.clj: 1963 clojure.core/with-bindings*
> > RestFn.java: 425 clojure.lang.RestFn/invoke
> > interruptible_eval.clj: 85
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> > interruptible_eval.clj: 55
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> > interruptible_eval.clj: 222
> > clojure.tools.nrepl.middleware.interruptible-eval/
> interruptible-eval/fn/fn
> > interruptible_eval.clj: 190
> > clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
> > AFn.java: 22 clojure.lang.AFn/run
> > ThreadPoolExecutor.java: 1142
> > java.util.concurrent.ThreadPoolExecutor/runWorker
> > ThreadPoolExecutor.java: 617
> > java.util.concurrent.ThreadPoolExecutor$Worker/run
> > Thread.java: 745 java.lang.Thread/run
> >
> > 1. Caused by java.lang.Exception
> > Found lib name 'incanter.stats' containing period with prefix 'quote'.
> > lib
> > names inside prefix lists must not contain periods
> >
> > core.clj: 659 clojure.core/apply
> > core.clj: 5893 clojure.core/load-libs
> > core.clj: 5873 clojure.core/load-libs
> > RestFn.java: 137 clojure.lang.RestFn/applyTo
> > core.clj: 659 clojure.core/apply
> > core.clj: 5911 clojure.core/require
> > core.clj: 5911 clojure.core/require
> > RestFn.java: 408 clojure.lang.RestFn/invoke
> > REPL: 1 user/eval46259/loading--auto--
> > REPL: 1 user/eval46259
> > REPL: 1 user/eval46259
> > Compiler.java: 6977 clojure.lang.Compiler/eval
> > Compiler.java: 6966 clojure.lang.Compiler/eval
> > Compiler.java: 6940 clojure.lang.Compiler/eval
> > core.clj: 3187 clojure.core/eval
> > core.clj: 3183 clojure.core/eval
> > main.clj: 242 clojure.main/repl/read-eval-print/fn
> > main.clj: 242 clojure.main/repl/read-eval-print
> > main.clj: 260 clojure.main/repl/fn
> > main.clj: 260 clojure.main/repl
> > main.clj: 176 clojure.main/repl
> > RestFn.java: 1523 clojure.lang.RestFn/invoke
> > interruptible_eval.clj: 87
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
> > AFn.java: 152 clojure.lang.AFn/applyToHelper
> > AFn.java: 144 clojure.lang.AFn/applyTo
> > core.clj: 657 clojure.core/apply
> > core.clj: 1963 clojure.core/with-bindings*
> > core.clj: 1963 clojure.core/with-bindings*
> > RestFn.java: 425 clojure.lang.RestFn/invoke
> > interruptible_eval.clj: 85
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> > interruptible_eval.clj: 55
> > clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> > interruptible_eval.clj: 222
> > clojure.tools.nrepl.middleware.interruptible-eval/
> interruptible-eval/fn/fn
> > interruptible_eval.clj: 190
> > clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
> > AFn.java: 22 clojure.lang.AFn/run
> > ThreadPoolExecutor.java: 1142
> > java.util.concurrent.ThreadPoolExecutor/runWorker
> > ThreadPoolExecutor.java: 617
> > java.util.concurrent.ThreadPoolExecutor$Worker/run
> > Thread.java: 745 java.lang.Thread/run
> > ```
> >
> >
> > [stardiviner] <Hack this world!> GPG key ID: 47C32433
> > IRC(freeenode): stardiviner Twitter: @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> > On Sat, Jun 17, 2017 at 9:46 AM, Tim Cross <theophilusx@gmail.com>
> wrote:
> >
> >>
> >> My guess is that cider is not finding the incanter package in the
> >> classpath when the first block attempts to evaluate. Another issue is
> >> that your not using any session options, so your two blocks will be
> >> evaluated in separate environments - not a real problem with your
> >> current example, but will be an issue if you expect to access incanter
> >> functions from separate babel blocks.
> >>
> >> There are a number of working parts which all need to be lined up
> >> correctly before babel clojure support will work correctly. Getting
> >> things to work when your just using core clojure functions is fairly
> >> trivial, but getting it to work when you have to pull in other
> >> dependencies can be a little tricky.
> >>
> >> You might find this article useful to get started
> >>
> >> http://fgiasson.com/blog/index.php/2016/06/21/optimal-
> >> emacs-settings-for-org-mode-for-literate-programming/
> >>
> >> I also notice you have not set the org-babel-clojure-backend, which you
> >> need to do. My recommendation would be to do the following
> >>
> >> 1. Create a leinegen project to experiment with i.e.
> >> lein new app my-kk
> >>
> >> 2. Make sure you can edit and evaluate clojure just using clojure-mode
> >> and cider in emacs
> >>
> >> 3. Add the incanter package to your project.clj dependencies key
> >>
> >> 4. Modify core.clj (using clojure-mode) to include the code in your
> >> clojure blocks and run with cider to make sure they work as expected.
> >>
> >> 5. Create the org file you want to experiment with in the root of your
> >> project. This should ensure that when you try to evaluate clojure
> >> blocks, the cider backend will be loaded with the dependencies in the
> >> project.clj file.
> >>
> >> 6. Copy the code in your core.clj file into ONE babel src block and see
> >> if you can get it to evaluate correctly. Experiment with the block
> >> configuration options like :output etc.
> >>
> >> 7. Break the code up into different blocks and experiment with block
> >> options, especially session options.
> >>
> >> Once you get to that point, you should be across the various moving
> >> parts with sufficient understanding to then look at how you can tweak
> >> things to get exactly the behaviour and workflow you want.
> >>
> >> HTH
> >>
> >> Tim
> >>
> >> numbchild@gmail.com writes:
> >>
> >> > When Org-mode buffer like this:
> >> >
> >> > #+BEGIN_SRC clojure
> >> > (ns my.kk
> >> > (:require '[incanter.core :as kk]))
> >> > #+END_SRC
> >> >
> >> > #+BEGIN_SRC clojure
> >> > (print "hi")
> >> > (def kkkk "hello")
> >> > #+END_SRC
> >> >
> >> > #+RESULTS:
> >> >
> >> > When I have `(ns ..)` namespace clojure code in buffer, the second
> >> `(print
> >> > ..)` clojure result nothing. But when I remove the first src block,
> the
> >> > `(print ..)` clojure src block works fine.
> >> >
> >> > I'm using Org-mode version from `master` with `use-package` like this:
> >> >
> >> > (use-package org
> >> > :load-path "~/Code/Emacs/org-mode/lisp/"
> >> > :pin manual
> >> > :mode (("\\.org$" . org-mode))
> >> > :config
> >> > (use-package org-plus-contrib
> >> > :load-path "~/Code/Emacs/org-mode/contrib/lisp/"
> >> > :pin manual)
> >> > )
> >> >
> >> >
> >> > [stardiviner] <Hack this world!> GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner Twitter: @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >>
> >>
> >> --
> >> Tim Cross
> >>
>
>
> --
> Tim Cross
>
[-- Attachment #2: Type: text/html, Size: 18463 bytes --]
next prev parent reply other threads:[~2017-06-18 5:49 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-16 15:36 ob-clojure evaluate error when Org-mode buffer has ns clojure code numbchild
2017-06-17 1:46 ` Tim Cross
2017-06-17 12:57 ` numbchild
2017-06-17 13:26 ` numbchild
2017-06-18 1:10 ` Tim Cross
2017-06-18 5:48 ` numbchild [this message]
2017-06-21 5:12 ` numbchild
2017-12-19 9:54 ` [UPDATE] " stardiviner
2017-12-21 10:15 ` numbchild
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='CAL1eYu+Q7JRFEDv2y=p23EiEKPptyWTD_eh=2pHKFqOeR2it+g@mail.gmail.com' \
--to=numbchild@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=theophilusx@gmail.com \
/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).