2011-02-03 30 views
11

Tôi là người dùng Emacs không có kỹ năng liên quan đến việc định cấu hình trình chỉnh sửa. Sau khi tôi nâng cấp từ haskell-mode 2,4-2,7, tôi đã nhận thấy hai thay đổi:Bắt buộc chế độ haskell-indent trên chế độ haskell-indentation ở chế độ haskell-mode 2.7?

  • lõm là khác nhau bằng cách nào đó, trong một cách mà tôi hoàn toàn không muốn. Tôi không thể đặt ngón tay của mình lên đó là gì.
  • Quan trọng hơn: Nếu tôi bật chế độ cua và đánh dấu một khối văn bản, xóa lùi/xóa không xóa toàn bộ khối, chỉ ký tự trước đó/tiếp theo từ điểm đánh dấu của tôi.

Tôi thấy rằng chế độ haskell 2.7 sử dụng chế độ thứ hai haskell-indentation-mode theo mặc định, trong khi hành vi của 2,4 đã được bảo tồn ở dạng chế độ thụt lề-thụt lề. Nếu trước tiên tôi tắt cái cũ và sau đó, hành vi tôi muốn được khôi phục (tức là thụt đầu dòng cảm thấy như trước đây, và backspace/delete sẽ xóa các khối được đánh dấu).

Tôi không thể, tuy nhiên, việc này xảy ra tự động bất cứ khi nào tôi mở tệp có hậu tố .hs. Tôi đã thử nhiều thứ khác nhau giống như

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent-mode) 

và thích nó, nhưng tôi kết thúc với chế độ chuẩn hoặc với chế độ haskell đơn giản không có thụt lề và doc.

Bất kỳ ý tưởng nào?

Solution (nhờ nominolo):

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indent) 
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 
(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 
    ) 

Trả lời

14

Cách tốt nhất để cấu hình những việc như vậy là bằng cách viết một cái móc tùy chỉnh:

(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 

(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 

    ;; further customisations go here. For example: 
    (setq locale-coding-system 'utf-8) 
    (flyspell-prog-mode) ;; spell-checking in comments and strings 
    ;; etc.  

    ) 

Bạn cũng có thể dính vào một chức năng ẩn danh trong đó , nhưng có một hàm được đặt tên sẽ dễ dàng hơn nếu bạn muốn thử nghiệm với một số cài đặt. Chỉ cần xác định lại hàm (và mở lại tệp Haskell) sẽ cung cấp cho bạn hành vi mới.

+0

Câu trả lời hay; điều này là tốt hơn nhiều so với mô hình ngẫu nhiên 'add-hook' của tôi đã có trước đây. Cảm ơn! – acfoltzer

+0

Đáng buồn thay, điều này không giúp ích gì cho tôi. Tôi thêm mã bạn đã cung cấp cho các .emac của mình, nhưng khi tôi mở một .hs haskell-indentation-mode vẫn đang bật. Chạy 'M-x haskell-indentation-mode' sẽ tắt nó như mong đợi. – gspr

+0

@gspr: Có thể bạn có một cái móc khác đang chạy sau đó. Sử dụng 'C-h v haskell-mode-hook' để xem các móc hoạt động. Ngoài ra, có vẻ như có ba chế độ thụt đầu dòng, vì vậy có thể bạn cần phải tắt chế độ khác? – nominolo

Các vấn đề liên quan