从info缓冲区向scheme解释器发送代码

时间:2011-11-04 08:08:38

标签: emacs scheme sicp

我想在我的Emacs中学习SICP。我已经安装了MIT Scheme,Emacs 24并下载了sicp信息(使用本指南http://www.pchristensen.com/blog/articles/setting-up-and-using-emacs-infomode/)。现在我能够在专用缓冲​​区(Mx run-scheme)中运行方案解释器,但是当我尝试从 info 缓冲区(Cx Ce)发送一个define表达式时,我收到以下错误:< / p>

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解释器执行此代码。现在解决这个问题,我打开方案缓冲区(* .scm文件),从info复制代码,然后用C-x C-e执行它。但我想直接从info缓冲区执行它。我该如何设置?

2 个答案:

答案 0 :(得分:2)

当您在信息模式下按(C-x C-e)时,Emacs正在调用eval-last-sexp,因为这是info-mode

中键组合所绑定的内容

(C-x C-e)中绑定的scheme-mode是什么?你可以找到使用(C-h c)?您可以在info模式下将其他一些组合键绑定到该功能,并使用该组合键。

请注意,信息模式为只读。如果scheme-eval函数将结果插入当前缓冲区,则需要解决此问题。

答案 1 :(得分:0)

您想要运行其他功能,请尝试以下操作:

(define-key Info-mode-map (kbd "C-x C-e") 'lisp-eval-defun)