# HG changeset patch # User Christian Brabandt # Date 1469655005 -7200 # Node ID b193bdb6ea25fe415afd53b1963d2115d20208d5 # Parent aba5d9a93af993b2e43dcb6f8d973f65cea93c6a commit https://github.com/vim/vim/commit/ad9c2a08f0509294269a2f11a59a438b944bdd5a Author: Bram Moolenaar Date: Wed Jul 27 23:26:04 2016 +0200 patch 7.4.2109 Problem: Setting 'display' to "lastline" is a drastic change, while omitting it results in lots of "@" lines. Solution: Add "truncate" to show "@@@" for a truncated line. diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -2623,11 +2623,17 @@ A jump table for the options with a shor Change the way text is displayed. This is comma separated list of flags: lastline When included, as much as possible of the last line - in a window will be displayed. When not included, a - last line that doesn't fit is replaced with "@" lines. + in a window will be displayed. "@@@" is put in the + last columns of the last screen line to indicate the + rest of the line is not displayed. + truncate Like "lastline", but "@@@" is displayed in the first + column of the last screen line. Overrules "lastline". uhex Show unprintable characters hexadecimal as instead of using ^C and ~C. + When neither "lastline" or "truncate" is included, a last line that + doesn't fit is replaced with "@" lines. + *'eadirection'* *'ead'* 'eadirection' 'ead' string (default "both") global diff --git a/src/option.h b/src/option.h --- a/src/option.h +++ b/src/option.h @@ -454,10 +454,11 @@ EXTERN char_u *p_dir; /* 'directory' */ EXTERN char_u *p_dy; /* 'display' */ EXTERN unsigned dy_flags; #ifdef IN_OPTION_C -static char *(p_dy_values[]) = {"lastline", "uhex", NULL}; +static char *(p_dy_values[]) = {"lastline", "truncate", "uhex", NULL}; #endif #define DY_LASTLINE 0x001 -#define DY_UHEX 0x002 +#define DY_TRUNCATE 0x002 +#define DY_UHEX 0x004 EXTERN int p_ed; /* 'edcompatible' */ #ifdef FEAT_WINDOWS EXTERN char_u *p_ead; /* 'eadirection' */ diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -2018,7 +2018,7 @@ win_update(win_T *wp) && wp->w_lines[idx].wl_valid && wp->w_lines[idx].wl_lnum == lnum && lnum > wp->w_topline - && !(dy_flags & DY_LASTLINE) + && !(dy_flags & (DY_LASTLINE | DY_TRUNCATE)) && srow + wp->w_lines[idx].wl_size > wp->w_height #ifdef FEAT_DIFF && diff_check_fill(wp, lnum) == 0 @@ -2139,6 +2139,21 @@ win_update(win_T *wp) wp->w_filler_rows = wp->w_height - srow; } #endif + else if (dy_flags & DY_TRUNCATE) /* 'display' has "truncate" */ + { + int scr_row = W_WINROW(wp) + wp->w_height - 1; + + /* + * Last line isn't finished: Display "@@@" in the last screen line. + */ + screen_puts_len((char_u *)"@@", 2, scr_row, W_WINCOL(wp), + hl_attr(HLF_AT)); + screen_fill(scr_row, scr_row + 1, + (int)W_WINCOL(wp) + 2, (int)W_ENDCOL(wp), + '@', ' ', hl_attr(HLF_AT)); + set_empty_rows(wp, srow); + wp->w_botline = lnum; + } else if (dy_flags & DY_LASTLINE) /* 'display' has "lastline" */ { /* diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2109, +/**/ 2108, /**/ 2107,