Function: gnus-set-mode-line
gnus-set-mode-line is a byte-compiled function defined in
gnus-sum.el.gz.
Signature
(gnus-set-mode-line WHERE)
Documentation
Set the mode line of the article or summary buffers.
If WHERE is summary, the summary mode line format will be used.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-set-mode-line (where)
"Set the mode line of the article or summary buffers.
If WHERE is `summary', the summary mode line format will be used."
;; Is this mode line one we keep updated?
(when (and (memq where gnus-updated-mode-lines)
(symbol-value
(intern (format "gnus-%s-mode-line-format-spec" where))))
(let (mode-string)
;; We evaluate this in the summary buffer since these
;; variables are buffer-local to that buffer.
(with-current-buffer gnus-summary-buffer
;; We bind all these variables that are used in the `eval' form
;; below.
(let* ((mformat (symbol-value
(intern
(format "gnus-%s-mode-line-format-spec" where))))
(gnus-tmp-group-name (gnus-mode-string-quote
gnus-newsgroup-name))
(gnus-tmp-article-number (or gnus-current-article 0))
(gnus-tmp-unread gnus-newsgroup-unreads)
(gnus-tmp-unread-and-unticked (length gnus-newsgroup-unreads))
(gnus-tmp-unselected (length gnus-newsgroup-unselected))
(gnus-tmp-unread-and-unselected
(cond ((and (zerop gnus-tmp-unread-and-unticked)
(zerop gnus-tmp-unselected))
"")
((zerop gnus-tmp-unselected)
(format "{%d more}" gnus-tmp-unread-and-unticked))
(t (format "{%d(+%d) more}"
gnus-tmp-unread-and-unticked
gnus-tmp-unselected))))
(gnus-tmp-subject
(if (and gnus-current-headers
(mail-header-p gnus-current-headers))
(gnus-mode-string-quote
(mail-header-subject gnus-current-headers))
""))
bufname-length max-len
gnus-tmp-header) ;; passed as argument to any user-format-funcs
(setq mode-string (eval mformat t))
(setq bufname-length (if (string-match "%b" mode-string)
(- (length
(buffer-name
(if (eq where 'summary)
nil
(get-buffer gnus-article-buffer))))
2)
0))
(setq max-len (max 4 (if gnus-mode-non-string-length
(- (window-width)
gnus-mode-non-string-length
bufname-length)
(length mode-string))))
;; We might have to chop a bit of the string off...
(when (> (length mode-string) max-len)
(setq mode-string
(truncate-string-to-width
mode-string (- max-len 3) nil nil t)))))
;; Update the mode line.
(setq mode-line-buffer-identification
(gnus-mode-line-buffer-identification
(list (propertize mode-string
'face 'mode-line-buffer-id))))
(set-buffer-modified-p t))))