[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: address@hidden: flyspell bug]
From: |
martin rudalics |
Subject: |
Re: address@hidden: flyspell bug] |
Date: |
Sat, 21 Oct 2006 15:47:58 +0200 |
User-agent: |
Mozilla Thunderbird 1.0 (Windows/20041206) |
The recent incorporation into flyspell-large-region of checking for
duplicated words has led to the following bug:
If a large region contains text of the form:
x$ $y
or of the form
x# #y
(where x and y may be any words and there may be multiple white spaces
between the $'s or #'s),
then flyspell-large-region makes Emacs hanging (i.e. I have to press
Ctrl-g to make Emacs running again).
I regard the following as a flyspell bug, too: If duplicated words are
separated by more than one white space, then they are not detected.
The attached patch tries to address these issues. Please make sure that it
doesn't break anything else.
*** flyspell.el Sat Oct 21 11:36:32 2006
--- flyspell.el Sat Oct 21 15:44:44 2006
***************
*** 1011,1021 ****
(not (memq (char-after (1- start)) '(?\} ?\\)))))
flyspell-mark-duplications-flag
(save-excursion
! (goto-char (1- start))
! (let ((p (flyspell-word-search-backward
! word
! (- start (1+ (- end start))))))
! (and p (/= p (1- start))))))
;; yes, this is a doublon
(flyspell-highlight-incorrect-region start end 'doublon)
nil)
--- 1011,1022 ----
(not (memq (char-after (1- start)) '(?\} ?\\)))))
flyspell-mark-duplications-flag
(save-excursion
! (goto-char start)
! (let* ((bound
! (- start (- end start) (- (skip-chars-backward "
\t\n\f"))))
! (p (when (>= bound (point-min))
! (flyspell-word-search-backward word bound))))
! (and p (/= p start)))))
;; yes, this is a doublon
(flyspell-highlight-incorrect-region start end 'doublon)
nil)
***************
*** 1472,1478 ****
(flyspell-word) ; Make sure current word is checked
(backward-word 1)
(while (and (< (point) end)
! (re-search-forward "\\b\\([^ \n\t]+\\)[ \n\t]+\\1\\b"
end 'move))
(flyspell-word)
(backward-word 1))
--- 1473,1479 ----
(flyspell-word) ; Make sure current word is checked
(backward-word 1)
(while (and (< (point) end)
! (re-search-forward "\\(\\w+\\)\\s-+\\1\\>"
end 'move))
(flyspell-word)
(backward-word 1))
***************
*** 1708,1714 ****
;; now we can use a new overlay
(setq flyspell-overlay
(make-flyspell-overlay
! beg end 'flyspell-incorrect 'highlight)))))))
;;*---------------------------------------------------------------------*/
;;* flyspell-highlight-duplicate-region ... */
--- 1709,1717 ----
;; now we can use a new overlay
(setq flyspell-overlay
(make-flyspell-overlay
! beg end
! (if (eq poss 'doublon) 'flyspell-duplicate
'flyspell-incorrect)
! 'highlight)))))))
;;*---------------------------------------------------------------------*/
;;* flyspell-highlight-duplicate-region ... */