| 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 |
| |
| |
| |
| |
| |
| *** 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 */ |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 */ |
| |
| |
| |
| *** 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 /// |