]> git.eshelyaron.com Git - emacs.git/commitdiff
lisp/subr.el: Rework previous change.
authorJuanma Barranquero <lekktu@gmail.com>
Mon, 23 Jan 2012 02:10:36 +0000 (03:10 +0100)
committerJuanma Barranquero <lekktu@gmail.com>
Mon, 23 Jan 2012 02:10:36 +0000 (03:10 +0100)
* lisp/subr.el (display-delayed-warnings): Doc fix.
  (collapse-delayed-warnings): New function to collapse identical
  adjacent warnings.
  (delayed-warnings-hook): Add it.

lisp/ChangeLog
lisp/subr.el

index ff2b4b5f226b4badcd021e010f4c73a5933c4401..96c187147091b7e8da83873f50f95b755137992b 100644 (file)
@@ -1,7 +1,9 @@
 2012-01-23  Juanma Barranquero  <lekktu@gmail.com>
 
-       * subr.el (display-delayed-warnings):
-       Collapse identical adjacent messages.
+       * subr.el (display-delayed-warnings): Doc fix.
+       (collapse-delayed-warnings): New function to collapse identical
+       adjacent warnings.
+       (delayed-warnings-hook): Add it.
 
 2012-01-22  Michael Albinus  <michael.albinus@gmx.de>
 
index da11b7e982a560f32da9cb1169283d27f6a3aee7..c9e213c86a08ea817f9c5679e0ceb8bff70af6aa 100644 (file)
@@ -1857,23 +1857,30 @@ FILE should be the name of a library, with no directory name."
 
 (defun display-delayed-warnings ()
   "Display delayed warnings from `delayed-warnings-list'.
-Collapse identical adjacent messages into one (plus count).
-This is the default value of `delayed-warnings-hook'."
+Used from `delayed-warnings-hook' (which see)."
+  (dolist (warning (nreverse delayed-warnings-list))
+    (apply 'display-warning warning))
+  (setq delayed-warnings-list nil))
+
+(defun collapse-delayed-warnings ()
+  "Remove duplicates from `delayed-warnings-list'.
+Collapse identical adjacent warnings into one (plus count).
+Used from `delayed-warnings-hook' (which see)."
   (let ((count 1)
-        (warnings (nreverse delayed-warnings-list))
-        warning)
-    (while warnings
-      (setq warning (pop warnings))
-      (if (equal warning (car warnings))
+        collapsed warning)
+    (while delayed-warnings-list
+      (setq warning (pop delayed-warnings-list))
+      (if (equal warning (car delayed-warnings-list))
           (setq count (1+ count))
         (when (> count 1)
           (setcdr warning (cons (format "%s [%d times]" (cadr warning) count)
                                 (cddr warning)))
           (setq count 1))
-        (apply 'display-warning warning))))
-  (setq delayed-warnings-list nil))
+        (push warning collapsed)))
+    (setq delayed-warnings-list (nreverse collapsed))))
 
-(defvar delayed-warnings-hook '(display-delayed-warnings)
+(defvar delayed-warnings-hook '(collapse-delayed-warnings
+                                display-delayed-warnings)
   "Normal hook run to process delayed warnings.
 Functions in this hook should access the `delayed-warnings-list'
 variable (which see) and remove from it the warnings they process.")