# HG changeset patch # User Stefan Monnier # Date 1200720153 0 # Node ID 7471059517c88f987f34513c4442797720461891 # Parent 800f21c9f989c1605a8abb8f123c69c398704724 (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. diff -r 800f21c9f989 -r 7471059517c8 src/ChangeLog --- 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 + * 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. diff -r 800f21c9f989 -r 7471059517c8 src/xdisp.c --- 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