моя версия Emacs - 24.3.1.
я понимаю, что я должен поместить ob-C.el (доступный здесь ) в путь, где Emacs может прочитать его.
Сначала я скопировал код из этого файла .el в мой файл .emacs и перезапустил emacs. затем я пошел в блок кода C (в файле org) и попытался выполнить его (используя Cc Cc). Минибуфер сказал «нет функции org-babel-execute для C». та же самая история разыгрывается при попытке выполнить блок кода C ++. обратите внимание, что R и Python отлично оценивают мои файлы org. проблемы, кажется, только с этими скомпилированными языками.
Затем я попытался поместить этот ob-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-execute для C" или "нет функции org-babel-execute для 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 ++ несколько раз. неудачно.
затем я удалил все (очистил блок custom-set-variable в файле .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)))
Его все еще не работает.
Код, который я пытаюсь оценить в буфере Orgmode:
#+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
load
иrequire
биты.require
выполняет загрузку (в случае, если в файле естьprovide
оператор, что в данном случае и выполняется), но вам также не нужноrequire
это делать, потому что он обрабатываетсяorg-babel-do-load-languages
, вам необходимо убедиться, что требуется,org
прежде чем что-либо из этого произойдет. Кроме того, я думаю, чтоC
нетc
, ты пробовал это?Ответы:
Вам действительно нужен только этот бит в вашем файле инициализации:
Обратите внимание, это столица
C
. Это позволяет Babel обрабатывать исходные блоки C, C ++ и D.источник
org-babel-execute:c++
функцию, которая будет определена вob-C.el
, но способ сказать Бабелу, что она должна быть загружена,ob-C.el
это вызватьorg-babel-do-load-languages
.