Emacs зависает в режиме haskell с вызовом inferior-haskell-load-file
Когда в файле Haskell я использую C-c C-l
для запуска команды inferior-haskell-load-file
, которая предназначена для загрузки текущего файла в интерпретатор GHCI, но Emacs просто зависает, пока я не нажму C-g
. Кто-нибудь знает, как я могу заставить это работать?
GNU Emacs 23.3.1 (x86_64-pc-linux-gnu, GTK + Версия 2.24.5) от 2011-08-14 по allspice, измененному Debian
Использование версии режима haskell v2.7.0
Ответы
Ответ 1
inferior-haskell-mode выполняет синтаксический анализ на основе ожидаемого приглашения ghci. Таким образом, если вы измените приглашение в файле .ghci
, то он не сможет его обнаружить.
Для получения дополнительной информации см., где haskell-ghci.el устанавливает значение comint-prompt-regexp
, чтобы определить, что такое приглашение.
;; GHCi prompt should be of the form `ModuleName> '.
(setq comint-prompt-regexp
"^\\*?[[:upper:]][\\._[:alnum:]]*\\( \\*?[[:upper:]][\\._[:alnum:]]*\\)*> ")
Если вы хотите сохранить настройку в своем .ghci
файле, возможно, будет возможно настроить эти параметры.
Ответ 2
Старый вопрос, но поскольку я просто столкнулся с этим сегодня, я хотел поделиться тем, как на самом деле настроить comint-prompt-regexp
, так как мне пришлось это выяснить.
Эта настройка распознает подсказки λ>
или фактически любой символ до >
), но не нарушит существующее регулярное выражение. В .emacs
:
(load-library "inf-haskell")
(defun my-inf-haskell-hook ()
(setq comint-prompt-regexp
(concat comint-prompt-regexp "\\|^.> ")))
(add-to-list 'inferior-haskell-mode-hook 'my-inf-haskell-hook)
Вы можете добавить больше точек в "\\|^.> "
, чтобы узнать более длинное приглашение, но я хотел сохранить его фиксированную длину для простоты.
Ответ 3
У меня была аналогичная проблема, вызванная сообщением GHCi о какой-то ошибке при запуске, в результате чего режим Emacs haskell дождался бесконечной очереди запроса GHCi (GHCi не показывал стандартное приглашение (Prelude>
), а просто показывал >
). Вы можете попробовать запустить GHCi извне и посмотреть, не сообщает ли он о каких-либо ошибках.
Ответ 4
У меня получилось такое же сообщение об ошибке, когда я попытался использовать стек с emacs. Для меня добавление этой строки в мой .emacs/init.el разрешило проблему:
(setq haskell-program-name "stack ghci")