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)