minha versão do emacs é 24.3.1.
Eu entendo que tenho que colocar o ob-C.el (disponível aqui ) em um caminho onde o Emacs possa lê-lo.
Copiei primeiro o código desse arquivo .el para o meu arquivo .emacs e reiniciei o emacs. então eu fui para um bloco de código C (dentro de um arquivo organizacional) e tentei executá-lo (usando Cc Cc). o minibuffer disse 'nenhuma função de org-babel-execute para C'. a mesma história aconteceu ao tentar executar um bloco de código C ++. note que R e python avaliam perfeitamente dentro dos meus arquivos organizacionais. os problemas parecem estar apenas com essas linguagens compiladas.
Eu tentei colocar esse ob-C.el dentro do diretório ~ / .emacs.d para ver se isso ajudou. emacs reiniciado e verificado. não funcionou.
então tentei colocá-lo em um diretório ~ / .emacs.d / lisp e adicionei as seguintes linhas ao meu arquivo .emacs
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
depois de reiniciar o emacs, a avaliação dos blocos de código C ou C ++ a partir de um arquivo organizacional ainda não funciona. Eu continuo recebendo o mesmo erro "nenhuma função org-babel-execute para C" ou "nenhuma função org-babel-execute para C ++".
Atualizar
atualizei minha versão do emacs para 24.5, excluí todos os subdiretórios elpa e melpa anteriores no diretório ~ / .emacs.d. suspeitando que tinha a ver com a ordem em que eu coloquei meu
(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)
blocos de código, eu coloquei a carga "ob-C.el" antes da coisa org-babel-load-languages. Em seguida, executei o bloco de código c ++ várias vezes. sem sorte
então eu removi tudo (limpei o bloco de variáveis personalizadas no arquivo .emacs) e agora meu arquivo .emacs se parece
;; 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)))
Ainda não está funcionando.
O código que estou tentando avaliar em um buffer orgmode é:
#+BEGIN_SRC c
printf("Hello world");
#+END_SRC
O buffer do My Messages fica assim após reiniciar o emacs e tentar executar o bloco de código acima:
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
erequire
pedaços.require
carrega (no caso de o arquivo ter umaprovide
declaração, o que nesse caso é o caso), mas você também não precisa dorequire
porque isso é tratadoorg-babel-do-load-languages
, você precisa se certificar de exigir issoorg
antes que isso aconteça. Além disso, acho queC
nãoc
, você tentou isso?Respostas:
Você realmente só precisa desse bit no seu arquivo init:
Note que é uma capital
C
. Isso permite que o Babel processe os blocos de origem C, C ++ e D.fonte
org-babel-execute:c++
função, que seria definidaob-C.el
, mas a maneira de informar ao Babel que ele precisa carregarob-C.el
é chamarorg-babel-do-load-languages
.