changeset 72857:6cd2742162f9

(flyspell-word, flyspell-correct-word) (flyspell-auto-correct-word): Make ispell-filter local to these functions. Check that ispell-filter has new stuff before calling ispell-parse-output.
author Richard M. Stallman <rms@gnu.org>
date Thu, 14 Sep 2006 01:19:38 +0000
parents 6538342aa433
children a9629d84bf9f
files lisp/textmodes/flyspell.el
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/flyspell.el	Wed Sep 13 22:40:52 2006 +0000
+++ b/lisp/textmodes/flyspell.el	Thu Sep 14 01:19:38 2006 +0000
@@ -992,7 +992,7 @@
     (flyspell-accept-buffer-local-defs)
     (let* ((cursor-location (point))
            (flyspell-word (flyspell-get-word following))
-           start end poss word)
+           start end poss word ispell-filter)
       (if (or (eq flyspell-word nil)
  	      (and (fboundp flyspell-generic-check-word-predicate)
  		   (not (funcall flyspell-generic-check-word-predicate))))
@@ -1050,7 +1050,12 @@
 		       (not (string= "" (car ispell-filter))))))
 	    ;; (ispell-send-string "!\n")
 	    ;; back to terse mode.
+	    ;; Remove leading empty element
 	    (setq ispell-filter (cdr ispell-filter))
+	    ;; ispell process should return something after word is sent.
+	    ;; Tag word as valid (i.e., skip) otherwise
+	    (or ispell-filter
+		(setq ispell-filter '(*)))
 	    (if (consp ispell-filter)
 		(setq poss (ispell-parse-output (car ispell-filter))))
 	    (let ((res (cond ((eq poss t)
@@ -1830,7 +1835,7 @@
 	    (let ((start (car (cdr word)))
 		  (end (car (cdr (cdr word))))
 		  (word (car word))
-		  poss)
+		  poss ispell-filter)
 	      (setq flyspell-auto-correct-word word)
 	      ;; now check spelling of word.
 	      (ispell-send-string "%\n") ;put in verbose mode
@@ -1839,7 +1844,12 @@
               (while (progn
                        (accept-process-output ispell-process)
                        (not (string= "" (car ispell-filter)))))
+	      ;; Remove leading empty element
 	      (setq ispell-filter (cdr ispell-filter))
+	      ;; ispell process should return something after word is sent.
+	      ;; Tag word as valid (i.e., skip) otherwise
+	      (or ispell-filter
+		  (setq ispell-filter '(*)))
 	      (if (consp ispell-filter)
 		  (setq poss (ispell-parse-output (car ispell-filter))))
 	      (cond
@@ -1980,7 +1990,7 @@
 	  (let ((start (car (cdr word)))
 		(end (car (cdr (cdr word))))
 		(word (car word))
-		poss)
+		poss ispell-filter)
 	    ;; now check spelling of word.
 	    (ispell-send-string "%\n") ;put in verbose mode
 	    (ispell-send-string (concat "^" word "\n"))
@@ -1988,7 +1998,12 @@
             (while (progn
                      (accept-process-output ispell-process)
                      (not (string= "" (car ispell-filter)))))
+	    ;; Remove leading empty element
 	    (setq ispell-filter (cdr ispell-filter))
+	    ;; ispell process should return something after word is sent.
+	    ;; Tag word as valid (i.e., skip) otherwise
+	    (or ispell-filter
+		(setq ispell-filter '(*)))
 	    (if (consp ispell-filter)
 		(setq poss (ispell-parse-output (car ispell-filter))))
 	    (cond