meine emacs version ist 24.3.1.
Ich verstehe, ich muss das ob-cel (verfügbar von hier ) in einen Pfad stellen, in dem Emacs es lesen kann.
Ich habe zuerst den Code aus dieser .el-Datei in meine .emacs-Datei kopiert und Emacs neu gestartet. Dann ging ich zu einem C-Code-Block (innerhalb einer Org-Datei) und versuchte, ihn auszuführen (mit Cc Cc). der Minipuffer sagte 'keine org-babel-execute-Funktion für C'. Die gleiche Geschichte spielte mit dem Versuch, einen C ++ - Codeblock auszuführen. Beachten Sie, dass R und Python in meinen Organisationsdateien perfekt ausgewertet werden. Die Probleme scheinen nur bei diesen kompilierten Sprachen zu liegen.
Ich habe dann versucht, dieses ob-cel in das ~ / .emacs.d-Verzeichnis zu schreiben, um zu sehen, ob das hilft. emacs neu gestartet und überprüft. es hat nicht funktioniert.
Dann habe ich versucht, es in ein Verzeichnis ~ / .emacs.d / lisp zu stellen und die folgenden Zeilen zu meiner .emacs-Datei hinzugefügt
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
Nach dem Neustart von emacs funktioniert das Auswerten der C- oder C ++ - Codeblöcke in einer Organisationsdatei immer noch nicht. Ich erhalte immer den gleichen Fehler "Keine org-babel-execute-Funktion für C" oder "Keine org-babel-execute-Funktion für C ++".
Aktualisieren
Ich habe meine Emacs-Version auf 24.5 aktualisiert und alle vorherigen elpa- und melpa-Unterverzeichnisse in meinem ~ / .emacs.d-Verzeichnis gelöscht. Ich habe den Verdacht, dass es mit der Reihenfolge zu tun hat, in der ich meine Bestellung aufgegeben habe
(custom-set-variables
'(org-babel-load-languages
(quote
((emacs-lisp . t)
(C . t)
(css . t)
(sh . t)
(awk . t)
(R . t))))
und
;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
Codeblöcke, ich setze die Last "ob-C.el" vor die Sache org-babel-load-languages. Ich habe dann den C ++ - Codeblock mehrmals ausgeführt. kein Glück.
Dann entfernte ich alles (bereinigte den Custom-Set-Variablen-Block in der .emacs-Datei) und nun sieht meine .emacs-Datei so aus
;; 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)))
Es funktioniert immer noch nicht.
Der Code, den ich versuche, in einem orgmode Puffer auszuwerten, ist:
#+BEGIN_SRC c
printf("Hello world");
#+END_SRC
Der My Messages Buffer sieht nach dem Neustart von Emacs und dem Versuch, den obigen Codeblock auszuführen, folgendermaßen aus:
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
undrequire
Bits wirklich nicht .require
wird geladen (falls die Datei eineprovide
Anweisung hat, was in diesem Fall der Fall ist), aber Sie brauchen auch nicht die Anweisung,require
da dies von behandelt wirdorg-babel-do-load-languages
. Sie müssen sicherstellen, dass sie angefordert wird,org
bevor dies geschieht. Ich glaube auchC
nichtc
, hast du das versucht?Antworten:
Sie brauchen wirklich nur dieses Bit in Ihrer Init-Datei:
Beachten Sie, dass es eine Hauptstadt ist
C
. Dies ermöglicht es Babel, C-, C ++ - und D-Quellblöcke zu verarbeiten.quelle
org-babel-execute:c++
Funktion gefunden werden konnte, die in definiert werden würde.ob-C.el
Um Babel jedoch mitzuteilen, dass sie geladenob-C.el
werden muss, muss sie aufgerufen werdenorg-babel-do-load-languages
.