Function: gnus-summary-recenter
gnus-summary-recenter is an interactive and byte-compiled function
defined in gnus-sum.el.gz.
Signature
(gnus-summary-recenter)
Documentation
Center point in the summary window.
If gnus-auto-center-summary is nil, or the article buffer isn't
displayed, no centering will be performed.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-summary-recenter ()
"Center point in the summary window.
If `gnus-auto-center-summary' is nil, or the article buffer isn't
displayed, no centering will be performed."
;; Suggested by earle@mahendo.JPL.NASA.GOV (Greg Earle).
;; Recenter only when requested. Suggested by popovich@park.cs.columbia.edu.
(interactive nil gnus-summary-mode)
;; The user has to want it.
(when gnus-auto-center-summary
(let* ((top (cond ((< (window-height) 4) 0)
((< (window-height) 7) 1)
(t (if (numberp gnus-auto-center-summary)
gnus-auto-center-summary
(/ (1- (window-height)) 2)))))
(height (1- (window-height)))
(bottom (save-excursion
(goto-char (point-max))
(gnus-forward-line-ignore-invisible (- height))
(point)))
(window (get-buffer-window (current-buffer))))
(when (get-buffer-window gnus-article-buffer)
;; Only do recentering when the article buffer is displayed,
;; Set the window start to either `bottom', which is the biggest
;; possible valid number, or the second line from the top,
;; whichever is the least.
(let ((top-pos (save-excursion
(gnus-forward-line-ignore-invisible (- top))
(point))))
(if (> bottom top-pos)
;; Keep the second line from the top visible
(set-window-start window top-pos)
;; Try to keep the bottom line visible; if it's partially
;; obscured, either scroll one more line to make it fully
;; visible, or revert to using TOP-POS.
(save-excursion
(goto-char (point-max))
(gnus-forward-line-ignore-invisible -1)
(let ((last-line-start (point)))
(goto-char bottom)
(set-window-start window (point) t)
(when (not (pos-visible-in-window-p last-line-start window))
(gnus-forward-line-ignore-invisible 1)
(set-window-start window (min (point) top-pos) t)))))))
;; Do horizontal recentering while we're at it.
(when (and (get-buffer-window (current-buffer) t)
(not (eq gnus-auto-center-summary 'vertical)))
(let ((selected (selected-window)))
(select-window (get-buffer-window (current-buffer) t))
(gnus-summary-position-point)
(gnus-horizontal-recenter)
(select-window selected))))))