emacs-devel
[Top][All Lists]
Advanced

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

ispell highlighting


From: Juri Linkov
Subject: ispell highlighting
Date: Wed, 12 Jan 2005 03:59:09 +0200
User-agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50 (gnu/linux)

Ispell is one of the few packages for which it would be natural to
take advantage of isearch lazy highlighting.  Actually, ispell.el
already uses isearch highlighting to highlight spelling errors,
but only for XEmacs in `ispell-highlight-spelling-error-xemacs'.
(BTW, with the recent removal of arguments of `isearch-dehighlight'
in Emacs CVS the byte compiler now started to complain in
this function about missing arguments of `isearch-dehighlight'.
Is it possible to enclose this line in a conditional construct
for its compilation only in XEmacs?)

I don't know what is the best way to get this change installed.
Would maintainers of ispell.el prefer to update it on the Web page
or is it right to simply install it in Emacs CVS?

Anyway, the code below takes care of compatibility with other Emacs
versions and will use lazy highlighting only in the presence of
recently renamed lazy-highlight variables which guarantees that
the code will correctly work (together with another patch I have just
submitted and which I hope will be installed as well).

Index: lisp/textmodes/ispell.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/textmodes/ispell.el,v
retrieving revision 1.151
diff -u -r1.151 ispell.el
--- lisp/textmodes/ispell.el    22 Dec 2004 00:22:58 -0000      1.151
+++ lisp/textmodes/ispell.el    12 Jan 2005 01:01:30 -0000
@@ -237,7 +237,17 @@
   :type '(choice (const block) (const :tag "off" nil) (const :tag "on" t))
   :group 'ispell)
 
-(defcustom ispell-highlight-face 'highlight
+(defcustom ispell-lazy-highlight (boundp 'lazy-highlight-cleanup)
+  "*Controls the lazy-highlighting of spelling errors.
+When non-nil, all text in the buffer matching the current spelling
+error is highlighted lazily using isearch lazy highlighting (see
+`lazy-highlight-initial-delay' and `lazy-highlight-interval')."
+  :type 'boolean
+  :group 'lazy-highlight
+  :group 'ispell
+  :version "21.4")
+
+(defcustom ispell-highlight-face (if ispell-lazy-highlight 'isearch 'highlight)
   "*The face used for Ispell highlighting.  For Emacses with overlays.
 Possible values are `highlight', `modeline', `secondary-selection',
 `region', and `underline'.
@@ -2142,8 +2152,17 @@
   (if highlight
       (progn
        (setq ispell-overlay (make-overlay start end))
+       (overlay-put ispell-overlay 'priority 1) ;higher than lazy overlays
        (overlay-put ispell-overlay 'face ispell-highlight-face))
-    (delete-overlay ispell-overlay)))
+    (delete-overlay ispell-overlay))
+  (if (and ispell-lazy-highlight (boundp 'lazy-highlight-cleanup))
+      (if highlight
+         (let ((isearch-string (buffer-substring-no-properties start end))
+               (isearch-regexp nil)
+               (isearch-case-fold-search nil))
+           (isearch-lazy-highlight-new-loop))
+       (isearch-lazy-highlight-cleanup lazy-highlight-cleanup)
+       (setq isearch-lazy-highlight-last-string nil))))
 
 
 (defun ispell-highlight-spelling-error (start end &optional highlight refresh)

-- 
Juri Linkov
http://www.jurta.org/emacs/





reply via email to

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