在使用Emacs编辑源文件时评估ghci中的haskell的函数

Ian*_*ing 5 emacs haskell ghci

我正在编辑一个haskell源文件.我想在我的inferior-haskell缓冲区(已在不同的框架中打开)中运行我的main函数并继续编辑我的源文件.要做到这一点,我做到了

C-c C-l,更改框架,main<ret>更改回原始框架

这似乎效率很低.我想要一个emacs功能/键一次性完成它.

Tik*_*vis 7

其实是有一个函数来做到这一点已经定义inf-haskell.el:inferior-haskell-load-and-run.这会加载您当前的文件并运行:main.

您可以通过添加一个钩子将它绑定到Haskell模式中的键:

(defun my-haskell-mode-hook ()
  (local-set-key (kbd "C-x C-r") 'inferior-haskell-load-and-run))
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook)
Run Code Online (Sandbox Code Playgroud)

但是,稍微玩一下,它似乎在我的计算机上有一个奇怪的问题:有时,当它弹出*haskell*缓冲区时,它不会将点移动到结尾.我觉得这很烦人.你可以通过自己将点移动到最终来轻松修复它:

(defun my-haskell-load-and-run ()
  "Loads and runs the current Haskell file."
  (interactive)
  (inferior-haskell-load-and-run inferior-haskell-run-command)
  (sleep-for 0 100)
  (end-of-buffer))
Run Code Online (Sandbox Code Playgroud)

我认为这sleep-for是必要的,因为Haskell命令是异步运行的,需要一点时间才能返回.整件事情都是黑客攻击,但似乎有效.

此外,您可能希望确切地定制它是什么inferior-haskell-run-command.默认情况下,它是:main.但是,对我来说,我认为main会更好,因为main受到不在:set args ...哪里的影响:main.

如果你想留在当前的Haskell缓冲区中,你可以这样做:

(defun my-haskell-load-and-run ()
  "Loads and runs the current Haskell file."
  (interactive)
  (let ((start-buffer (current-buffer)))
    (inferior-haskell-load-and-run inferior-haskell-run-command)
    (sleep-for 0 100)
    (end-of-buffer)
    (pop-to-buffer start-buffer)))
Run Code Online (Sandbox Code Playgroud)