2011-11-01 18 views
12

Khi ở trong tệp Haskell, tôi sử dụng C-c C-l để chạy lệnh inferior-haskell-load-file nhằm tải tệp hiện tại vào trình thông dịch GHCI nhưng Emacs chỉ bị treo cho đến khi tôi nhấn C-g. Bất cứ ai biết làm thế nào tôi có thể nhận được điều này để làm việc?Emacs bị treo trong chế độ haskell với lệnh gọi kém hơn-haskell-load-file

GNU Emacs 23.3.1 (x86_64-pc-linux-gnu, GTK + Version 2.24.5) của 2011/08/14 trên allspice, sửa đổi bởi Debian

Sử dụng Haskell-mode phiên bản v2.7.0

+1

Bạn có tệp '.ghci' tùy chỉnh không? Điều đó có thể gây trở ngại, đặc biệt nếu bạn thay đổi lời nhắc ... Nếu không, bạn có gặp vấn đề gì nếu bạn khởi chạy với "emacs -Q" và sau đó tải một cách rõ ràng chỉ các giá trị mặc định? – ivanm

+0

@ivanm đó là nó! Thêm nó như là câu trả lời xin vui lòng. –

Trả lời

11

chế độ kém hơn chế độ haskell thực hiện một số phân tích cú pháp dựa trên lời nhắc ghci được mong đợi. Như vậy, nếu bạn thay đổi lời nhắc trong tệp .ghci, thì nó không thể phát hiện ra nó.

Để biết thêm thông tin, hãy xem nơi haskell-ghci.el đặt giá trị comint-prompt-regexp để xác định lời nhắc .

;; GHCi prompt should be of the form `ModuleName> '. 
(setq comint-prompt-regexp 
     "^\\*?[[:upper:]][\\._[:alnum:]]*\\(\\*?[[:upper:]][\\._[:alnum:]]*\\)*> ") 

Nếu bạn muốn giữ cài đặt trong tệp .ghci, bạn có thể tùy chỉnh cài đặt này.

+0

Mẹo hay. Cám ơn rất nhiều. Bạn đã cứu tôi rất nhiều đau đầu. –

+0

Nhiều người trong chúng ta có điều này trong .ghci: ': set prompt" λ> "'. Nó sẽ được tốt đẹp để bao gồm λ theo mặc định trong mô hình. – gawi

+0

Tôi hết may mắn đang cố sửa đổi regexp để chấp nhận "λ>". Đây phải là một số vấn đề không phải ascii regexp ... – gawi

0

Tôi gặp phải sự cố tương tự do GHCi báo cáo một số lỗi khi khởi động, khiến chế độ Emacs haskell chờ dấu nhắc GHCi vô thời hạn (GHCi không hiển thị lời nhắc chuẩn (Prelude>), mà chỉ hiển thị >). Bạn có thể thử chạy GHCi bên ngoài và xem liệu nó có báo cáo bất kỳ lỗi nào không.

+0

Có vẻ như không báo cáo bất kỳ lỗi nào. Loại lỗi nào và bạn đặc biệt có ý nghĩa gì? –

3

Câu hỏi cũ, nhưng khi tôi vừa chạy vào ngày hôm nay, tôi muốn chia sẻ cách thực sự tùy chỉnh comint-prompt-regexp vì tôi phải tìm ra.

Tùy chỉnh này sẽ nhận ra λ> lời nhắc hoặc thực sự bất kỳ ký tự nào trước >), nhưng nó không phá vỡ regex hiện tại. Trong .emacs của bạn:

(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) 

Bạn có thể thêm dấu chấm để "\\|^.> " để nhận ra một dấu nhắc lâu hơn, nhưng tôi muốn giữ nó cố định chiều dài cho đơn giản.

0

Tôi nhận được thông báo lỗi tương tự khi cố gắng sử dụng ngăn xếp với các emac. Đối với tôi, thêm dòng này vào .emacs/init.el của tôi đã giải quyết được sự cố:

(setq haskell-program-name "stack ghci") 
Các vấn đề liên quan