#emacs #scheme #sicp
#emacs #схема #sicp
Вопрос:
Я хочу изучить SICP в моем Emacs. Я установил MIT Scheme, Emacs 24 и загрузил информацию о sicp (используя это руководствоhttp://www.pchristensen.com/blog/articles/setting-up-and-using-emacs-infomode /). Теперь я могу запустить интерпретатор схемы в выделенном буфере (M-x run-scheme), но я получаю следующую ошибку при попытке отправить одно из выражений define из информационного буфера (C-x C-e):
Debugger entered--Lisp error: (void-function define)
(define (abs x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x))))
eval((define (abs x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x)))) nil)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
Похоже, Emacs пытается выполнить этот код с помощью интерпретатора Lisp. В качестве решения этой проблемы теперь я открываю scheme buffer (файл *.scm), копирую в него код из info, и они выполняют его с помощью C-x C-e. Но я хочу выполнить его непосредственно из информационного буфера. Как я могу это настроить?
Ответ №1:
Когда вы нажимаете (C-x C-e)
в информационном режиме, Emacs вызывает eval-last-sexp
, потому что это то, к чему привязана комбинация клавиш в info-mode
Что (C-x C-e)
связано с in scheme-mode
? Вы можете узнать, используя (C-h c)
? Вы можете привязать какую-либо другую комбинацию клавиш к этой функции в info
режиме и использовать эту комбинацию клавиш.
Обратите внимание, что информационный режим доступен только для чтения. Если функция scheme-eval вставляет результаты в текущий буфер, вам потребуется обходной путь.
Ответ №2:
Вы хотите запустить другую функцию, поэтому попробуйте это:
(define-key Info-mode-map (kbd "C-x C-e") 'lisp-eval-defun)