Function: erc-track-modified-channels
erc-track-modified-channels is a byte-compiled function defined in
erc-track.el.gz.
Signature
(erc-track-modified-channels)
Documentation
Hook function for erc-insert-post-hook.
Check if the current buffer should be added to the mode line as a
hidden, modified channel. Assumes it will only be called when
the current buffer is in erc-mode.
Source Code
;; Defined in /usr/src/emacs/lisp/erc/erc-track.el.gz
(defun erc-track-modified-channels ()
"Hook function for `erc-insert-post-hook'.
Check if the current buffer should be added to the mode line as a
hidden, modified channel. Assumes it will only be called when
the current buffer is in `erc-mode'."
(let ((this-channel (or (erc-default-target)
(buffer-name (current-buffer)))))
(if (and (not (erc-buffer-visible (current-buffer)))
(not (member this-channel erc-track-exclude))
(not (and erc-track-exclude-server-buffer
(erc-server-buffer-p)))
(not (erc-message-type-member
(or (erc-find-parsed-property)
(point-min))
erc-track-exclude-types)))
;; If the active buffer is not visible (not shown in a
;; window), and not to be excluded, determine the kinds of
;; faces used in the current message, and unless the user
;; wants to ignore changes in certain channels where there
;; are no faces corresponding to `erc-track-faces-priority-list',
;; and the faces in the current message are found in said
;; priority list, add the buffer to the erc-modified-channels-alist,
;; if it is not already there. If the buffer is already on the list
;; (in the car), change its face attribute (in the cddr) if
;; necessary. See `erc-modified-channels-alist' for the
;; exact data structure used.
(let ((faces (erc-faces-in (buffer-string))))
(unless (and
(or (eq erc-track-priority-faces-only 'all)
(member this-channel erc-track-priority-faces-only))
(not (catch 'found
(dolist (f faces)
(when (member f erc-track-faces-priority-list)
(throw 'found t))))))
(if (not (assq (current-buffer) erc-modified-channels-alist))
;; Add buffer, faces and counts
(setq erc-modified-channels-alist
(cons (cons (current-buffer)
(cons
1 (erc-track-select-mode-line-face
nil faces)))
erc-modified-channels-alist))
;; Else modify the face for the buffer, if necessary.
(when faces
(let* ((cell (assq (current-buffer)
erc-modified-channels-alist))
(old-face (cddr cell))
(new-face (erc-track-select-mode-line-face
old-face faces)))
(setcdr cell (cons (1+ (cadr cell)) new-face)))))
;; And display it
(erc-modified-channels-display)))
;; Else if the active buffer is the current buffer, remove it
;; from our list.
(when (and (or (erc-buffer-visible (current-buffer))
(and this-channel
(member this-channel erc-track-exclude)))
(assq (current-buffer) erc-modified-channels-alist))
;; Remove it from mode-line if buffer is visible or
;; channel was added to erc-track-exclude recently.
(erc-modified-channels-remove-buffer (current-buffer))
(erc-modified-channels-display)))))