"No org-babel-execute function para c" y "no-org-babel-execute function para c ++"

15

mi versión de emacs es 24.3.1.

Entiendo que tengo que poner el ob-C.el (disponible desde aquí ) en una ruta donde Emacs pueda leerlo.

Primero copié y pegué el código de ese archivo .el a mi archivo .emacs y reinicié emacs. luego fui a un bloque de código C (dentro de un archivo de organización) e intenté ejecutarlo (usando Cc Cc). el minibúfer dijo 'no hay función org-babel-execute para C'. La misma historia se desarrolló al intentar ejecutar un bloque de código C ++. tenga en cuenta que R y python evalúan perfectamente desde mis archivos de organización. Los problemas parecen ser solo con estos lenguajes compilados.

Luego intenté poner este ob-C.el dentro del directorio ~ / .emacs.d para ver si eso ayudaba. reinició emacs y comprobó. No funcionó.

luego intenté ponerlo en un directorio ~ / .emacs.d / lisp y agregué las siguientes líneas a mi archivo .emacs

(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

después de reiniciar emacs, la evaluación de los bloques de código C o C ++ desde un archivo de organización aún no funciona. sigo recibiendo el mismo error "no org-babel-execute function for C" o "no org-babel-execute function for C ++".

Actualizar

Actualicé mi versión de emacs a 24.5, eliminé todos los subdirectorios anteriores de elpa y melpa en mi directorio ~ / .emacs.d. sospechando que tenía que ver con el orden en que coloqué mi

(custom-set-variables

'(org-babel-load-languages
(quote
((emacs-lisp . t)
 (C . t)
 (css . t)
 (sh . t)
 (awk . t)
 (R . t))))

y

;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

bloques de código, pongo la carga "ob-C.el" antes de lo de org-babel-load-languages. Luego ejecuté el bloque de código de C ++ varias veces. sin suerte.

luego eliminé todo (limpié el bloque de variables personalizadas en el archivo .emacs) y ahora mi archivo .emacs se ve así

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

Aún no funciona.

El código que estoy tratando de evaluar en un búfer orgmode es:

#+BEGIN_SRC c
printf("Hello world");
#+END_SRC

El búfer My Messages se ve así después de reiniciar emacs e intentar ejecutar el bloque de código anterior:

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
fuente
2
Realmente no necesitas los bits loady require. requirese carga (en caso de que el archivo tenga una providedeclaración, que en este caso sí lo hace), pero tampoco necesita el requireporque esto se maneja org-babel-do-load-languages, debe asegurarse de solicitarlo organtes de que ocurra algo de eso. Además, creo que Cno c, ¿lo intentaste?
wvxvw
2
ohh maldita sea ... funcionó! C (no c) y C ++ (no c ++) dentro del bloque # + BEGIN_SRC fue lo que tomó después de haber hecho todas las declaraciones de 'carga' en el orden correcto. Muchas gracias hombre !
Arjun J Rao

Respuestas:

22

Realmente solo necesitas este bit en tu archivo init:

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

Tenga en cuenta que es una capital C. Esto le permite a Babel procesar bloques fuente C, C ++ y D.

wvxvw
fuente
2
Aún no funciona. Traté de eliminar la basura ob-c.el anterior también. Sigue sin funcionar. Mismo mensaje de error "No hay función org-babel-execute para c ++"
Arjun J Rao
1
@ArjunJRao ¿evaluó el código después de agregarlo? (Está bien evaluarlo varias veces). El mensaje de error técnicamente significa que no pudo encontrar la org-babel-execute:c++función, que se definiría en ob-C.el, pero la forma de decirle a Babel que necesita cargar ob-C.eles llamar org-babel-do-load-languages.
wvxvw
Actualicé mi pregunta.
Arjun J Rao