"Немає функції org-babel-Execute для c" і "no-org-babel-Execute функція для c ++"


16

моя версія emacs - це 24.3.1.

я розумію, що я повинен поставити ob-C.el (доступний тут ) в шлях, де Emacs може його прочитати.

Я спершу скопіював код із цього .el-файлу у мій .emacs-файл та перезапустив emacs. потім я перейшов до блоку коду С (у файлі org) і спробував виконати його (використовуючи Cc Cc). minibuffer сказав: "немає org-babel-виконувати функцію для C". та сама історія розігрувалася зі спробою виконання блоку коду C ++. зауважте, що R та python відмінно оцінюються з моїх файлів org. проблеми, здається, є лише з цими складеними мовами.

Потім я спробував поставити цей об-C.el всередині каталогу ~ / .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 все ще не працює. я продовжую отримувати ту саму помилку: "немає org-babel-виконувати функцію для C" або "немає org-babel-виконувати функцію для C ++".

Оновлення

я оновив свою версію emacs до 24.5, видалив усі попередні підкаталоги elpa та melpa в моєму каталозі ~ / .emacs.d. підозрюючи, що це стосується порядку, в якому я розмістив своє

(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)

кодові блоки, я ставлю навантаження "ob-C.el" перед мовою org-babel-load-languages. Потім я виконував блок коду 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
ой чорт ... це спрацювало! C (не c) і C ++ (не c ++) всередині блоку # + BEGIN_SRC - це те, що потрібно було після того, як виконано всі заяви "навантаження" у потрібному порядку. Велике спасибі людино!
Arjun J Rao

Відповіді:


23

Вам справді потрібен лише цей біт у вашому файлі init:

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

Зауважте, що це капітал C. Це дозволяє Babel обробляти джерела C, C ++ та D.


2
Його все ще не працює. Я також спробував видалити попереднє лайно ob-c.el. Ще не працює. Те саме повідомлення про помилку "Без функції org-babel-Execute для c ++"
Arjun J Rao

1
@ArjunJRao Ви оцінили код після додавання? (Добре оцінювати це кілька разів). Повідомлення про помилку технічно означає, що він не міг знайти org-babel-execute:c++функцію, яка була б визначена в ob-C.el, але спосіб сказати Бабелю, що його потрібно завантажити ob-C.el- це зателефонувати org-babel-do-load-languages.
wvxvw

я оновив своє запитання.
Арджун Дж Рао
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.