"Nessuna funzione org-babel-execute per c" e "funzione no-org-babel-execute per c ++"


15

la mia versione di emacs è 24.3.1.

capisco che devo inserire ob-C.el (disponibile da qui ) in un percorso in cui Emacs può leggerlo.

ho prima copiato e incollato il codice da quel file .el nel mio file .emacs e ho riavviato emacs. poi sono andato a un blocco di codice C (all'interno di un file org) e ho provato a eseguirlo (usando Cc Cc). il minibuffer disse "nessuna funzione org-babel-execute per C". la stessa storia giocata con il tentativo di eseguire un blocco di codice C ++. nota che R e Python valutano perfettamente all'interno dei miei file organizzativi. i problemi sembrano essere solo con questi linguaggi compilati.

poi ho provato a mettere questo ob-C.el nella directory ~ / .emacs.d per vedere se questo ha aiutato le cose. riavviato emacs e controllato. non ha funzionato.

poi ho provato a inserirlo in una directory ~ / .emacs.d / lisp e ho aggiunto le seguenti righe al mio file .emacs

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

dopo aver riavviato emacs, la valutazione dei blocchi di codice C o C ++ dall'interno di un file org non funziona ancora. continuo a ricevere lo stesso errore "nessuna funzione org-babel-execute per C" o "nessuna funzione org-babel-execute per C ++".

Aggiornare

ho aggiornato la mia versione di emacs alla 24.5, cancellato tutte le precedenti sottodirectory elpa e melpa nella mia directory ~ / .emacs.d. sospettando che avesse a che fare con l'ordine in cui ho inserito il mio

(custom-set-variables

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

e

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

blocchi di codice, ho messo il carico "ob-C.el" prima della cosa org-babel-load-languages. ho quindi eseguito più volte il blocco di codice c ++. senza fortuna.

poi ho rimosso tutto (ripulito il blocco custom-set-variabili nel file .emacs) e ora il mio file .emacs sembra

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

Non funziona ancora.

Il codice che sto cercando di valutare in un buffer orgmode è:

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

Il buffer Messaggi personali si presenta così dopo aver riavviato emacs e aver tentato di eseguire il blocco di codice sopra riportato:

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

2
Non hai davvero bisogno dei bit loade require. requireesegue il caricamento (nel caso in cui il file abbia provideun'istruzione, che in questo caso lo fa), ma non è necessario anche requireperché questo è gestito da org-babel-do-load-languages, è necessario assicurarsi di richiedere orgprima che ciò accada. Inoltre, penso di Cno c, ci hai provato?
wvxvw,

2
oh dannazione ... ha funzionato! C (non c) e C ++ (non c ++) all'interno del blocco # + BEGIN_SRC era quello che ci voleva dopo aver fatto tutte le istruzioni "load" nell'ordine giusto. Grazie mille amico!
Arjun J Rao,

Risposte:


22

Hai davvero bisogno solo di questo bit nel tuo file init:

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

Nota che è una capitale C. Ciò consente a Babel di elaborare blocchi sorgente C, C ++ e D.


2
Non funziona ancora. Ho provato a rimuovere anche la precedente merda ob-c.el. Continua a non funzionare. Stesso messaggio di errore "Nessuna funzione org-babel-execute per c ++"
Arjun J Rao,

1
@ArjunJRao hai valutato il codice dopo averlo aggiunto? (Va bene valutarlo più volte). Il messaggio di errore tecnicamente significa che non è stato possibile trovare la org-babel-execute:c++funzione, che sarebbe stata definita ob-C.el, ma il modo per dire a Babel che è necessario caricare ob-C.elè chiamare org-babel-do-load-languages.
wvxvw,

ho aggiornato la mia domanda.
Arjun J Rao,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.