From: Stefan Monnier Date: Wed, 12 Oct 2011 02:48:40 +0000 (-0400) Subject: * lisp/textmodes/flyspell.el (flyspell-word): Move with-local-quit from here... X-Git-Tag: emacs-pretest-24.0.91~148 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e1b0b23a7d46f4eacb8f8ed9d540742cb61eeb7b;p=emacs.git * lisp/textmodes/flyspell.el (flyspell-word): Move with-local-quit from here... (flyspell-post-command-hook): ...to here. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a4cb9dfd5de..58a038676e7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-10-12 Stefan Monnier + + * textmodes/flyspell.el (flyspell-word): Move with-local-quit + from here... + (flyspell-post-command-hook): ...to here. + 2011-10-11 Stefan Monnier * mail/sendmail.el (send-mail-function): Don't use sendmail-query-once diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 4eb4efc3766..c2af3f7be84 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -931,49 +931,52 @@ Mostly we check word delimiters." ;;* 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." (interactive) (when flyspell-mode - (let ((command this-command) - ;; Prevent anything we do from affecting the mark. - deactivate-mark) - (if (flyspell-check-pre-word-p) - (with-current-buffer flyspell-pre-buffer - '(flyspell-debug-signal-pre-word-checked) - (save-excursion - (goto-char flyspell-pre-point) - (flyspell-word)))) - (if (flyspell-check-word-p) - (progn - '(flyspell-debug-signal-word-checked) - (flyspell-word) - ;; we remember which word we have just checked. - ;; this will be used next time we will check a word - ;; to compare the next current word with the word - ;; that as been registered in the pre-command-hook - ;; that is these variables are used within the predicate - ;; FLYSPELL-CHECK-PRE-WORD-P - (setq flyspell-pre-pre-buffer (current-buffer)) - (setq flyspell-pre-pre-point (point))) - (progn - (setq flyspell-pre-pre-buffer nil) - (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)) - (progn - (setq flyspell-word-cache-end -1) - (setq flyspell-word-cache-result '_))))) - (while (and (not (input-pending-p)) (consp flyspell-changes)) - (let ((start (car (car flyspell-changes))) - (stop (cdr (car flyspell-changes)))) - (if (flyspell-check-changed-word-p start stop) - (save-excursion - '(flyspell-debug-signal-changed-checked) - (goto-char start) - (flyspell-word))) - (setq flyspell-changes (cdr flyspell-changes)))) - (setq flyspell-previous-command command)))) + (with-local-quit + (let ((command this-command) + ;; Prevent anything we do from affecting the mark. + deactivate-mark) + (if (flyspell-check-pre-word-p) + (with-current-buffer flyspell-pre-buffer + '(flyspell-debug-signal-pre-word-checked) + (save-excursion + (goto-char flyspell-pre-point) + (flyspell-word)))) + (if (flyspell-check-word-p) + (progn + '(flyspell-debug-signal-word-checked) + ;; FIXME: This should be asynchronous! + (flyspell-word) + ;; we remember which word we have just checked. + ;; this will be used next time we will check a word + ;; to compare the next current word with the word + ;; that as been registered in the pre-command-hook + ;; that is these variables are used within the predicate + ;; FLYSPELL-CHECK-PRE-WORD-P + (setq flyspell-pre-pre-buffer (current-buffer)) + (setq flyspell-pre-pre-point (point))) + (progn + (setq flyspell-pre-pre-buffer nil) + (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)) + (progn + (setq flyspell-word-cache-end -1) + (setq flyspell-word-cache-result '_))))) + (while (and (not (input-pending-p)) (consp flyspell-changes)) + (let ((start (car (car flyspell-changes))) + (stop (cdr (car flyspell-changes)))) + (if (flyspell-check-changed-word-p start stop) + (save-excursion + '(flyspell-debug-signal-changed-checked) + (goto-char start) + (flyspell-word))) + (setq flyspell-changes (cdr flyspell-changes)))) + (setq flyspell-previous-command command))))) ;;*---------------------------------------------------------------------*/ ;;* flyspell-notify-misspell ... */ @@ -1100,14 +1103,10 @@ misspelling and skips redundant spell-checking step." ;; 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 - (while (progn - (accept-process-output ispell-process) - (not (string= "" (car ispell-filter)))))) + ;; Wait until ispell has processed word. + (while (progn + (accept-process-output ispell-process) + (not (string= "" (car ispell-filter))))) ;; (ispell-send-string "!\n") ;; back to terse mode. ;; Remove leading empty element