ऑर्ग-मोड में क्लोजर कोड मूल्यांकन कोई आउटपुट नहीं देता है


11

मैं कुछ साक्षर प्रोग्रामिंग करने के लिए अपनी org फाइल से क्लोजर कोड चलाने की कोशिश कर रहा हूं।

क्या काम नहीं कर रहा है:

जब मुझे स्रोत कोड ब्लॉक मिलता है, तो मैं उस पर अमल करता हूं No output produced

नमूना src कोड ब्लॉक

#+begin_src clojure
(+ 2 2)
#+end_src clojure

क्या काम कर रहा है:

  1. cider-jack-in काम कर रहा है और मैं एनआरईपीएल में कोड निष्पादित करने में सक्षम हूं
  2. मैं एक .cljफ़ाइल से कोड निष्पादित करने में सक्षम हूं

धन्यवाद

विवरण

स्पेसमास का उपयोग कर Emacs 25.1

संगठन-मोड 9.0.5

संगठन बेगेल कॉन्फ़िगरेशन

(defun dotspacemacs/user-config ()
  (require 'ob)
  (require 'ob-clojure)
  (require 'paredit)
  (require 'org-babel-clojure)
  (setq org-babel-clojure-backend 'cider)
  (require 'cider)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((clojure . t)))
  )

यदि आपको किसी अन्य जानकारी की आवश्यकता हो तो कृपया मुझे बताएं

जवाबों:


10

मैं वही मुद्दा देख रहा हूं। थोड़ी खुदाई में, मुझे लगता है कि मैंने समस्या की पहचान कर ली है। हालांकि, यह निश्चित नहीं है कि यह किसे सूचित किया जाए।

समस्या 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-सिंक-रिक्वेस्ट: eval INPUT कनेक्शन और वैकल्पिक NS)

INPUT को nREPL सर्वर पर सिंक्रोनाइज़ करें। अनुरोध के माध्यम से अनुरोध भेजा जाता है। यदि NS गैर-शून्य है, तो इसे अनुरोध में शामिल करें।

अंतिम वैकल्पिक तर्क एनएस नोट करें। यह क्लोजर नेमस्पेस माना जाता है। हालाँकि, org-babel-execute: clojure फ़ंक्शन इस फ़ंक्शन को cider-current-session से आउटपुट के साथ बुला रहा है, जो वर्तमान सत्र का प्रतिनिधित्व करने वाली एक अद्वितीय ID देता है। नतीजतन, कॉल एक त्रुटि के साथ डेटा संरचना वापस कर रहा है और कोई आउटपुट नहीं (शायद कुछ त्रुटि से निपटने की आवश्यकता है)। लौटा हुआ परिणाम है

(dict status (namespace-not-found done error done state state) id 17 session 43e9fd6c-82ed-49fe-9624-0cfc6f56f8b1 changed-namespaces (dict) repl-type cljclj)

नोट नाम-स्थान नहीं मिला

या तो तर्क को (साइडर-करेंट-एनएस) के लिए एक कॉल होना चाहिए या शायद इसे छोड़ दिया जाना चाहिए क्योंकि मैं नहीं देखता कि आप ब्लॉक मूल्यांकन के हिस्से के रूप में नाम स्थान कैसे पारित कर सकते हैं।

संपादित करें: यहाँ एक साधारण पैच है जो समस्या को ठीक करने के लिए प्रकट होता है। ऑर्गन के वर्तमान प्रमुख के खिलाफ जनित रेपो

---
 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)? और यदि हां, तो मुझे वह फ़ंक्शन कहां मिल सकता है?
जिल शाह

1
मैं कह रहा हूं कि ओब्-क्लोजर काम करने के लिए, या तो कॉल (साइडर-करंट-सेशन) को छोड़ने की जरूरत है या इसे (साइडर-करेंट-एनएस) से बदलने की जरूरत है। (साइडर-करंट-एनएस) साइडर लाइब्रेरी (साइडर-करंट-कनेक्शन के साथ) और (साइडर-करंट-सेशन) का हिस्सा है। या तो आपको फ़ंक्शन को संपादित करने की आवश्यकता है या तब तक प्रतीक्षा करें जब तक कि कोई इसे अपस्ट्रीम अपडेट नहीं करता है, लेकिन जैसा कि यह अब खड़ा है, यह काम नहीं करता है। मैंने इसे एमएसीएस-ओआरजी सूची पर रिपोर्ट किया है, लेकिन अभी तक कोई प्रतिक्रिया नहीं हुई है।
टिम एक्स

आपका समाधान पूरी तरह से काम कर रहा है। मेरे ob-clojureथोड़ा पुराने तो मैं नवीनतम लोगों खींच लिया था, प्रासंगिक परिवर्तन किए हैं और यह काम करता है! आपको बहुत - बहुत धन्यवाद! काश, आपने कुछ दिन पहले उत्तर दिया होता! मैं निश्चित रूप से आप को इनाम दिया जाएगा। :) धन्यवाद!
जील शाह

1
3 जून 2017 तक, Emacs 25.1.1, org 9.0.7, spacemacs 0.200.9, यह फिक्स अभी भी नहीं है, जब मैंने spacemacs का एक ताजा क्लोन विकसित किया और मेरी elpa डायरेक्टरी का सफाया किया। मैं अभी भी काम करने के लिए किसी भी कोड ब्लॉक eval पाने के लिए org निर्देशिका शुद्ध करने की जरूरत है find ~/.emacs.d/elpa/org* -name "*elc" -delete, तो मैन्युअल रूप से ऊपर पैच लागू होते हैं। अच्छी खबर यह है कि पैच आज काम करता है।
रेब.कबिन

ईमानदार होने के लिए, मुझे ऑर्ग जीट शाखाओं की संरचना समझ में नहीं आती है और वे ऑर्ग-प्लस-कंट्रीब पैकेज से कैसे संबंधित हैं। मुझे पता है कि पैच मुख्य ऑर्गन रिपॉजिटरी में प्रतिबद्ध था क्योंकि मैंने एक पुल किया और कमिट कहा। पता नहीं कैसे इस तरह के पैच पैकेज फ़ाइलों में मिलता है।
टिम एक्स

0

ब्लॉक में ऑर्गन-बाबेल को हेडर तर्क देने की आवश्यकता है जो आप उत्पादित परिणामों में शामिल करना चाहते हैं - मूल्यांकन के परिणाम या स्टडआउट या दोनों के लिए आउटपुट। आपके मामले में, कोई आउटपुट नहीं है जो उत्पादन का मूल्यांकन (+ 1 1)करता है। कोशिश करो (println (+ 1 1))

#+name: Lazy Sequences in Clojure
#+begin_src clojure
 (def a-lazy-sequence (cons 1 (lazy-seq (cons (+1 2) ()))))
#+end_src

#+name: List comprehensions in Clojure
#+begin_src clojure :results output
 (println (str (for [x (range 3)
                     y #{:a :b :c}]
                 [x y])))

#+end_src

#+RESULTS: List comprehensions in Clojure
 : (c l o j u r e . l a n g . L a z y S e q @ e a a 0 1 c e 7)

दुर्भाग्य से, (println (+ 1 1))काम नहीं कर रहा है। मैंने आपके ऊपर दिए गए कोड को कॉपी-पेस्ट किया है और वह भी काम नहीं करता है।
जील शाह

2
मेरे साथ भी यही समस्या है। lists.gnu.org/archive/html/emacs-orgmode/2017-02/msg00429.html
stardiviner

0

प्रयत्न

#+begin_src clojure :results value
(+ 2 2)
#+end_src clojure

जो आउटपुट के बदले दिए गए मूल्य को प्रिंट करता है।


1
अभी भी काम नहीं करता है, संदेश क्षेत्र दिखाता है "कोड ब्लॉक ने कोई मूल्य नहीं दिया"।
स्टारडाइवर

0

यह समस्या स्पेसमैक्स के लिए जरूरी नहीं है।

जबकि ओपी ने स्पेसमेक्स के भीतर एक समाधान की मांग की हो सकती है , यह एक अन्य विकल्प का उल्लेख करने के लिए एक अच्छी जगह की तरह लगता है (गैर-स्पेसमैक उपयोगकर्ताओं के लिए जो अपने एमएसीएस / ऑर्ग-मोड कॉन्फ़िगरेशन के कुछ टुकड़े को अपडेट करने के बाद एक ही समस्या का सामना कर रहे हैं, जो कि। मेरे साथ जो हुआ)।

विभिन्न emacs और org संस्करणों के कई पुनः इंस्टॉल करने की कोशिश करने के बाद , मैंने अंततः पाया कि Aquamacs (!) और Org 9.0.5 ( http://orgmode.org/ पर दिए गए निर्देश के अनुसार tar.gz के रूप में डाउनलोड किया गया ) code block produced no outputसमस्या यह पोस्टर भी अनुभव किया।

हालांकि एक्वामाक्स हर किसी के लिए दीर्घकालिक समाधान नहीं हो सकता है, यह निश्चित रूप से दूसरों की मदद कर सकता है जो क्लोजर के साथ ऑर्गन-बैबेल का उपयोग करने पर अत्यधिक निर्भर हैं जब तक कि उपरोक्त समाधान को पूरी तरह से पहचाना और लागू नहीं किया जाता है।

इस मार्च 9 2017 के रूप में एक्वामाक्स द्वारा उपयोग किए गए emacs का संस्करण है:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.