"No org-babel-execute फ़ंक्शन सी के लिए" और "no-org-babel-execute फ़ंक्शन c ++ के लिए"


16

मेरा emacs संस्करण 24.3.1 है।

मैं समझता हूं कि मुझे ओब्-सील ( यहां से उपलब्ध ) को एक ऐसे मार्ग पर रखना होगा जहां एमएसीएस इसे पढ़ सकते हैं।

मैंने पहली बार उस .el फ़ाइल के कोड को मेरी .emacs फ़ाइल में कॉपी किया और उन्हें पुनः आरंभ किया। तब मैं एक C कोड ब्लॉक में गया (एक org फ़ाइल के भीतर) और इसे निष्पादित करने की कोशिश की (Cc Cc का उपयोग करके)। minibuffer ने कहा कि 'C के लिए कोई org-babel-execute फ़ंक्शन नहीं है। एक ही कहानी एक C ++ कोड ब्लॉक को निष्पादित करने की कोशिश के साथ खेला गया। ध्यान दें कि आर और अजगर मेरी ऑर्ग फाइलों के भीतर से पूरी तरह से मूल्यांकन करते हैं। समस्याओं को केवल इन संकलित भाषाओं के साथ लगता है।

फिर मैंने यह देखने की कोशिश की कि ~ / .emacs.d निर्देशिका के अंदर यह देखने में मदद मिलेगी कि क्या मदद करता है। पुनः आरंभ किए गए emacs और जाँच की। यह काम नहीं किया।

तब मैंने इसे एक निर्देशिका ~ / .emacs.d / lisp में डालने की कोशिश की और निम्नलिखित लाइनों को मेरे .emacs में जोड़ा।

(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

Emacs को पुनः आरंभ करने के बाद, C या C ++ कोड ब्लॉक का मूल्यांकन एक org फाइल के भीतर से करने पर भी काम नहीं करता है। मैं एक ही त्रुटि "C के लिए कोई org-babel-execute फ़ंक्शन" या "C ++ के लिए कोई org-babel-execute फ़ंक्शन" नहीं रख रहा हूं।

अपडेट करें

मैंने अपने emacs संस्करण को 24.5 में अपग्रेड किया है, मेरी ~ / .emacs.site निर्देशिका में पिछले सभी कल्प और मेलपा उपनिर्देशिकाओं को हटा दिया है। संदेह है कि यह उस क्रम के साथ करना था जिसमें मैंने अपना स्थान रखा था

(custom-set-variables

'(org-babel-load-languages
(quote
((emacs-lisp . t)
 (C . t)
 (css . t)
 (sh . t)
 (awk . t)
 (R . t))))

तथा

;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

कोड ब्लॉक, मैं लोड "ओब-सीएल" को ऑर्ग-बेबेल-लोड-लैंग्वेज चीज़ से पहले डाल देता हूं। मैंने फिर कई बार c ++ कोड ब्लॉक किया। कोई भाग्य नहीं।

तब मैंने सब कुछ हटा दिया (.emacs फ़ाइल में कस्टम-सेट-चर ब्लॉक को साफ कर दिया) और अब .emacs फ़ाइल की तरह दिखता है

;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

;; load the languages that are needed
(org-babel-do-load-languages
'org-babel-load-languages '((C . t)))

यह अभी भी काम नहीं कर रहा है।

वह कोड जो मैं ऑर्गेमोड बफर में मूल्यांकन करने की कोशिश कर रहा हूं वह है:

#+BEGIN_SRC c
printf("Hello world");
#+END_SRC

Emacs को पुनरारंभ करने और उपरोक्त कोड ब्लॉक को निष्पादित करने का प्रयास करने के बाद मेरा संदेश बफर इस तरह दिखता है:

Loading /home/taeten/.emacs.d/lisp/ob-C.el (source)...done
Wrote /home/taeten/.emacs.d/.emacs.desktop.lock
Desktop: 1 frame, 0 buffers restored.
For information about GNU Emacs and the GNU system, type C-h C-a.
Quit [2 times]
Making completion list... [3 times]
org-babel-execute-src-block: No org-babel-execute function for c! [5   
times]
Ignoring unknown mode `elisp-mode'
File local-variables error: (void-function elisp-mode)
byte-code: Beginning of buffer [6 times]
byte-code: Beginning of buffer

2
तुम सच में loadऔर requireबिट्स की जरूरत नहीं है । requireलोडिंग करता है (यदि फ़ाइल में एक provideस्टेटमेंट होता है, जो इस मामले में ऐसा करता है), लेकिन आपको इसकी आवश्यकता भी नहीं है requireक्योंकि यह द्वारा नियंत्रित किया जाता है org-babel-do-load-languages, तो आपको orgकिसी भी होने से पहले यह सुनिश्चित करने की आवश्यकता होती है। इसके अलावा, मुझे लगता है कि यह Cनहीं है c, क्या आपने कोशिश की?
wvxvw

2
ओह्ह धिक्कार है ... यह काम किया! # + BEGIN_SRC ब्लॉक के अंदर C (नहीं c) और C ++ (नहीं c ++) सही क्रम में सभी 'लोड' स्टेटमेंट करने के बाद लिया गया था। दोस्त बहुत - बहुत धन्यवाद !
अर्जुन जे राव

जवाबों:


23

आपको वास्तव में अपनी इनिट फ़ाइल में केवल इस बिट की आवश्यकता है:

(org-babel-do-load-languages
 'org-babel-load-languages '((C . t)))

ध्यान दें यह एक पूंजी है C। यह बाबेल को C, C ++ और D स्रोत ब्लॉकों को संसाधित करने में सक्षम बनाता है।


2
अभी भी इसका काम नहीं हो रहा है। मैंने पहले के ओब-सी। बकवास को भी हटाने की कोशिश की। अभी भी काम नहीं कर रहा है। समान त्रुटि संदेश "No org-babel-execute function for c ++"
अर्जुन जे राव

1
@ArjunJRao आपने इसे जोड़ने के बाद कोड का मूल्यांकन किया था? (इसका कई बार मूल्यांकन करना ठीक है)। तकनीकी रूप से त्रुटि संदेश का अर्थ है कि यह org-babel-execute:c++फ़ंक्शन नहीं खोज सका , जिसे परिभाषित किया जाएगा ob-C.el, लेकिन बैबेल को यह बताने का तरीका कि उसे लोड करना ob-C.elहै org-babel-do-load-languages
wvxvw

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