summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2008-11-15 15:06:17 +0000
committerBram Moolenaar <Bram@vim.org>2008-11-15 15:06:17 +0000
commitd4153d4a62172ecb451020e9b90b3fe5b0e7e8be (patch)
treea409d964f846c19fe64a3a39196b17ecfe80e6ba
parent701f7afcdf5f510090116a6a6fa91ca479c88e06 (diff)
downloadvim-git-7.2.042.tar.gz
updated for version 7.2-042v7.2.042
-rw-r--r--src/buffer.c6
-rw-r--r--src/move.c19
-rw-r--r--src/structs.h7
-rw-r--r--src/version.c2
4 files changed, 27 insertions, 7 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 4104977d6..741de4887 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1401,6 +1401,9 @@ enter_buffer(buf)
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,7 +1443,8 @@ enter_buffer(buf)
maketitle();
#endif
#ifdef FEAT_AUTOCMD
- if (curwin->w_topline == 1) /* when autocmds didn't change it */
+ /* 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 */
diff --git a/src/move.c b/src/move.c
index c547d9b0e..17b16a1e8 100644
--- a/src/move.c
+++ b/src/move.c
@@ -280,18 +280,20 @@ update_topline()
if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
{
- if (curwin->w_cursor.lnum < curwin->w_botline
- && ((long)curwin->w_cursor.lnum
+ 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 above botline, check if there are 'scrolloff'
- * window lines below the cursor. If not, need to scroll. */
+ /* 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,6 +319,10 @@ update_topline()
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,6 +515,9 @@ set_topline(wp, lnum)
/* 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
diff --git a/src/structs.h b/src/structs.h
index 1ecdddbc1..329676e59 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1784,10 +1784,15 @@ struct window_S
#endif
/*
- * The next three specify the offsets for displaying the buffer:
+ * "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 */
diff --git a/src/version.c b/src/version.c
index d3ce62ae5..6c5903436 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 42,
+/**/
41,
/**/
40,