changeset 2597:562d2dea4f05

(hscroll-step): New variable. (hscroll-point-visible): New function. (left-arrow, right-arrow): These use hscroll-point-visible for better auto- scrolling behavior.
author Eric S. Raymond <esr@snark.thyrsus.com>
date Tue, 27 Apr 1993 22:01:32 +0000
parents ee5b45777c6f
children 2189edb30955
files lisp/simple.el
diffstat 1 files changed, 26 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/simple.el	Tue Apr 27 21:59:59 1993 +0000
+++ b/lisp/simple.el	Tue Apr 27 22:01:32 1993 +0000
@@ -1387,28 +1387,47 @@
 	     goal-column))
   nil)
 
+;;; Partial support for horizontal autoscrolling.  Someday, this feature
+;;; will be built into the C level and all the (hscroll-point-visible) calls
+;;; will go away.
+
+(defvar hscroll-step 0
+   "*The number of columns to try scrolling a window by when point moves out.
+If that fails to bring point back on frame, point is centered instead.
+If this is zero, point is always centered after it moves off frame.")
+
+(defun hscroll-point-visible ()
+  "Scrolls the window horizontally to make point visible."
+  (let*  ((min (window-hscroll))
+          (max (- (+ min (window-width)) 2))
+          (here (current-column))
+          (delta (if (zerop hscroll-step) (/ (window-width) 2) hscroll-step))
+          )
+    (if (< here min)
+        (scroll-right (max 0 (+ (- min here) delta)))
+      (if (>= here  max)
+          (scroll-left (- (- here min) delta))
+        ))))
+  
 ;;; Make arrow keys do the right thing for improved terminal support
 ;;; When we implement true horizontal autoscrolling, right-arrow and
 ;;; left-arrow can lose the (if truncate-lines ...) clause and become
-;;; aliases.
+;;; aliases.  These functions are bound to the corresponding keyboard
+;;; events in loaddefs.el.
 
 (defun right-arrow (arg)
   "Move right one character on the screen (with prefix ARG, that many chars).
 Scroll right if needed to keep point horizontally onscreen."
   (interactive "P")
   (forward-char arg)
-  (if truncate-lines
-      (let ((x (current-column)) (w (- (window-width) 2)))
-	(set-window-hscroll (selected-window) (- x (% x w)) ))))
+  (hscroll-point-visible))
 
 (defun left-arrow (arg)
   "Move left one character on the screen (with prefix ARG, that many chars).
 Scroll left if needed to keep point horizontally onscreen."
   (interactive "P")
   (backward-char arg)
-  (if truncate-lines
-      (let ((x (current-column)) (w (- (window-width) 2)))
-	(set-window-hscroll (selected-window) (- x (% x w)) ))))
+  (hscroll-point-visible))
 
 (defun down-arrow (arg)
   "Move down one line on the screen (with prefix ARG, that many lines).