«Pas de fonction org-babel-execute pour c» et «fonction no-org-babel-execute pour c ++»

15

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
Arjun J Rao
la source
2
Vous n'avez vraiment pas besoin des bits loadet require. requirene se charge (dans le cas où le fichier a une provideinstruction, ce qui est le cas dans ce cas), mais vous n'avez pas non plus besoin de la requirecar cela est géré par org-babel-do-load-languages, vous devez vous assurer d'exiger orgavant que tout cela se produise. De plus, je pense que Cnon c, avez-vous essayé cela?
wvxvw
2
ohh putain ... ça a marché! C (pas c) et C ++ (pas c ++) à l'intérieur du bloc # + BEGIN_SRC était ce qu'il fallait après avoir fait toutes les instructions 'load' dans le bon ordre. Merci beaucoup mec!
Arjun J Rao

Réponses:

22

Vous n'avez vraiment besoin que de ce bit dans votre fichier init:

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

Notez que c'est une capitale C. Cela permet à Babel de traiter les blocs sources C, C ++ et D.

wvxvw
la source
2
Cela ne fonctionne toujours pas. J'ai également essayé de retirer la merde d'ob-c.el précédente. Ne fonctionne toujours pas. Même message d'erreur "Aucune fonction org-babel-execute pour c ++"
Arjun J Rao
1
@ArjunJRao avez-vous évalué le code après l'avoir ajouté? (Il est correct de l'évaluer plusieurs fois). Le message d'erreur signifie techniquement qu'il n'a pas pu trouver de org-babel-execute:c++fonction, ce qui serait défini dans ob-C.el, mais la façon de dire à Babel qu'il doit charger ob-C.elest d'appeler org-babel-do-load-languages.
wvxvw
j'ai mis à jour ma question.
Arjun J Rao