Function: flyspell-auto-correct-previous-word
flyspell-auto-correct-previous-word is an interactive and
byte-compiled function defined in flyspell.el.gz.
Signature
(flyspell-auto-correct-previous-word POSITION)
Documentation
Auto correct the first misspelled word that occurs before point.
But don't look beyond what's visible on the screen.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/flyspell.el.gz
;;*---------------------------------------------------------------------*/
;;* flyspell-auto-correct-previous-word ... */
;;*---------------------------------------------------------------------*/
(defun flyspell-auto-correct-previous-word (position)
"Auto correct the first misspelled word that occurs before point.
But don't look beyond what's visible on the screen."
(interactive "d")
(let ((top (window-start))
(bot (window-end)))
(save-excursion
(save-restriction
(narrow-to-region top bot)
(overlay-recenter (point))
(add-hook 'pre-command-hook
(function flyspell-auto-correct-previous-hook) t t)
(unless flyspell-auto-correct-previous-pos
;; only reset if a new overlay exists
(setq flyspell-auto-correct-previous-pos nil)
(let ((overlay-list (overlays-in (point-min) position))
(new-overlay 'dummy-value))
;; search for previous (new) flyspell overlay
(while (and new-overlay
(or (not (flyspell-overlay-p new-overlay))
;; check if its face has changed
(not (eq (get-char-property
(overlay-start new-overlay) 'face)
'flyspell-incorrect))))
(setq new-overlay (car-safe overlay-list))
(setq overlay-list (cdr-safe overlay-list)))
;; if nothing new exits new-overlay should be nil
(if new-overlay ;; the length of the word may change so go to the start
(setq flyspell-auto-correct-previous-pos
(overlay-start new-overlay)))))
(when flyspell-auto-correct-previous-pos
(save-excursion
(goto-char flyspell-auto-correct-previous-pos)
(let ((ispell-following-word t)) ;; point is at start
(if (numberp flyspell-auto-correct-previous-pos)
(goto-char flyspell-auto-correct-previous-pos))
(flyspell-auto-correct-word))
;; the point may have moved so reset this
(setq flyspell-auto-correct-previous-pos (point))))))))