Improvements to flyspell-mark-duplications-exceptions.
authorChong Yidong <cyd@stupidchicken.com>
Sun, 3 Apr 2011 20:59:45 +0000 (16:59 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 3 Apr 2011 20:59:45 +0000 (16:59 -0400)
* lisp/textmodes/flyspell.el (flyspell-word): Recognize default
dictionary case for flyspell-mark-duplications-exceptions.  Use
regexp matching for languages.
(flyspell-mark-duplications-exceptions): Add "that" and "had" for
default dictionary (Bug#7926).

lisp/ChangeLog
lisp/textmodes/flyspell.el

index 04353b9..fe429f6 100644 (file)
@@ -1,3 +1,11 @@
+2011-04-03  Chong Yidong  <cyd@stupidchicken.com>
+
+       * textmodes/flyspell.el (flyspell-word): Recognize default
+       dictionary case for flyspell-mark-duplications-exceptions.  Use
+       regexp matching for languages.
+       (flyspell-mark-duplications-exceptions): Add "that" and "had" for
+       default dictionary (Bug#7926).
+
 2011-04-02  Chong Yidong  <cyd@stupidchicken.com>
 
        * emacs-lisp/package.el (package--with-work-buffer): Recognize
index 3c9a457..99c9a83 100644 (file)
@@ -71,13 +71,23 @@ Detection of repeated words is not implemented in
   :type 'boolean)
 
 (defcustom flyspell-mark-duplications-exceptions
-  '(("francais" . ("nous" "vous")))
+  '((nil . ("that" "had")) ; Common defaults for English.
+    ("\\`francais" . ("nous" "vous")))
   "A list of exceptions for duplicated words.
-It should be a list of (LANGUAGE . EXCEPTION-LIST).  LANGUAGE is matched
-against the current dictionary and EXCEPTION-LIST is a list of strings.
-The duplicated word is downcased before it is compared with the exceptions."
+It should be a list of (LANGUAGE . EXCEPTION-LIST).
+
+LANGUAGE is nil, which means the exceptions apply regardless of
+the current dictionary, or a regular expression matching the
+dictionary name (`ispell-local-dictionary' or
+`ispell-dictionary') for which the exceptions should apply.
+
+EXCEPTION-LIST is a list of strings.  The checked word is
+downcased before comparing with these exceptions."
   :group 'flyspell
-  :type '(alist :key-type string :value-type (repeat string)))
+  :type '(alist :key-type (choice (const :tag "All dictionaries" nil)
+                                 string)
+               :value-type (repeat string))
+  :version "24.1")
 
 (defcustom flyspell-sort-corrections nil
   "Non-nil means, sort the corrections alphabetically before popping them."
@@ -1044,12 +1054,14 @@ misspelling and skips redundant spell-checking step."
                          (not (memq (char-after (1- start)) '(?\} ?\\)))))
                 flyspell-mark-duplications-flag
                 (not (catch 'exception
-                       (dolist (except flyspell-mark-duplications-exceptions)
-                         (and (string= (or ispell-local-dictionary
-                                           ispell-dictionary)
-                                       (car except))
-                              (member (downcase word) (cdr except))
-                              (throw 'exception t)))))
+                       (let ((dict (or ispell-local-dictionary
+                                       ispell-dictionary)))
+                         (dolist (except flyspell-mark-duplications-exceptions)
+                           (and (or (null (car except))
+                                    (and (stringp dict)
+                                         (string-match (car except) dict)))
+                                (member (downcase word) (cdr except))
+                                (throw 'exception t))))))
                 (save-excursion
                   (goto-char start)
                   (let* ((bound