Я вижу у него ту же проблему. Немного покопавшись, думаю, я определил проблему. Однако не уверен, кому об этом следует сообщать.
Проблема в функции org-babel-execute: clojure. Эта функция имеет следующий бит кода
(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")))
Проблема в вызове nrepl-sync-request: eval. Документация заявляет для этой функции
(nrepl-sync-request: eval INPUT CONNECTION и необязательный NS)
Отправьте INPUT на сервер nREPL синхронно. Запрос отправляется через СОЕДИНЕНИЕ. Если NS не ноль, включите его в запрос.
Обратите внимание на последний необязательный аргумент NS. Предполагается, что это будет закрытое пространство имен. Однако функция org-babel-execute: clojure вызывает эту функцию с выводом из cider-current-session, который возвращает уникальный идентификатор, представляющий текущий сеанс. В результате вызов возвращает структуру данных с ошибкой и без вывода (возможно, требуется некоторая обработка ошибок). Возвращенный результат
(dict status (namespace-not-found done error done state state) id 17 session 43e9fd6c-82ed-49fe-9624-0cfc6f56f8b1 changed-namespaces (dict) repl-type cljclj)
Обратите внимание на пространство имен-не-найдено
Либо аргумент должен быть вызовом (cider-current-ns), либо, возможно, его следует просто опустить, поскольку я не понимаю, как вы можете передать пространство имен как часть оценки блока.
РЕДАКТИРОВАТЬ: вот простой патч, который, кажется, чтобы решить проблему. Создано против текущей главы org git repo
---
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
Также отправил патч в список emacs-orgmode
(cider-current-ns)
? И если да, где я могу найти эту функцию?ob-clojure
был немного старше, поэтому я вытащил самые новые, внес соответствующие изменения, и это работает! Спасибо огромное! Я хотел бы, чтобы вы ответили несколько дней назад! Я бы определенно дал вам награду. :) Спасибо!find ~/.emacs.d/elpa/org* -name "*elc" -delete
, а затем вручную применить вышеописанный патч. Хорошей новостью является то, что патч работает сегодня.В блоке должны быть аргументы заголовка, указывающие org-babel, что вы хотите включить в полученные результаты - результат оценки или вывод в stdout или оба. В вашем случае нет результатов, которые производит оценка
(+ 1 1)
. Попробуй(println (+ 1 1))
.источник
(println (+ 1 1))
не работает. Я скопировал и вставил код, который у вас есть выше, и это тоже не работает.Пытаться
который печатает возвращенное значение вместо вывода.
источник
Эта проблема не обязательно специфична для Spacemacs.
Хотя OP, возможно, неявно искал решение в Spacemacs, кажется, что это хорошее место, чтобы упомянуть другую альтернативу (особенно для пользователей не-Spacemacs, которые испытывают ту же проблему после обновления некоторой части своей конфигурации emacs / org-mode, которая это то, что случилось со мной).
Попробовав многократную переустановку различных версий emacs и org, я, наконец, обнаружил, что Aquamacs (!) И Org 9.0.5 (загруженные как tar.gz в соответствии с инструкциями на http://orgmode.org/ ) удалось обойти
code block produced no output
Проблема у этого постера тоже возникла.Хотя Aquamacs не может быть долгосрочным решением для всех, он, безусловно, может помочь другим, которые сильно зависят от использования org-babel с clojure, обойти эту проблему, пока вышеупомянутое решение не будет полностью признано и реализовано.
Версия emacs, используемая Aquamacs по состоянию на 9 марта 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
источник