If I understand your question correctly this should solve it. The add-false-postive command jumps back to the previous error, adds it to the dict, cleans up and jumps back.
(defun goto-previous-spelling-error () "Go to previous spelling error." (interactive) (push-mark (point) t nil) (let ((pos (point)) (min (point-min))) (while (and (> pos min) (let ((ovs (overlays-at pos)) (r '())) (while (and (not r) (consp ovs)) (if (flyspell-overlay-p (car ovs)) (setq r t) (setq ovs (cdr ovs)))) (not r))) (backward-word 1) (setq pos (point))) (goto-char pos))) (defun add-false-postive () "Add previous false positive to dict" (interactive) (goto-previous-spelling-error) (let* ((flyspell-info (flyspell-get-word)) (word (car flyspell-info)) (bounds (cdr flyspell-info))) (flyspell-do-correct 'save nil word (point) (car bounds) (cadr bounds) (point)) (flyspell-delete-region-overlays (car bounds) (cadr bounds)) (exchange-point-and-mark) (deactivate-mark))