Fix behaviour without aspell

If aspell (or a spell-fu acceptable equivalent) warn the user. If it
failed to bind +spell-correct-interface, and bind that.

Remove previous hack. It prevents use of +spell/correct if spell-fu does
not try to highlight a word. This is extreamly common is docstrings, for
example. I think having +spell/correct should check any word it is
called upon, even without general text highlighting.
This commit is contained in:
Ian Wahbe 2020-11-13 15:37:20 +01:00
parent f7293fb67e
commit ea16bb66c3
2 changed files with 22 additions and 12 deletions

View file

@ -50,12 +50,20 @@
(defun +spell/correct ()
"Correct spelling of word at point."
(interactive)
;; HACK Fake awareness for our personal dictionary by stopping short if
;; spell-fu hasn't highlighted the current word. This is necessary
;; because ispell/aspell struggles to find our
;; `ispell-personal-dictionary' if it's not in $HOME.
(unless (memq 'spell-fu-incorrect-face (face-at-point nil t))
(user-error "%S is correct" (thing-at-point 'word t)))
;; spell-fu fails to initialize correctly if it can't find aspell or a similar
;; program. We want to signal the error, not tell the user that every word is
;; spelled correctly.
(unless (;; This is what spell-fu uses to check for the aspell executable
or (and ispell-really-aspell ispell-program-name)
(executable-find "aspell"))
(user-error "Aspell is required for spell checking"))
;; HACK When spell-fu fails to initialize correctly, the init form for the
;; spell-fu use-package! is not called. This leaves emacs to assume that
;; certain variables are initialized when they are not. We bind what we
;; need.
(unless (boundp '+spell-correct-interface)
(+spell-defun-correct-interface))
(ispell-set-spellchecker-params)
(save-current-buffer
(ispell-accept-buffer-local-defs))