summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2006-10-24 19:12:40 +0000
committerBram Moolenaar <Bram@vim.org>2006-10-24 19:12:40 +0000
commit2647063968d843306b4d897c9e333cb5fd9d5a25 (patch)
treef765cdb696ce0f724f6e384567843823d9c6d953
parenta2a31754a42c4f30c190cd1de0bf3e05242bec62 (diff)
downloadvim-git-2647063968d843306b4d897c9e333cb5fd9d5a25.tar.gz
updated for version 7.0-149v7.0.149
-rw-r--r--src/misc1.c16
-rw-r--r--src/version.c2
-rw-r--r--src/window.c70
3 files changed, 37 insertions, 51 deletions
diff --git a/src/misc1.c b/src/misc1.c
index ed6c62994..000f3aef3 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -1761,15 +1761,13 @@ plines_win_col(wp, lnum, column)
* Add column offset for 'number', 'foldcolumn', etc.
*/
width = W_WIDTH(wp) - win_col_off(wp);
- if (width > 0)
- {
- lines += 1;
- if (col >= width)
- lines += (col - width) / (width + win_col_off2(wp));
- if (lines <= wp->w_height)
- return lines;
- }
- return (int)(wp->w_height); /* maximum length */
+ if (width <= 0)
+ return 9999;
+
+ lines += 1;
+ if (col > width)
+ lines += (col - width) / (width + win_col_off2(wp)) + 1;
+ return lines;
}
int
diff --git a/src/version.c b/src/version.c
index 3c67bb323..dc1510aee 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 149,
+/**/
148,
/**/
147,
diff --git a/src/window.c b/src/window.c
index 0300b5590..5f5bb2a09 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5189,11 +5189,7 @@ win_new_height(wp, height)
int height;
{
linenr_T lnum;
- linenr_T bot;
int sline, line_size;
- int space;
- int did_below = FALSE;
- int old_height = wp->w_height;
#define FRACTION_MULT 16384L
/* Don't want a negative height. Happens when splitting a tiny window.
@@ -5228,54 +5224,44 @@ win_new_height(wp, height)
wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT;
line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
sline = wp->w_wrow - line_size;
+
+ if (sline >= 0)
+ {
+ /* Make sure the whole cursor line is visible, if possible. */
+ int rows = plines_win(wp, lnum, FALSE);
+
+ if (sline > wp->w_height - rows)
+ {
+ sline = wp->w_height - rows;
+ wp->w_wrow -= rows - line_size;
+ }
+ }
+
if (sline < 0)
{
/*
* Cursor line would go off top of screen if w_wrow was this high.
+ * Make cursor line the first line in the window. If not enough
+ * room use w_skipcol;
*/
wp->w_wrow = line_size;
+ if (wp->w_wrow >= wp->w_height
+ && (W_WIDTH(wp) - win_col_off(wp)) > 0)
+ {
+ wp->w_skipcol += W_WIDTH(wp) - win_col_off(wp);
+ --wp->w_wrow;
+ while (wp->w_wrow >= wp->w_height)
+ {
+ wp->w_skipcol += W_WIDTH(wp) - win_col_off(wp)
+ + win_col_off2(wp);
+ --wp->w_wrow;
+ }
+ }
}
else
{
- space = height - 1;
-
- while (lnum > 1)
+ while (sline > 0 && lnum > 1)
{
- /* When using "~" lines stop when at the old topline, don't
- * scroll down. */
- if (did_below && height < old_height && lnum <= wp->w_topline)
- sline = 0;
-
- space -= line_size;
- if (space > 0 && sline <= 0 && !did_below)
- {
- /* Try to use "~" lines below the text to avoid that text
- * is above the window while there are empty lines.
- * Subtract the rows below the cursor from "space" and
- * give the rest to "sline". */
- did_below = TRUE;
- bot = wp->w_cursor.lnum;
- while (space > 0)
- {
- if (wp->w_buffer->b_ml.ml_line_count - bot >= space)
- space = 0;
- else
- {
-#ifdef FEAT_FOLDING
- hasFoldingWin(wp, bot, NULL, &bot, TRUE, NULL);
-#endif
- if (bot >= wp->w_buffer->b_ml.ml_line_count)
- break;
- ++bot;
- space -= plines_win(wp, bot, TRUE);
- }
- }
- if (bot == wp->w_buffer->b_ml.ml_line_count && space > 0)
- sline += space;
- }
- if (sline <= 0)
- break;
-
#ifdef FEAT_FOLDING
hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
if (lnum == 1)