To: vim-dev@vim.org
Subject: Patch 7.2.042
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.2.042
Problem: When using winrestview() in a BufWinEnter autocommand the window
is scrolled anyway. (Matt Zyzik)
Solution: Don't recompute topline when above 'scrolloff' from the bottom.
Don't always put the cursor halfway when entering a buffer. Add
"w_topline_was_set".
Files: src/buffer.c, src/move.c, src/structs.h
*** ../vim-7.2.041/src/buffer.c Sat Nov 15 14:10:23 2008
--- src/buffer.c Sat Nov 15 14:58:52 2008
***************
*** 1401,1406 ****
--- 1401,1409 ----
curwin->w_cursor.coladd = 0;
#endif
curwin->w_set_curswant = TRUE;
+ #ifdef FEAT_AUTOCMD
+ curwin->w_topline_was_set = FALSE;
+ #endif
/* Make sure the buffer is loaded. */
if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
***************
*** 1440,1446 ****
maketitle();
#endif
#ifdef FEAT_AUTOCMD
! if (curwin->w_topline == 1) /* when autocmds didn't change it */
#endif
scroll_cursor_halfway(FALSE); /* redisplay at correct position */
--- 1443,1450 ----
maketitle();
#endif
#ifdef FEAT_AUTOCMD
! /* when autocmds didn't change it */
! if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
#endif
scroll_cursor_halfway(FALSE); /* redisplay at correct position */
*** ../vim-7.2.041/src/move.c Sun Jul 13 19:25:23 2008
--- src/move.c Sat Nov 15 14:56:47 2008
***************
*** 280,297 ****
if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
{
! if (curwin->w_cursor.lnum < curwin->w_botline
! && ((long)curwin->w_cursor.lnum
>= (long)curwin->w_botline - p_so
#ifdef FEAT_FOLDING
|| hasAnyFolding(curwin)
#endif
))
! {
lineoff_T loff;
! /* Cursor is above botline, check if there are 'scrolloff'
! * window lines below the cursor. If not, need to scroll. */
n = curwin->w_empty_rows;
loff.lnum = curwin->w_cursor.lnum;
#ifdef FEAT_FOLDING
--- 280,299 ----
if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
{
! if (curwin->w_cursor.lnum < curwin->w_botline)
! {
! if (((long)curwin->w_cursor.lnum
>= (long)curwin->w_botline - p_so
#ifdef FEAT_FOLDING
|| hasAnyFolding(curwin)
#endif
))
! {
lineoff_T loff;
! /* Cursor is (a few lines) above botline, check if there are
! * 'scrolloff' window lines below the cursor. If not, need to
! * scroll. */
n = curwin->w_empty_rows;
loff.lnum = curwin->w_cursor.lnum;
#ifdef FEAT_FOLDING
***************
*** 317,322 ****
--- 319,328 ----
if (n >= p_so)
/* sufficient context, no need to scroll */
check_botline = FALSE;
+ }
+ else
+ /* sufficient context, no need to scroll */
+ check_botline = FALSE;
}
if (check_botline)
{
***************
*** 509,514 ****
--- 515,523 ----
/* Approximate the value of w_botline */
wp->w_botline += lnum - wp->w_topline;
wp->w_topline = lnum;
+ #ifdef FEAT_AUTOCMD
+ wp->w_topline_was_set = TRUE;
+ #endif
#ifdef FEAT_DIFF
wp->w_topfill = 0;
#endif
*** ../vim-7.2.041/src/structs.h Sun Nov 9 13:43:25 2008
--- src/structs.h Sat Nov 15 14:56:42 2008
***************
*** 1784,1793 ****
#endif
/*
! * The next three specify the offsets for displaying the buffer:
*/
linenr_T w_topline; /* buffer line number of the line at the
top of the window */
#ifdef FEAT_DIFF
int w_topfill; /* number of filler lines above w_topline */
int w_old_topfill; /* w_topfill at last redraw */
--- 1784,1798 ----
#endif
/*
! * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
! * displaying the buffer.
*/
linenr_T w_topline; /* buffer line number of the line at the
top of the window */
+ #ifdef FEAT_AUTOCMD
+ char w_topline_was_set; /* flag set to TRUE when topline is set,
+ e.g. by winrestview() */
+ #endif
#ifdef FEAT_DIFF
int w_topfill; /* number of filler lines above w_topline */
int w_old_topfill; /* w_topfill at last redraw */
*** ../vim-7.2.041/src/version.c Sat Nov 15 14:10:23 2008
--- src/version.c Sat Nov 15 16:01:29 2008
***************
*** 678,679 ****
--- 678,681 ----
{ /* Add new patch number below this line */
+ /**/
+ 42,
/**/
--
hundred-and-one symptoms of being an internet addict:
261. You find diskettes in your pockets when doing laundry.
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///