emacs-devel
[Top][All Lists]
Advanced

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

Re: Ispell loads dict twice.


From: Michaël Cadilhac
Subject: Re: Ispell loads dict twice.
Date: Wed, 26 Apr 2006 23:58:15 +0200
User-agent: Gnus/5.110005 (No Gnus v0.5) Emacs/22.0.50 (gnu/linux)

Agustin Martin <address@hidden> writes:

> On Mon, Apr 24, 2006 at 09:36:40PM +0200, Michaël Cadilhac wrote:
>> $ emacs -Q
>> 
>> C-u M-x ispell-change-dictionary RET francais RET
>> C-x b test1 RET
>> M-x ispell-change-dictionary RET english RET
>> M-x ispell-buffer
>> C-x b test2 RET
>> M-x ispell-change-dictionary RET english RET
>> 
>>   The « english » dictionary will be loaded twice: on the
>>   « ispell-buffer » and on the latest « ispell-change-dictionary ».
>
> While the above problem looks rather minor

  In fact, it wasn't for me :-) I frequently switch between french and
  english dictionaries and this bug arises more than you think :-)

> your patch seems to work well here, both the above and the personal
> dict part.
> I would only suggest a very minor cosmetic change

  Thank you, I dithered about making this change in the first patch,
  as I wasn't sure that it was OK regarding to the coding style.

  Here's attached the patch modified.

Index: ChangeLog
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/ChangeLog,v
retrieving revision 1.9435
diff -c -r1.9435 ChangeLog
*** ChangeLog   23 Apr 2006 21:45:28 -0000      1.9435
--- ChangeLog   26 Apr 2006 21:55:49 -0000
***************
*** 1,3 ****
--- 1,16 ----
+ 2006-04-24  Michaël Cadilhac  <address@hidden>
+ 
+       * textmodes/ispell.el (ispell-buffer-local-dict): Add a `no-reload'
+       argument to avoid the call to `ispell-internal-change-dictionary'
+       when not needed.
+       (ispell-change-dictionary): Use this argument and call
+       `ispell-internal-change-dictionary' after the possible change
+       to `ispell-local-dictionary'.
+       (ispell-internal-change-dictionary): Check for a change in
+       personal dictionary use too.
+       Cosmetic changes thanks to Agustin Martin
+       <address@hidden>.
+ 
  2006-04-23  Michael Albinus  <address@hidden>
  
        * net/tramp.el (tramp-register-file-name-handlers): New defun.
Index: textmodes/ispell.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/textmodes/ispell.el,v
retrieving revision 1.197
diff -c -r1.197 ispell.el
*** textmodes/ispell.el 6 Apr 2006 19:20:37 -0000       1.197
--- textmodes/ispell.el 26 Apr 2006 21:55:50 -0000
***************
*** 2607,2621 ****
               (mapcar 'list (ispell-valid-dictionary-list)))
          nil t)
         current-prefix-arg))
!   (unless arg (ispell-buffer-local-dict))
    (if (equal dict "default") (setq dict nil))
    ;; This relies on completing-read's bug of returning "" for no match
    (cond ((equal dict "")
         (message "Using %s dictionary"
                  (or ispell-local-dictionary ispell-dictionary "default")))
        ((equal dict (or ispell-local-dictionary
                         ispell-dictionary "default"))
!        ;; Specified dictionary is the default already.  No-op
         (and (interactive-p)
              (message "No change, using %s dictionary" dict)))
        (t                              ; reset dictionary!
--- 2607,2624 ----
               (mapcar 'list (ispell-valid-dictionary-list)))
          nil t)
         current-prefix-arg))
!   (unless arg (ispell-buffer-local-dict 'no-reload))
    (if (equal dict "default") (setq dict nil))
    ;; This relies on completing-read's bug of returning "" for no match
    (cond ((equal dict "")
+        (ispell-internal-change-dictionary)
         (message "Using %s dictionary"
                  (or ispell-local-dictionary ispell-dictionary "default")))
        ((equal dict (or ispell-local-dictionary
                         ispell-dictionary "default"))
!        ;; Specified dictionary is the default already. Could reload
!        ;; the dictionaries if needed.
!        (ispell-internal-change-dictionary)
         (and (interactive-p)
              (message "No change, using %s dictionary" dict)))
        (t                              ; reset dictionary!
***************
*** 2634,2646 ****
                  dict))))
  
  (defun ispell-internal-change-dictionary ()
!   "Update the dictionary actually used by Ispell.
  This may kill the Ispell process; if so,
  a new one will be started when needed."
!   (let ((dict (or ispell-local-dictionary ispell-dictionary)))
!     (unless (equal ispell-current-dictionary dict)
        (ispell-kill-ispell t)
!       (setq ispell-current-dictionary dict))))
  
  ;;; Spelling of comments are checked when ispell-check-comments is non-nil.
  
--- 2637,2652 ----
                  dict))))
  
  (defun ispell-internal-change-dictionary ()
!   "Update the dictionary and the personal dictionary used by Ispell.
  This may kill the Ispell process; if so,
  a new one will be started when needed."
!   (let ((dict (or ispell-local-dictionary ispell-dictionary))
!       (pdict (or ispell-local-pdict ispell-personal-dictionary)))
!     (unless (and (equal ispell-current-dictionary dict)
!                (equal ispell-current-personal-dictionary pdict))
        (ispell-kill-ispell t)
!       (setq ispell-current-dictionary dict
!           ispell-current-personal-dictionary pdict))))
  
  ;;; Spelling of comments are checked when ispell-check-comments is non-nil.
  
***************
*** 3667,3674 ****
  
  ;;; Can kill the current ispell process
  
! (defun ispell-buffer-local-dict ()
    "Initializes local dictionary and local personal dictionary.
  When a dictionary is defined in the buffer (see variable
  `ispell-dictionary-keyword'), it will override the local setting
  from \\[ispell-change-dictionary].
--- 3673,3681 ----
  
  ;;; Can kill the current ispell process
  
! (defun ispell-buffer-local-dict (&optional no-reload)
    "Initializes local dictionary and local personal dictionary.
+ If optional NO-RELOAD is non-nil, do not make any dictionary reloading.
  When a dictionary is defined in the buffer (see variable
  `ispell-dictionary-keyword'), it will override the local setting
  from \\[ispell-change-dictionary].
***************
*** 3695,3706 ****
            (if (re-search-forward " *\\([^ \"]+\\)" end t)
                (setq ispell-local-pdict
                      (match-string-no-properties 1)))))))
!   ;; Reload if new personal dictionary defined.
!   (if (not (equal ispell-current-personal-dictionary
!                 (or ispell-local-pdict ispell-personal-dictionary)))
!       (ispell-kill-ispell t))
!   ;; Reload if new dictionary defined.
!   (ispell-internal-change-dictionary))
  
  
  (defun ispell-buffer-local-words ()
--- 3702,3710 ----
            (if (re-search-forward " *\\([^ \"]+\\)" end t)
                (setq ispell-local-pdict
                      (match-string-no-properties 1)))))))
!   (unless no-reload
!     ;; Reload if new dictionary (maybe the personal one) defined.
!     (ispell-internal-change-dictionary)))
  
  
  (defun ispell-buffer-local-words ()
-- 
 |      Michaël `Micha' Cadilhac   |   Pour les 35-40 ans, l'humour         |
 |         Epita/LRDE Promo 2007   |        c'est une plus-value.           |
 | http://www.lrde.org/~cadilh_m   |           -- Guillaume L.              |
 `--  -   JID: address@hidden --'                                   -  --'

Attachment: pgp8rZb06D92U.pgp
Description: PGP signature


reply via email to

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