From 2724d9c71e29aa0aa298c3534b0b7b18d8fc6202 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Jan 2012 03:10:36 +0100 Subject: [PATCH] lisp/subr.el: Rework previous change. * 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 | 6 ++++-- lisp/subr.el | 27 +++++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff2b4b5f226..96c18714709 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,9 @@ 2012-01-23 Juanma Barranquero - * 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 diff --git a/lisp/subr.el b/lisp/subr.el index da11b7e982a..c9e213c86a0 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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.") -- 2.39.2