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
load
yrequire
.require
se carga (en caso de que el archivo tenga unaprovide
declaración, que en este caso sí lo hace), pero tampoco necesita elrequire
porque esto se manejaorg-babel-do-load-languages
, debe asegurarse de solicitarloorg
antes de que ocurra algo de eso. Además, creo queC
noc
, ¿lo intentaste?Respuestas:
Realmente solo necesitas este bit en tu archivo init:
Tenga en cuenta que es una capital
C
. Esto le permite a Babel procesar bloques fuente C, C ++ y D.fuente
org-babel-execute:c++
función, que se definiría enob-C.el
, pero la forma de decirle a Babel que necesita cargarob-C.el
es llamarorg-babel-do-load-languages
.