Function: erc-unique-channel-names
erc-unique-channel-names is a byte-compiled function defined in
erc-track.el.gz.
Signature
(erc-unique-channel-names ALL ACTIVE &optional PREDICATE START)
Documentation
Return a list of unique channel names.
ALL is the list of all channel and query buffer names.
ACTIVE is the list of active buffer names.
PREDICATE is a predicate that should return non-nil if a name needs
no shortening.
START is the minimum length of the name used.
Source Code
;; Defined in /usr/src/emacs/lisp/erc/erc-track.el.gz
(defun erc-unique-channel-names (all active &optional predicate start)
"Return a list of unique channel names.
ALL is the list of all channel and query buffer names.
ACTIVE is the list of active buffer names.
PREDICATE is a predicate that should return non-nil if a name needs
no shortening.
START is the minimum length of the name used."
(if (eq 'max erc-track-shorten-aggressively)
;; Return the unique substrings of all active channels.
(erc-unique-substrings active predicate start)
;; Otherwise, determine the unique substrings of all channels, and
;; for every active channel, return the corresponding substring.
;; Given the names of the active channels, we now need to find the
;; corresponding short name from the list of all substrings. To
;; avoid problems when there are two channels and one is a
;; substring of the other (notorious examples are #hurd and
;; #hurd-bunny), every candidate gets the longest possible
;; substring.
(let ((all-substrings (sort
(erc-unique-substrings all predicate start)
(lambda (a b) (> (length a) (length b)))))
result)
(dolist (channel active)
(let ((substrings all-substrings)
candidate
winner)
(while (and substrings (not winner))
(setq candidate (car substrings)
substrings (cdr substrings))
(when (and (string= candidate
(substring channel
0
(min (length candidate)
(length channel))))
(not (member candidate result)))
(setq winner candidate)))
(setq result (cons winner result))))
(nreverse result))))