changeset 59680:1d33b3da1157

(line-move-1): Rename from line-move. (line-move): New function that adjusts vscroll for partially visible rows, and calls line-move-1 otherwise.
author Kim F. Storm <storm@cua.dk>
date Sat, 22 Jan 2005 01:44:56 +0000
parents 0e7e54a3da10
children c77eb52a1cca
files lisp/simple.el
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/simple.el	Sat Jan 22 01:43:55 2005 +0000
+++ b/lisp/simple.el	Sat Jan 22 01:44:56 2005 +0000
@@ -3179,10 +3179,31 @@
       (or (memq prop buffer-invisibility-spec)
 	  (assq prop buffer-invisibility-spec)))))
 
+;; Perform vertical scrolling of tall images if necessary.
+(defun line-move (arg &optional noerror to-end)
+  (if auto-window-vscroll
+      (let ((forward (> arg 0))
+	    (pvis (pos-visible-in-window-p (window-start) nil t)))
+	(if (and pvis (null (nth 2 pvis))
+		 (> (nth (if forward 4 3) pvis) 0))
+	    (set-window-vscroll nil
+				(if forward
+				    (+ (window-vscroll nil t)
+				       (min (nth 4 pvis)
+					    (* (frame-char-height) arg)))
+				  (max 0
+				       (- (window-vscroll nil t)
+					  (min (nth 3 pvis)
+					       (* (frame-char-height) (- arg))))))
+				t)
+	  (set-window-vscroll nil 0)
+	  (line-move-1 arg noerror to-end)))
+    (line-move-1 arg noerror to-end)))
+
 ;; This is the guts of next-line and previous-line.
 ;; Arg says how many lines to move.
 ;; The value is t if we can move the specified number of lines.
-(defun line-move (arg &optional noerror to-end)
+(defun line-move-1 (arg &optional noerror to-end)
   ;; Don't run any point-motion hooks, and disregard intangibility,
   ;; for intermediate positions.
   (let ((inhibit-point-motion-hooks t)