Estou vendo o mesmo problema. Em algumas escavações, acho que identifiquei o problema. No entanto, não tenho certeza para quem isso deve ser relatado.
O problema está na função org-babel-execute: clojure. Esta função possui o seguinte bit de código
(setq result
(nrepl-dict-get
(nrepl-sync-request:eval
expanded (cider-current-connection) (cider-current-session))
(if (or (member "output" result-params)
(member "pp" result-params))
"out"
"value")))
O problema está na chamada para nrepl-sync-request: eval. Os estados da documentação para esta função
(nrepl-sync-request: eval INPUT CONNECTION e opcional NS)
Envie a ENTRADA para o servidor nREPL de forma síncrona. O pedido é enviado via CONNECTION. Se o NS for nulo, inclua-o na solicitação.
Observe o último argumento opcional NS. Supõe-se que seja um espaço para nome de clojure. No entanto, a função org-babel-execute: clojure está chamando essa função com a saída de cider-current-session, que retorna um ID exclusivo que representa a sessão atual. Como resultado, a chamada está retornando uma estrutura de dados com um erro e sem saída (talvez seja necessário algum tratamento de erro). O resultado retornado é
(dict status (namespace-not-found done error done state state) id 17 session 43e9fd6c-82ed-49fe-9624-0cfc6f56f8b1 changed-namespaces (dict) repl-type cljclj)
Observe o espaço para nome não encontrado
O argumento deve ser uma chamada para (cider-current-ns) ou talvez deva ser deixado de fora, pois não vejo como você pode passar o namespace como parte da avaliação do bloco.
EDIT: aqui está um patch simples que parece resolver o problema. Gerado com base no atual diretor de repositório org git
---
lisp/ob-clojure.el | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index d407105..e542a29 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -44,6 +44,7 @@
(declare-function cider-current-connection "ext:cider-client" (&optional type))
(declare-function cider-current-session "ext:cider-client" ())
+(declare-function cider-current-ns "ext:cider-client" ())
(declare-function nrepl--merge "ext:nrepl-client" (dict1 dict2))
(declare-function nrepl-dict-get "ext:nrepl-client" (dict key))
(declare-function nrepl-dict-put "ext:nrepl-client" (dict key value))
@@ -118,7 +119,7 @@ using the :show-process parameter."
org-babel-clojure-sync-nrepl-timeout))
(nrepl-sync-request:eval expanded
(cider-current-connection)
- (cider-current-session))))
+ (cider-current-ns))))
(setq result
(concat
(nrepl-dict-get response
@@ -153,7 +154,7 @@ using the :show-process parameter."
;; Update the status of the nREPL output session.
(setq status (nrepl-dict-get response "status")))
(cider-current-connection)
- (cider-current-session))
+ (cider-current-ns))
;; Wait until the nREPL code finished to be processed.
(while (not (member "done" status))
--
2.7.4
Também enviou o patch para a lista emacs-orgmode
(cider-current-ns)
? E se sim, onde posso encontrar essa função?ob-clojure
era um pouco mais velho, peguei os mais novos, fiz as alterações relevantes e funciona! Muito obrigado! Eu gostaria que você tivesse respondido alguns dias antes! Eu definitivamente daria a recompensa para você. :) Obrigado!find ~/.emacs.d/elpa/org* -name "*elc" -delete
, em seguida, aplique manualmente o patch acima. A boa notícia é que o patch funciona hoje.Você precisa ter argumentos de cabeçalho no bloco informando ao org-babel o que deseja incluir nos resultados produzidos - resultado da avaliação ou saída para stdout ou ambos. No seu caso, não há saída que a avaliação
(+ 1 1)
produz. Tente(println (+ 1 1))
.fonte
(println (+ 1 1))
não está funcionando. Copiei e colei o código que você tem acima e isso também não funciona.Tentar
que imprime o valor retornado em vez da saída.
fonte
Esse problema não é necessariamente específico para o Spacemacs.
Embora o OP possa ter implicitamente procurado uma solução no Spacemacs, este parece ser um bom lugar para mencionar outra alternativa (especialmente para usuários que não são do Spacemacs que estão enfrentando o mesmo problema depois de atualizar parte de sua configuração do emacs / modo de organização, que foi o que aconteceu comigo).
Depois de tentar várias reinstalações de várias versões do emacs e org, finalmente descobri que o Aquamacs (!) E a Org 9.0.5 (baixados como tar.gz, conforme instruído em http://orgmode.org/ ) conseguiram contornar o problema.
code block produced no output
problema que este pôster também enfrentou.Embora o Aquamacs possa não ser uma solução de longo prazo para todos, certamente pode ajudar outras pessoas altamente dependentes do uso de org-babel com clojure a contornar esse problema até que a solução acima seja totalmente reconhecida e implementada.
A versão do emacs usada pelo Aquamacs em 9 de março de 2017 é:
Aquamacs 3.3 GNU Emacs 25.1.1 (x86_64-apple-darwin14.1.0, NS appkit-1344.72 Version 10.10.2 (Build 14C109)) of 2016-09-19 on 24a02dbf6b34ae061ef4df89f15bfbc5d3ed497e
fonte