Làm cho hunspell hoạt động với emacs và tiếng Đức


7

Tôi muốn làm hunspellviệc với emacs24 và một từ điển tiếng Đức trên hộp ub Ubuntu 13.04.

Để làm như vậy tôi đã cài đặt hunspellhunspell-devà bổ sung sau đây để tôi .emacsfile:

(setq ispell-program-name "hunspell")
(setq ispell-dictionary "deutsch8")

Khi tôi mở một tệp trong emacs và bắt đầu flyspell-buffertôi nhận Starting new Ispell process [[hunspell::deutsch8]]nhưng nó chặn bộ đệm emacs (chuột trở thành một đĩa quay biểu thị để chờ) và hoạt động vô tận mà không hiển thị bất kỳ kết quả nào. Vì vậy, phải có một cái gì đó sai với cấu hình của tôi.

Không có dòng thứ hai, nó hoạt động, nhưng chỉ cho các văn bản tiếng Anh.

Vì vậy, cách tốt nhất để thiết lập những gì hunspellcho emacs24với một cuốn từ điển tiếng Đức trên ubuntu 13.04? Có những cạm bẫy có thể?


Lưu ý rằng tên dictonary khác với hunspell so với ispell. Thay vì (setq ispell-dictionary "deutsch8"), bạn nên sử dụng (setq ispell-dictionary "de_DE"). Lưu ý, tuy nhiên, điều này đòi hỏi emacs 24.4 trở lên. Đối với các phiên bản trước, bạn cần thêm các định nghĩa ispell-local-dictionary-alistnhư được cung cấp trong câu trả lời được chấp nhận.
Christian Herenz

Câu trả lời:


6

Để kiểm tra nếu từ điển được liệt kê trong đường dẫn chạy hunspell -D. Nó sẽ xuất ra một cái gì đó dọc theo những dòng đó:

...
/usr/share/hunspell/en_US
/usr/share/hunspell/de_BE
/usr/share/hunspell/de_LU
/usr/share/hunspell/de_DE
...

Tiếp theo, thêm từ điển ưa thích của bạn vào ispell-local-dictionary-alisttrong .emacstệp của bạn

(add-to-list 'ispell-local-dictionary-alist '("deutsch-hunspell"
                                              "[[:alpha:]]"
                                              "[^[:alpha:]]"
                                              "[']"
                                              t
                                              ("-d" "de_DE"); Dictionary file name
                                              nil
                                              iso-8859-1))

(add-to-list 'ispell-local-dictionary-alist '("english-hunspell"
                                              "[[:alpha:]]"
                                              "[^[:alpha:]]"
                                              "[']"
                                              t
                                              ("-d" "en_US")
                                              nil
                                              iso-8859-1))

(setq ispell-program-name "hunspell"          ; Use hunspell to correct mistakes
      ispell-dictionary   "deutsch-hunspell") ; Default dictionary to use

Ngoài ra, bạn có thể định nghĩa một chức năng để chuyển đổi giữa từ điển tiếng Đức và tiếng Anh và liên kết nó C-c dvới ví dụ

(defun switch-dictionary-de-en ()
  "Switch german and english dictionaries."
  (interactive)
  (let* ((dict ispell-current-dictionary)
         (new (if (string= dict "deutsch-hunspell") "english-hunspell"
                   "deutsch-hunspell")))
    (ispell-change-dictionary new)
    (message "Switched dictionary from %s to %s" dict new)))

(global-set-key (kbd "C-c d") 'switch-dictionary-de-en)

4
Cảm ơn. Tôi nghĩ bạn nên thêm một (require 'ispell)trước khi (add-to-list 'ispell-local...)dòng.
sinh viên

1
Tôi nghĩ sẽ không hại gì nếu tôi thêm một nhận xét nhỏ cho những người dùng Windows có thể rơi vào điều này. Trong Windows Emacs có LANGbiến môi trường được đặt thành cài đặt khu vực. Đó là một ý tưởng tốt để thêm một cái gì đó như (setenv "LANG" "en_US")vào tập tin init của bạn. Đây sẽ là từ điển ban đầu của bạn, trừ khi bạn thay đổi nó. LANGGiá trị mặc định có thể được đặt thành một cái gì đó có thể kỳ lạ (giả sử ENG), tạo ra lỗi ispell / hunspell.
antonio

1
@antonio Đúng, nhưng trong trường hợp của tôi, (setenv "DICTIONARY" "en_GB")đã làm việc.
huyền thoại2k

Việc tạo các mục từ điển tùy chỉnh cho hunspell là không bắt buộc đối với emacs> 24.
Christian Herenz 26/11/18

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.