Chức năng thực thi chức năng không có org-babel cho cv và chức năng thực thi chức năng không có org-babel cho c ++


14

phiên bản emacs của tôi là 24.3.1.

tôi hiểu rằng tôi phải đặt ob-C.el (có sẵn từ đây ) vào một con đường nơi Emacs có thể đọc nó.

Lần đầu tiên tôi sao chép mã từ tệp .el đó sang tệp .emacs của tôi và khởi động lại emacs. sau đó tôi đã đi đến một khối mã C (trong một tệp org) và cố gắng thực hiện nó (sử dụng Cc Cc). xe buýt nhỏ nói 'không có chức năng thực thi org-babel cho C'. câu chuyện tương tự diễn ra với việc cố gắng thực thi khối mã C ++. lưu ý rằng R và python đánh giá hoàn hảo từ trong các tệp org của tôi. các vấn đề dường như chỉ có với các ngôn ngữ được biên dịch này.

sau đó tôi đã thử đặt ob-C.el này vào thư mục ~ / .emacs.d để xem điều đó có giúp ích gì không. khởi động lại emacs và kiểm tra. nó không hoạt động.

sau đó tôi đã thử đặt nó vào một thư mục ~ / .emacs.d / lisp và thêm các dòng sau vào tập tin .emacs của tôi

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

sau khi khởi động lại emacs, việc đánh giá các khối mã C hoặc C ++ từ trong tệp org vẫn không hoạt động. tôi tiếp tục nhận được cùng một lỗi "không có chức năng thực thi org-babel cho C" hoặc "không có chức năng thực thi org-babel cho C ++".

Cập nhật

tôi đã nâng cấp phiên bản emacs của mình lên 24.5, xóa tất cả các thư mục con elpa và melpa trước đó trong thư mục ~ / .emacs.d của tôi. nghi ngờ rằng nó phải làm theo thứ tự mà tôi đã đặt

(custom-set-variables

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

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

khối mã, tôi đặt tải "ob-C.el" trước điều org-babel-load-ngôn ngữ. sau đó tôi đã thực thi khối mã c ++ nhiều lần. không may mắn.

sau đó tôi xóa tất cả mọi thứ (xóa sạch khối biến tùy chỉnh-tập tin trong tệp .emacs) và bây giờ tệp .emacs của tôi trông như thế

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

Nó vẫn không hoạt động.

Mã mà tôi đang cố gắng đánh giá trong bộ đệm orgmode là:

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

Bộ đệm Tin nhắn của tôi trông như thế này sau khi khởi động lại emacs và cố gắng thực thi khối mã trên:

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
Bạn thực sự không cần loadrequirebit. requirekhông tải (trong trường hợp tệp có providecâu lệnh, trong trường hợp này là như vậy), nhưng bạn cũng không cần requirevì điều này được xử lý bởi org-babel-do-load-languages, bạn cần đảm bảo yêu cầu orgtrước khi bất kỳ điều đó xảy ra. Ngoài ra, tôi nghĩ là Ckhông c, bạn đã thử chưa?
wvxvw

2
ohh chết tiệt ... nó đã làm việc! C (không phải c) và C ++ (không phải c ++) bên trong khối # + BEGIN_SRC là những gì nó đã mất sau khi thực hiện tất cả các câu lệnh 'tải' theo đúng thứ tự. Cám ơn nhiều, ông bạn !
Arjun J Rao

Câu trả lời:


22

Bạn thực sự chỉ cần bit này trong tệp init của bạn:

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

Lưu ý đó là một thủ đô C. Điều này cho phép Babel xử lý các khối nguồn C, C ++ và D.


1
Nó không hoạt động. Tôi cũng đã cố gắng loại bỏ crap ob-c.el trước đó. Vẫn không làm việc. Thông báo lỗi tương tự "Không có chức năng thực thi org-babel cho c ++"
Arjun J Rao

1
@ArjunJRao bạn đã đánh giá mã sau khi thêm nó? (Bạn có thể đánh giá nó nhiều lần). Thông báo lỗi về mặt kỹ thuật có nghĩa là nó không thể tìm thấy org-babel-execute:c++chức năng, được xác định trong đó ob-C.el, nhưng cách để nói với Babel rằng nó cần tải ob-C.ellà gọi org-babel-do-load-languages.
wvxvw

tôi đã cập nhật câu hỏi của tôi
Arjun J Rao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.