На самом деле для этого есть функция, уже определенная в 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)))
person
Tikhon Jelvis
schedule
03.11.2012