[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs, Flyspell, and "blocking call to accept-process-outp

From: Benjamin Slade
Subject: Re: Emacs, Flyspell, and "blocking call to accept-process-output with quit inhibited!!"
Date: Tue, 11 Oct 2011 18:10:57 -0500

Hi Stefan,

When I try to apply the patch you provided, I get error messages ("Hunk #1 FAILED at 931. Hunk #2 FAILED at 946. Hunk #3 FAILED at 960. Hunk #4 FAILED at 973. Hunk #5 FAILED at 1100."). I'm not sure why.

Could you send me the patched flyspell.el file directly?

Dr Benjamin Slade <address@hidden>
Dept. of Linguistics & TESOL - University of Texas at Arlington                

132E Hammond Hall | Office Hours: tba

Stæfcræft & Vyākaraṇa (lingblog) - http://staefcraeft.blogspot.com
The Babbage Files (techblog) - http://babbagefiles.blogspot.com
Ongietan sceal gleaw hæle         hu gæstlic bið,
þonne ealre þisse worulde wela   weste stondeð.
                                                     --The Wanderer, ll. 73-4.

On 14 September 2011 14:15, Stefan Monnier <address@hidden> wrote:
> Using Emacs with the flyspell package generates a (constantly
> repeating and annoying) message "blocking call to accept-process-output with
> quit inhibited!!". It doesn't actually seem to "block" anything as flyspell
> still functions as expected, but it's annoying.

The message simply indicates that the code waits for some external event
(in this case answer from ispell) while quit is inhibited, which implies
that if ispell decides to take its time, Emacs will hang.
I.e. it indicates of a latent bug in flyspell.el.

> Or something which can be fixed/hacked in Flyspell?

Can you try the patch below?


=== modified file 'lisp/textmodes/flyspell.el'
--- lisp/textmodes/flyspell.el  2011-09-11 02:14:10 +0000
+++ lisp/textmodes/flyspell.el  2011-09-14 19:14:21 +0000
@@ -931,9 +931,10 @@
 ;;*       previous word nor the current word                            */
 (defun flyspell-post-command-hook ()
-  "The `post-command-hook' used by flyspell to check a word in-the-fly."
+  "The `post-command-hook' used by flyspell to check a word on-the-fly."
  (when flyspell-mode
+    (with-local-quit
    (let ((command this-command)
         ;; Prevent anything we do from affecting the mark.
@@ -946,6 +947,7 @@
      (if (flyspell-check-word-p)
+              ;; FIXME: This should be asynchronous!
           ;; we remember which word we have just checked.
           ;; this will be used next time we will check a word
@@ -960,7 +962,8 @@
         (setq flyspell-pre-pre-point  nil)
         ;; when a word is not checked because of a delayed command
         ;; we do not disable the ispell cache.
-         (if (and (symbolp this-command) (get this-command 'flyspell-delayed))
+            (if (and (symbolp this-command)
+                     (get this-command 'flyspell-delayed))
               (setq flyspell-word-cache-end -1)
               (setq flyspell-word-cache-result '_)))))
@@ -973,7 +976,7 @@
               (goto-char start)
         (setq flyspell-changes (cdr flyspell-changes))))
-      (setq flyspell-previous-command command))))
+        (setq flyspell-previous-command command)))))

 ;;*    flyspell-notify-misspell ...                                     */
@@ -1100,14 +1103,10 @@
                  ;; we mark the ispell process so it can be killed
                  ;; when emacs is exited without query
                  (set-process-query-on-exit-flag ispell-process nil)
-                  ;; Wait until ispell has processed word.  Since this
-                  ;; code is often executed from post-command-hook but
-                  ;; the ispell process may not be responsive, it's
-                  ;; important to make sure we re-enable C-g.
-                  (with-local-quit
+                  ;; Wait until ispell has processed word.
                    (while (progn
                             (accept-process-output ispell-process)
-                             (not (string= "" (car ispell-filter))))))
+                           (not (string= "" (car ispell-filter)))))
                  ;; (ispell-send-string "!\n")
                  ;; back to terse mode.
                  ;; Remove leading empty element


reply via email to

[Prev in Thread] Current Thread [Next in Thread]