moja wersja emacsa to 24.3.1.
Rozumiem, że muszę postawić ob-C.el (dostępny tutaj ) na ścieżce, na której Emacs może go przeczytać.
najpierw skopiowałem kod z tego pliku .el do mojego pliku .emacs i zrestartowałem emacsa. potem poszedłem do bloku kodu C (w pliku org) i próbowałem go uruchomić (używając Cc Cc). minibufor powiedział „żadna funkcja org-babel-execute dla C”. ta sama historia rozgrywa się przy próbie wykonania bloku kodu C ++. Zwróć uwagę, że R i Python oceniają doskonale z moich plików org. wydaje się, że problemy dotyczą tylko tych skompilowanych języków.
próbowałem następnie umieścić ten ob-C.el w katalogu ~ / .emacs.d, aby sprawdzić, czy to pomogło. zrestartowałem emacsa i sprawdziłem. to nie działało.
następnie próbowałem umieścić go w katalogu ~ / .emacs.d / lisp i dodałem następujące wiersze do mojego pliku .emacs
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
po ponownym uruchomieniu emacsa ocena bloków kodu C lub C ++ z pliku org nadal nie działa. ciągle pojawia się ten sam błąd „brak funkcji org-babel-execute dla C” lub „brak funkcji org-babel-execute dla C ++”.
Aktualizacja
zaktualizowałem wersję emacsa do 24.5, usunąłem wszystkie poprzednie podkatalogi elpa i melpa w moim katalogu ~ / .emacs.d. podejrzewając, że ma to związek z kolejnością, w jakiej je umieściłem
(custom-set-variables
'(org-babel-load-languages
(quote
((emacs-lisp . t)
(C . t)
(css . t)
(sh . t)
(awk . t)
(R . t))))
i
;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
bloków kodu, umieszczam ładunek „ob-C.el” przed rzeczą org-babel-load-languages. następnie wykonałem blok kodu c ++ wiele razy. brak szczęścia.
następnie usunąłem wszystko (wyczyściłem blok zmiennych niestandardowych w pliku .emacs) i teraz mój plik .emacs wygląda jak
;; 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)))
To wciąż nie działa.
Kod, który próbuję ocenić w buforze orgmode to:
#+BEGIN_SRC c
printf("Hello world");
#+END_SRC
Bufor My Messages wygląda następująco po ponownym uruchomieniu emacsa i próbie wykonania powyższego bloku kodu:
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
irequire
bitów.require
wykonuje ładowanie (w przypadku, gdy plik maprovide
instrukcję, co w tym przypadku tak jest), ale nie potrzebujesz również,require
ponieważ jest to obsługiwane przezorg-babel-do-load-languages
, musisz upewnić się, że wymaga tego,org
zanim coś takiego się wydarzy. Poza tym myślę, żeC
niec
, próbowałeś tego?Odpowiedzi:
Naprawdę potrzebujesz tylko tego bitu w pliku init:
Zauważ, że to stolica
C
. Umożliwia to Babelowi przetwarzanie bloków źródłowych C, C ++ i D.źródło
org-babel-execute:c++
funkcji, w której zostałby zdefiniowanyob-C.el
, ale sposobem, aby powiedzieć Babelowi, że musi się załadować,ob-C.el
jest wywołanieorg-babel-do-load-languages
.