summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/options.txt10
-rw-r--r--src/option.h5
-rw-r--r--src/screen.c17
-rw-r--r--src/version.c2
4 files changed, 29 insertions, 5 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index ea247e289..bfa806843 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -2623,11 +2623,17 @@ A jump table for the options with a short description can be found at |Q_op|.
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 <xx>
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
index f05a46695..bc8d4e0cf 100644
--- 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
index 1b364a4a2..b16bd87c7 100644
--- 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
index 47417bf8f..c24cf7a80 100644
--- 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,