我正在编辑一个haskell源文件。我想在我的inferior-haskell缓冲区(已经在不同的框架中打开)中运行我的main函数并继续编辑我的源文件。要做到这一点,我做
C-c C-l
,更改框架,main<ret>
,更改回原始框架
这似乎效率很低。我想要一个emacs功能/键,一次性完成。
答案 0 :(得分: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)
然而,稍微讨论一下这个问题似乎在我的计算机上有一个奇怪的问题:有时,当它弹出到*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))
我相信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)))