wucuo icon indicating copy to clipboard operation
wucuo copied to clipboard

Wucuo does not work, when I save the buffer.

Open kangdalei opened this issue 4 years ago • 5 comments

The wucuo-mode is already working, but it doesn't show anything when I save the buffer.

My platform is Windows cygwin hunspell 1.7.0 Emacs 26.3 , and installed en dictionary.

On the command line, hunspell works correctly.

for example:

hunspell -d en_US sp.txt

My elisp code about wucuo:

(use-package wucuo
  :hook ((text-mode prog-mode) . wucuo-start)
  )

The ispell-program-name is right.

ispell-program-name is a variable defined in ‘ispell.el’.
Its value is "c:/cygwin64/bin/hunspell.exe"

When I run M-x flyspell-buffer, the minibuffer display: Wrong type argument: stringp, nil

Run M-x flyspell-mode, the minibuffer display:

Error enabling Flyspell mode:
(stringp nil)
Quit [2 times]

Excuse me, where did it go wrong?

kangdalei avatar Oct 25 '20 06:10 kangdalei

M-x toggle-debug-on-error and run flyspell-buffer. Send me the full error message.

redguardtoo avatar Oct 25 '20 10:10 redguardtoo

M-x toggle-debug-on-error and run flyspell-buffer. Send me the full error message.

Debugger entered--Lisp error: (wrong-type-argument stringp nil) string-match("," nil 0) split-string(nil "," t) ispell-parse-hunspell-affix-file(nil) ispell-find-hunspell-dictionaries() ispell-set-spellchecker-params() flyspell-region(1 5542) flyspell-buffer() funcall-interactively(flyspell-buffer) call-interactively(flyspell-buffer record nil) command-execute(flyspell-buffer record) counsel-M-x-action("flyspell-buffer") ivy-call() ivy-read("M-x " [## evil-forward-WORD-begin ansi-color-apply-overlay-face isearch--state-pop-fun--cmacro 0 0 winring xselect--int-to-cons input-method-verbose-flag counsel-compile-env counsel-alias-expand magit-reflog-commit markdown-xhtml-body-preamble markdown-match-bold evil-replace-alist 0 0 dired-backup-diff template defun-prompt-regexp winnow mixal web-mode-warning-face application cl-print--preprocess which-key-side-window-max-height selinux-context counsel-evil-register-face magpie counsel-switch-buffer-other-window 0 benchmark-init/current-node xref-w-dedicated unicad-latin7-prober Load\ snippets... line-num dired-before-readin-hook ibuffer-update & ' 0 osx-org-clock-menubar * rx-trans-forms evil-echo-area-message unicad-quick-size not-at-beginning-of-line helm evil-replace-state-local-map Inline\ Code ...] :predicate (closure ((externs) (initial-input) smex-ido-cache smex-initialized-p amx-cache amx-initialized info-lookup-mode find-tag-marker-ring t) (sym) (and (commandp sym) (not (get sym (quote byte-obsolete-info))) (not (get sym (quote no-counsel-M-x))))) :require-match t :history counsel-M-x-history :action counsel-M-x-action :keymap (keymap (67108908 . counsel--info-lookup-symbol) (67108910 . counsel-find-symbol)) :initial-input nil :caller counsel-M-x) (let ((externs (counsel--M-x-externs))) (ivy-read (counsel--M-x-prompt) (or externs obarray) :predicate (if externs (function (lambda (x) (not (get (intern x) (quote no-counsel-M-x))))) (function (lambda (sym) (and (commandp sym) (not (get sym ...)) (not (get sym ...)))))) :require-match t :history (quote counsel-M-x-history) :action (function counsel-M-x-action) :keymap counsel-describe-map :initial-input initial-input :caller (quote counsel-M-x))) counsel-M-x() funcall-interactively(counsel-M-x) call-interactively(counsel-M-x nil nil) command-execute(counsel-M-x)

kangdalei avatar Oct 25 '20 10:10 kangdalei

You should setup flyspell first. In this case, flyspell-bufferdoes not work, with or without wucuo.

Check README for the sample configuration.

redguardtoo avatar Oct 25 '20 12:10 redguardtoo

Now, my code is:

(use-package wucuo
  :hook ((text-mode prog-mode) . wucuo-start)
  :init
  (setq ispell-program-name "c:/cygwin64/bin/hunspell.exe")
  ;; http://gromnitsky.blogspot.com/2016/09/emacs-251-hunspell.html
  (setq ispell-hunspell-dict-paths-alist
        '(("en_US" "C:/cygwin64/usr/share/myspell/en_US.aff")
          ("en_GB" "C:/cygwin64/usr/share/myspell/en_GB.aff")))

  (setq ispell-local-dictionary "en_US")
  (setq ispell-local-dictionary-alist
        '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8)))
  )

Restart emacs. I saved the buffer, but wucuo doesn't start spell checking.

Run M-x flyspell-mode, minibuffer display:

Error enabling Flyspell mode:
(stringp nil)

Second run M-x flyspell-mode, display:

Starting new Ispell process c:/cygwin64/bin/hunspell.exe with en_US dictionary...

The third time run M-x flyspell-mode, disable the flyspell-mode. This time wucuo is working correctly!

I was very confused. The problem is likely due to my settings of flyspell.

so, I tried apsell that installed from cygwin.

(use-package wucuo
  :hook ((text-mode prog-mode) . wucuo-start)
  :init
(setq ispell-program-name "aspell")
;; You could add extra option "--camel-case" for since Aspell 0.60.8
;; @see https://github.com/redguardtoo/emacs.d/issues/796
(setq ispell-extra-args '("--sug-mode=ultra" "--lang=en_US" "--run-together" "--run-together-limit=16"))
  )

But it's the same thing. I still need to enable and disable flyspell-mode manually, then wucuo can start spell checking.

update: First run , M-x wucuo-spell-check-visible-region . After that, wucuo can check the spelling when saving the buffer.

kangdalei avatar Oct 25 '20 16:10 kangdalei

Just follow my README. I'm the flyspell expert in Emacs community so README should be complete enough. Be patient, wucuo needs a few seconds interval to cool down before next firing up. The interval is for performance.

Please also search emacs stackexhchange hunspell related answer written by me, for example, see https://emacs.stackexchange.com/questions/30008/hunspell-flyspell-and-emacs-on-windows

redguardtoo avatar Oct 26 '20 23:10 redguardtoo