Подтвердить что ты не робот

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

4b9b3361

Ответ 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")