ma version emacs est 24.3.1.
Je comprends que je dois mettre l'ob-C.el (disponible à partir d' ici ) dans un chemin où Emacs peut le lire.
J'ai d'abord copié-collé le code de ce fichier .el dans mon fichier .emacs et redémarré emacs. puis je suis allé dans un bloc de code C (dans un fichier org) et j'ai essayé de l'exécuter (en utilisant Cc Cc). le mini-tampon a dit "pas de fonction org-babel-execute pour C". la même histoire s'est jouée en essayant d'exécuter un bloc de code C ++. notez que R et python évaluent parfaitement à partir de mes fichiers org. les problèmes semblent être uniquement avec ces langues compilées.
J'ai ensuite essayé de mettre cet ob-C.el dans le répertoire ~ / .emacs.d pour voir si cela a aidé les choses. redémarré emacs et vérifié. ça n'a pas marché.
puis j'ai essayé de le mettre dans un répertoire ~ / .emacs.d / lisp et j'ai ajouté les lignes suivantes à mon fichier .emacs
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
après le redémarrage d'emacs, l'évaluation des blocs de code C ou C ++ à partir d'un fichier org ne fonctionne toujours pas. je reçois toujours la même erreur "pas de fonction org-babel-execute pour C" ou "pas de fonction org-babel-execute pour C ++".
Mise à jour
j'ai mis à jour ma version emacs à 24.5, supprimé tous les sous-répertoires elpa et melpa précédents dans mon répertoire ~ / .emacs.d. soupçonnant que cela avait à voir avec l'ordre dans lequel j'ai placé mon
(custom-set-variables
'(org-babel-load-languages
(quote
((emacs-lisp . t)
(C . t)
(css . t)
(sh . t)
(awk . t)
(R . t))))
et
;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
blocs de code, j'ai mis la charge "ob-C.el" avant la chose org-babel-load-languages. j'ai ensuite exécuté le bloc de code c ++ plusieurs fois. pas de chance.
puis j'ai tout supprimé (nettoyé le bloc custom-set-variables dans le fichier .emacs) et maintenant mon fichier .emacs ressemble à
;; 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)))
Cela ne fonctionne toujours pas.
Le code que j'essaie d'évaluer dans un tampon orgmode est:
#+BEGIN_SRC c
printf("Hello world");
#+END_SRC
Mon tampon de messages ressemble à ceci après avoir redémarré emacs et tenté d'exécuter le bloc de code ci-dessus:
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
etrequire
.require
ne se charge (dans le cas où le fichier a uneprovide
instruction, ce qui est le cas dans ce cas), mais vous n'avez pas non plus besoin de larequire
car cela est géré parorg-babel-do-load-languages
, vous devez vous assurer d'exigerorg
avant que tout cela se produise. De plus, je pense queC
nonc
, avez-vous essayé cela?Réponses:
Vous n'avez vraiment besoin que de ce bit dans votre fichier init:
Notez que c'est une capitale
C
. Cela permet à Babel de traiter les blocs sources C, C ++ et D.la source
org-babel-execute:c++
fonction, ce qui serait défini dansob-C.el
, mais la façon de dire à Babel qu'il doit chargerob-C.el
est d'appelerorg-babel-do-load-languages
.