Function: term-handle-scroll
term-handle-scroll is a byte-compiled function defined in term.el.gz.
Signature
(term-handle-scroll DOWN)
Source Code
;; Defined in /usr/src/emacs/lisp/term.el.gz
;; Make sure there are DOWN blank lines below the current one.
;; Return 0 if we're unable (because of PAGER handling), else return DOWN.
(defun term-handle-scroll (down)
(let ((scroll-needed
(- (+ (term-current-row) down)
(if (< down 0) term-scroll-start term-scroll-end))))
(when (or (and (< down 0) (< scroll-needed 0))
(and (> down 0) (> scroll-needed 0)))
(let ((save-point (point-marker)) (save-top))
(goto-char term-home-marker)
(cond (term-scroll-with-delete
(if (< down 0)
(progn
;; Delete scroll-needed lines at term-scroll-end,
;; then insert scroll-needed lines.
(term-vertical-motion term-scroll-end)
(end-of-line)
(setq save-top (point))
(term-vertical-motion scroll-needed)
(end-of-line)
(delete-region save-top (point))
(goto-char save-point)
(setq down (- scroll-needed down))
(term-vertical-motion down))
;; Delete scroll-needed lines at term-scroll-start.
(term-vertical-motion term-scroll-start)
(setq save-top (point))
(term-vertical-motion scroll-needed)
(delete-region save-top (point))
(goto-char save-point)
(term-vertical-motion down)
(term-adjust-current-row-cache (- scroll-needed)))
(setq term-current-column nil)
(term-insert-char ?\n (abs scroll-needed)))
((and (numberp term-pager-count)
(< (setq term-pager-count (- term-pager-count down))
0))
(setq down 0)
(term-process-pager))
(t
(term-adjust-current-row-cache (- scroll-needed))
(term-vertical-motion scroll-needed)
(set-marker term-home-marker (point))))
(goto-char save-point)
(set-marker save-point nil))))
down)