如何在 Emacs 下运行 SML/NJ 程序



经过一天的挣扎,我终于为 SML/NJ 配置了 Emacs。我是 emacs 和 SML 的新手,现在我在如何在 emacs 下运行 sml 程序方面遇到了问题。当我命令时,M-x 短信模式看起来没问题,没有错误报告。

打开(或创建像test.sml这样的文件)后,我编写了简单的sml程序,我不知道如何编译它。我尝试了C-c C-c和C-c C-b,如一些视频所示。但没有任何回应。我正在使用emacs 24.1,SMLNj和Windows vista系统。有些人可以告诉我如何在 emacs 中编译和运行 SML 程序吗?我是初学者,所以简单详细的答案.

谢谢。

改为尝试C-c C-l。你将不得不摆弄并确保你拥有的任何sml可执行文件都可以用于Emacs和你的PATH或其他任何东西。我对Windows上的Emacs不够熟悉,无法帮助你。但这是sml-mode手册的相关部分:http://www.smlnj.org/doc/Emacs/sml-mode.html#Interaction-Mode

我使用这段代码来启动和重新启动 sml repl。我把它绑定到M-s M-m。

(defun isml ()
  "If sml repl exists, then restart it else create a new repl"
  (interactive)
  (when (get-buffer "*sml*")
    (with-current-buffer "*sml*"
      (when (process-live-p "sml")
        (comint-send-eof)))
    (sleep-for 0.2))
  (sml-run "sml" ""))
(global-set-key (kbd "M-s M-m") 'isml)
(defun gcr/sml-eval-buffer ()
  "Intelligently evaluate a SML buffer."
  (interactive)
  (gcr/save-all-file-buffers)
  (let ((sml-process (get-process "sml")))
    (when sml-process
      (quit-process sml-process)))
  (sleep-for 0.25)
  (let ((sml-buffer (get-buffer "*sml*")))
    (when sml-buffer
      (kill-buffer sml-buffer)))
  (sml-prog-proc-load-file buffer-file-name))

@wenjun.yan 的答案在我的 Emacs 上不起作用。所以我把它改成这样:

(defun isml ()
 "If sml repl exists, then restart it else create a new repl"
 (interactive)
 (when (get-buffer "*sml*")
   (when (process-live-p
   (get-process "sml"))
     (with-current-buffer "*sml*"
(comint-send-eof)))
   (sleep-for 0.2)
   (kill-buffer "*sml*"))
 (sml-run "sml" ""))
(global-set-key (kbd "<f7>") 'isml)

最新更新