(font-lock-fontify-keywords-region): Use a marker
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 11 May 2005 15:55:16 +0000 (15:55 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 11 May 2005 15:55:16 +0000 (15:55 +0000)
when trying to ensure forward progress.

lisp/ChangeLog
lisp/font-lock.el

index c483fef..1ff0eda 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * font-lock.el (font-lock-fontify-keywords-region): Use a marker
+       when trying to ensure forward progress.
+
 2005-05-11  Chong Yidong  <cyd@stupidchicken.com>
 
        * mouse-sel.el (mouse-sel-follow-link-p): New function.
@@ -18,8 +23,8 @@
        (ada-mode): Add ada-adjust-case-skeleton to skeleton-end-hook.
 
        * progmodes/ada-stmt.el (ada-adjust-case-skeleton):
-       Moved to ada-mode.el.
-       (ada-stmt-mode-hook): Deleted; do the work in ada-mode.
+       Move to ada-mode.el.
+       (ada-stmt-mode-hook): Delete; do the work in ada-mode.
 
        * cus-edit.el (custom-file): Call file-chase-links.
 
index d2ffdf4..bd0af57 100644 (file)
@@ -1420,6 +1420,7 @@ LOUDLY, if non-nil, allows progress-meter bar."
   (let ((case-fold-search font-lock-keywords-case-fold-search)
        (keywords (cddr font-lock-keywords))
        (bufname (buffer-name)) (count 0)
+        (pos (make-marker))
        keyword matcher highlights)
     ;;
     ;; Fontify each item in `font-lock-keywords' from `start' to `end'.
@@ -1454,12 +1455,14 @@ LOUDLY, if non-nil, allows progress-meter bar."
        (while highlights
          (if (numberp (car (car highlights)))
              (font-lock-apply-highlight (car highlights))
-           (let ((pos (point)))
-             (font-lock-fontify-anchored-keywords (car highlights) end)
-             ;; Ensure forward progress.
-             (if (< (point) pos) (goto-char pos))))
+           (set-marker pos (point))
+            (font-lock-fontify-anchored-keywords (car highlights) end)
+            ;; Ensure forward progress.  `pos' is a marker because anchored
+            ;; keyword may add/delete text (this happens e.g. in grep.el).
+            (if (< (point) pos) (goto-char pos)))
          (setq highlights (cdr highlights))))
-      (setq keywords (cdr keywords)))))
+      (setq keywords (cdr keywords)))
+    (set-marker pos nil)))
 
 ;;; End of Keyword regexp fontification functions.
 \f