;;*---------------------------------------------------------------------*/
;;* flyspell-goto-next-error ... */
;;*---------------------------------------------------------------------*/
-(defun flyspell-goto-next-error ()
- "Go to the next previously detected error.
+(defun flyspell-goto-next-error (&optional previous)
+ "Go to the next error.
+If PREVIOUS (interactively, the prefix), go to the previous error
+instead.
+
In general FLYSPELL-GOTO-NEXT-ERROR must be used after
FLYSPELL-BUFFER."
- (interactive)
+ (interactive "P")
(let ((pos (point))
- (max (point-max)))
- (if (and (eq (current-buffer) flyspell-old-buffer-error)
- (eq pos flyspell-old-pos-error))
- (progn
- (if (= flyspell-old-pos-error max)
- ;; goto beginning of buffer
+ (max (if previous (point-min) (point-max))))
+ (when (and (eq (current-buffer) flyspell-old-buffer-error)
+ (eq pos flyspell-old-pos-error))
+ (if previous
+ (if (= flyspell-old-pos-error max)
(progn
- (message "Restarting from beginning of buffer")
- (goto-char (point-min)))
- (forward-word 1))
- (setq pos (point))))
- ;; seek the next error
- (while (and (< pos max)
+ (message "Restarting from end of the buffer")
+ (goto-char (point-max)))
+ (forward-word -1))
+ (if (= flyspell-old-pos-error max)
+ (progn
+ (message "Restarting from beginning of buffer")
+ (goto-char (point-min)))
+ (forward-word 1)))
+ (setq pos (point)))
+ ;; Seek the next error.
+ (while (and (/= pos max)
(let ((ovs (overlays-at pos))
(r '()))
(while (and (not r) (consp ovs))
(setq r t)
(setq ovs (cdr ovs))))
(not r)))
- (setq pos (1+ pos)))
- ;; save the current location for next invocation
- (setq flyspell-old-pos-error pos)
- (setq flyspell-old-buffer-error (current-buffer))
+ (setq pos (if previous (1- pos) (1+ pos))))
(goto-char pos)
- (if (= pos max)
- (message "No more miss-spelled word!"))))
+ (when previous
+ (forward-word -1))
+ ;; Save the current location for next invocation.
+ (setq flyspell-old-pos-error (point))
+ (setq flyspell-old-buffer-error (current-buffer))
+ (when (= (point) max)
+ (message "No more miss-spelled words"))))
;;*---------------------------------------------------------------------*/
;;* flyspell-overlay-p ... */