From 38353b99f3288a0c98159ba9f3c0171897aca08e Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 24 Sep 2014 13:31:59 -0400 Subject: [PATCH] * lisp/erc/erc-track.el (erc-modified-channels-display): Update all mode lines if needed. Remove call to erc-modified-channels-object where we ignored the return value. (erc-modified-channels-update): Don't force-mode-line-update here any more. Fixes: debbugs:18510 --- lisp/erc/ChangeLog | 7 ++++ lisp/erc/erc-track.el | 79 ++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 6d99fdf73d9..b3cdb067d13 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,10 @@ +2014-09-24 Stefan Monnier + + * erc-track.el (erc-modified-channels-display): Update all mode lines + if needed (bug#18510). Remove call to erc-modified-channels-object + where we ignored the return value. + (erc-modified-channels-update): Don't force-mode-line-update here any more. + 2014-02-25 Julien Danjou * erc-networks.el (erc-determine-network): Check that NETWORK as a diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el index 3f7b6a7b501..706cce2fefe 100644 --- a/lisp/erc/erc-track.el +++ b/lisp/erc/erc-track.el @@ -767,8 +767,7 @@ ARGS are ignored." (erc-modified-channels-remove-buffer buffer)))) erc-modified-channels-alist) (when removed-channel - (erc-modified-channels-display) - (force-mode-line-update t))) + (erc-modified-channels-display))) (remove-hook 'post-command-hook 'erc-modified-channels-update))) (defvar erc-track-mouse-face (if (featurep 'xemacs) @@ -825,43 +824,45 @@ Use `erc-make-mode-line-buffer-name' to create buttons." ((eq 'importance erc-track-switch-direction) (erc-track-sort-by-importance))) (run-hooks 'erc-track-list-changed-hook) - (unless (eq erc-track-position-in-mode-line nil) - (if (null erc-modified-channels-alist) - (setq erc-modified-channels-object (erc-modified-channels-object nil)) - ;; erc-modified-channels-alist contains all the data we need. To - ;; better understand what is going on, we split things up into - ;; four lists: BUFFERS, COUNTS, SHORT-NAMES, and FACES. These - ;; four lists we use to create a new - ;; `erc-modified-channels-object' using - ;; `erc-make-mode-line-buffer-name'. - (let* ((buffers (mapcar 'car erc-modified-channels-alist)) - (counts (mapcar 'cadr erc-modified-channels-alist)) - (faces (mapcar 'cddr erc-modified-channels-alist)) - (long-names (mapcar #'(lambda (buf) - (or (buffer-name buf) - "")) - buffers)) - (short-names (if (functionp erc-track-shorten-function) - (funcall erc-track-shorten-function - long-names) - long-names)) - strings) - (while buffers - (when (car short-names) - (setq strings (cons (erc-make-mode-line-buffer-name - (car short-names) - (car buffers) - (car faces) - (car counts)) - strings))) - (setq short-names (cdr short-names) - buffers (cdr buffers) - counts (cdr counts) - faces (cdr faces))) - (when (featurep 'xemacs) - (erc-modified-channels-object nil)) - (setq erc-modified-channels-object - (erc-modified-channels-object strings)))))) + (when erc-track-position-in-mode-line + (let* ((oldobject erc-modified-channels-object) + (strings + (when erc-modified-channels-alist + ;; erc-modified-channels-alist contains all the data we need. To + ;; better understand what is going on, we split things up into + ;; four lists: BUFFERS, COUNTS, SHORT-NAMES, and FACES. These + ;; four lists we use to create a new + ;; `erc-modified-channels-object' using + ;; `erc-make-mode-line-buffer-name'. + (let* ((buffers (mapcar 'car erc-modified-channels-alist)) + (counts (mapcar 'cadr erc-modified-channels-alist)) + (faces (mapcar 'cddr erc-modified-channels-alist)) + (long-names (mapcar #'(lambda (buf) + (or (buffer-name buf) + "")) + buffers)) + (short-names (if (functionp erc-track-shorten-function) + (funcall erc-track-shorten-function + long-names) + long-names)) + strings) + (while buffers + (when (car short-names) + (setq strings (cons (erc-make-mode-line-buffer-name + (car short-names) + (car buffers) + (car faces) + (car counts)) + strings))) + (setq short-names (cdr short-names) + buffers (cdr buffers) + counts (cdr counts) + faces (cdr faces))) + strings))) + (newobject (erc-modified-channels-object strings))) + (unless (equal oldobject newobject) + (setq erc-modified-channels-object newobject) + (force-mode-line-update t))))) (defun erc-modified-channels-remove-buffer (buffer) "Remove BUFFER from `erc-modified-channels-alist'." -- 2.39.2