changeset 87848:7471059517c8

(Qauto_hscroll_mode): New var. (syms_of_xdisp): Initialize it. (hscroll_window_tree): Use it to lookup `auto-hscroll-mode' in each window's buffer. (hscroll_windows): Don't check automatic_hscrolling_p here.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 19 Jan 2008 05:22:33 +0000
parents 800f21c9f989
children 8f7e97005eef
files src/ChangeLog src/xdisp.c
diffstat 2 files changed, 18 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Jan 19 05:11:02 2008 +0000
+++ b/src/ChangeLog	Sat Jan 19 05:22:33 2008 +0000
@@ -1,5 +1,11 @@
 2008-01-19  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* xdisp.c (Qauto_hscroll_mode): New var.
+	(syms_of_xdisp): Initialize it.
+	(hscroll_window_tree): Use it to lookup `auto-hscroll-mode' in each
+	window's buffer.
+	(hscroll_windows): Don't check automatic_hscrolling_p here.
+
 	* window.c (set_window_buffer): Don't unnecessarily reset hscroll and
 	vscroll if we're setting window-buffer to the value it already has.
 
--- a/src/xdisp.c	Sat Jan 19 05:11:02 2008 +0000
+++ b/src/xdisp.c	Sat Jan 19 05:22:33 2008 +0000
@@ -689,6 +689,7 @@
    point visible.  */
 
 int automatic_hscrolling_p;
+Lisp_Object Qauto_hscroll_mode;
 
 /* How close to the margin can point get before the window is scrolled
    horizontally.  */
@@ -10381,11 +10382,12 @@
 	  /* Scroll when cursor is inside this scroll margin.  */
 	  h_margin = hscroll_margin * WINDOW_FRAME_COLUMN_WIDTH (w);
 
-	  if ((XFASTINT (w->hscroll)
-	       && w->cursor.x <= h_margin)
-	      || (cursor_row->enabled_p
-		  && cursor_row->truncated_on_right_p
-		  && (w->cursor.x >= text_area_width - h_margin)))
+	  if (!NILP (Fbuffer_local_value (Qauto_hscroll_mode, w->buffer))
+	      && ((XFASTINT (w->hscroll)
+		   && w->cursor.x <= h_margin)
+		  || (cursor_row->enabled_p
+		      && cursor_row->truncated_on_right_p
+		      && (w->cursor.x >= text_area_width - h_margin))))
 	    {
 	      struct it it;
 	      int hscroll;
@@ -10475,16 +10477,9 @@
 hscroll_windows (window)
      Lisp_Object window;
 {
-  int hscrolled_p;
-
-  if (automatic_hscrolling_p)
-    {
-      hscrolled_p = hscroll_window_tree (window);
-      if (hscrolled_p)
-	clear_desired_matrices (XFRAME (WINDOW_FRAME (XWINDOW (window))));
-    }
-  else
-    hscrolled_p = 0;
+  int hscrolled_p = hscroll_window_tree (window);
+  if (hscrolled_p)
+    clear_desired_matrices (XFRAME (WINDOW_FRAME (XWINDOW (window))));
   return hscrolled_p;
 }
 
@@ -24387,6 +24382,8 @@
   DEFVAR_BOOL ("auto-hscroll-mode", &automatic_hscrolling_p,
     doc: /* *Non-nil means scroll the display automatically to make point visible.  */);
   automatic_hscrolling_p = 1;
+  Qauto_hscroll_mode = intern ("auto-hscroll-mode");
+  staticpro (&Qauto_hscroll_mode);
 
   DEFVAR_INT ("hscroll-margin", &hscroll_margin,
     doc: /* *How many columns away from the window edge point is allowed to get