如何在Mac Emacs中运行Scheme? - "过程方案异常退出,代码为1/126"

时间:2016-08-21 23:22:22

标签: macos emacs lisp mit-scheme

具有相似标题(链接)的问题不包括我遇到的具体错误,因此是新问题。

上下文

我正在尝试设置一个在emacs中使用scheme的环境,这样我就可以完成SICP本书。我知道可以很好地整合这两者,以便它们能很好地协同工作。我知道有很多方法可以做到这一点,即使有额外的功能(我已经看到名字嘎嘎/球拍...)但这些似乎是更高级的选项。因为我在设置这个基本的基础知识' run-scheme'在emacs中,我没有广泛地研究过这些选项。

我在/我尝试过的地方:

  1. 我为OS X(x86-64)下载了MIT:GNU scheme 9.2。这按预期工作,我可以从终端运行解释器:

    $ scheme
    

    或执行文件" / Applications / MIT:GNU Scheme.app/Contents/Resources/mit-scheme" (在新的终端窗口中打开解释器。)

    此时,M-x run-scheme返回一条消息,指出不存在此类文件或目录。

    我阅读these two个问题以供参考,然后:

  2. 我创建了一个指向binary / exec文件的符号链接" / Applications / MIT:GNU Scheme.app/Contents/Resources/mit-scheme" (从finder /终端执行时效果很好),然后将此文件放在" / usr / bin"名字"计划"。

    此时M-x run-scheme返回:

    /usr/local/Cellar/emacs/24.5/Emacs.app/Contents/MacOS/Emacs:/usr/bin/scheme: Exec format error
    
    Process scheme exited abnormally with code 126
    
  3. 符号链接文件在bin文件夹中看起来非常不合适,因此不知道还有什么要尝试我删除了符号链接,而是创建了mit-scheme exec文件的实际副本并放置了 in" / usr / bin"。

    M-x run-scheme现在返回:

    /usr/bin/scheme: can't find a readable default for option --band.
        searched for file all.com in these directories:
        /Applications/mit-scheme.app/Contents/Resources
    
    Inconsistency detected.
    
    Process scheme exited abnormally with code 1
    
  4. 寻求帮助以理解这些错误消息引导我找到关于在Windows操作系统上设置方案的问题的线程,这令人困惑,我觉得我现在已经超出了我的深度 - 希望有人知道我哪里出错了。

    结束

    这看起来很奇怪,因为我知道' M-x跑步方案'命令试图访问位置" / usr / bin / scheme"我确保这样的位置存在,并且该位置的方案exec文件正常工作 - 我不明白emacs有什么其他要求才能使用。

    run-scheme命令实际上是做什么的?它有什么其他要求按预期运作?

2 个答案:

答案 0 :(得分:0)

MIT Scheme在从可执行文件路径派生的位置查找其库(包括其“band”)。如果库位于非标准位置,则mit-scheme可执行文件将无法找到它们。

例如,在我的设置中,MIT方案位于:/usr/local/scheme/bin/mit-scheme,乐队和其他内容位于/usr/local/scheme/lib/mit-scheme/

对于Emacs,我已定义:

(defun mit-scheme () 
  (interactive)
  (run-scheme "/usr/local/scheme/bin/mit-scheme -library /usr/local/scheme/lib/mit-scheme")) 

在Emacs中执行mit-scheme时,确保M-x mit-scheme可以找到其库。如果我想将MIT Scheme作为默认值,我会使用:

(setq scheme-program-name "/usr/local/scheme/bin/mit-scheme -library /usr/local/scheme/lib/mit-scheme")

您需要根据您的安装设置值。您也可以选择将MIT Scheme相关的环境变量设置为指向库位置。相关的是MITSCHEME_LIBRARY_PATH。

$ mit-scheme --help
Usage: mit-scheme --OPTION ARG ... --OPTION ARG ...

This machine accepts the following command-line options.  The options
may appear in any order, but they must all appear before any options
for the band.

--library PATH
  Sets the library search path to PATH.  This is a colon-separated
  list of directories that is searched to find various library files,
  such as bands.  If this option is not given, the value of the
  environment variable MITSCHEME_LIBRARY_PATH is used; if that isn't
  defined, "/usr/local/lib/mit-scheme" is used.

--band FILENAME
  Specifies the initial band to be loaded.  Searches for FILENAME in
  the working directory and the library directories, returning the
  full pathname of the first readable file of that name.  If this
  option isn't given, the filename is the value of the environment
  variable MITSCHEME_BAND, or if that isn't defined, "runtime.com"; in
  these cases the library directories are searched, but not the
  working directory.

...

答案 1 :(得分:0)

我也在尝试使用SICP的资料。花了几个小时,尝试使一切正常。

在Mojave(macOS 10.14)上遵循Don't Panic!之后,我意识到自己的路径是错误的。

我从运行installation steps from here的源和自述文件中安装了mit-scheme 10.1.5。我的路径不同,这导致--band命令失败。

如果遇到问题,请仔细检查所有路径是否符合您的期望。

我使用make install和默认路径来安装到/usr/local/bin/usr/local/lib

Mac随附了较旧的emacs 22.1.1,但可与教授教授的extra脚本一起使用以自定义emacs。

注意:如果退出emacs 22.1.1,它不会警告您停止方案,这将导致100%的CPU使用过程,如果没有活动监视器,就无法停止。较新版本的emacs会提示您退出之前退出计划过程(可能还会有较早版本的设置)。

我使用Homebrew安装了emacs 26.1,并在解决以下问题后能够使所有程序运行:

使用ad-advised-definition-p的emacs较新版本(24+?)出现错误,请通过在第334行的“ multi-term.el”中注释掉该函数来解决该问题:

; (defcustom multi-term-dedicated-skip-other-window-p nil
;   "Default, can have `other-window' select window in cyclic ordering of windows.
; In cases you don't want to select `multi-term' dedicated window, use `other-window'
; and make `multi-term' dedicated window as a viewable sidebar.
;
; So please turn on this option if you want to skip `multi-term' dedicated window with `other-window'.
;
; Default is nil."
;   :type 'boolean
;   :set (lambda (symbol value)
;          (set symbol value)
;          (when (ad-advised-definition-p 'other-window)
;            (multi-term-dedicated-handle-other-window-advice value)))
;   :group 'multi-term)

路径设置

我有一个警告:

Warning (initialization): Your ‘load-path’ seems to contain
your ‘.emacs.d’ directory: ~/.emacs.d
This is likely to cause problems...
Consider using a subdirectory instead, e.g.: /Users/paulsolt/.emacs.d/lisp

我通过将~/.emacs文件的第一行指向:

;; (setq load-path (append (list "~/.emacs.d") load-path))
(setq load-path (append (list "/Users/paulsolt/.emacs.d/config") load-path))

config文件夹中已经包含所有脚本,我认为我在让Emacs看到问题。

我从源代码安装了方案,而没有修改安装路径,所以我更改了这一行:

;; This is the place where you have installed scheme. Be sure to set
;; this to an appropriate value!!!
;;(setq scheme-root "/mit/6.945")
(setq scheme-root "/usr/local")

接下来要解决导致--band失败的问题,我修改了这一行。

(setq scheme-program-name
      (concat
       scheme-root "/bin/mit-scheme "
       "--library " scheme-root "/lib/mit-scheme-c "
       ;;"--band " scheme-root "/lib/mit-scheme-c/all.com "
       "--band " scheme-root "/lib/mit-scheme-x86-64/all.com "     
       "-heap 10000"))

我的方案库已安装在mit-scheme-x86-64文件夹中。

最后,看来还有一些其他命令我不得不注释掉,因为它们似乎不存在...

;;(tool-bar-mode -1)
;;(scroll-bar-mode -1)

完成所有设置后,我现在可以在emacs中创建方案脚本,并且可以使用meta键(iTerm将我的Alt键设置为Esc +)运行脚本:

M-x run-scheme

提示:作为emacs的更新,我正在研究emacs教程(C-h t),如果您要使用基于文本的方法,这是必不可少的。在大学里,我在终端之外使用了emacs,但是这次我将它提供给终端以学习更多的热键。