0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.0.0656: cannot specify another character to use instead of '@'

Problem:    Cannot specify another character to use instead of '@' at the end
            of the window.
Solution:   Add "lastline" to 'fillchars'. (Martin Tournoij, closes #11264,
            closes #10963)
This commit is contained in:
Bram Moolenaar
2022-10-04 14:36:29 +01:00
parent 2f7e1b8b40
commit 4ba5f1dab6
17 changed files with 120 additions and 24 deletions

View File

@@ -2956,6 +2956,9 @@ A jump table for the options with a short description can be found at |Q_op|.
When neither "lastline" nor "truncate" is included, a last line that When neither "lastline" nor "truncate" is included, a last line that
doesn't fit is replaced with "@" lines. doesn't fit is replaced with "@" lines.
The "@" character can be changed by setting the "lastline" item in
'fillchars'. The character is highlighted with |hl-NonText|.
*'eadirection'* *'ead'* *'eadirection'* *'ead'*
'eadirection' 'ead' string (default "both") 'eadirection' 'ead' string (default "both")
global global
@@ -3420,6 +3423,7 @@ A jump table for the options with a short description can be found at |Q_op|.
foldsep '|' open fold middle character foldsep '|' open fold middle character
diff '-' deleted lines of the 'diff' option diff '-' deleted lines of the 'diff' option
eob '~' empty lines below the end of a buffer eob '~' empty lines below the end of a buffer
lastline '@' 'display' contains lastline/truncate
Any one that is omitted will fall back to the default. For "stl" and Any one that is omitted will fall back to the default. For "stl" and
"stlnc" the space will be used when there is highlighting, '^' or '=' "stlnc" the space will be used when there is highlighting, '^' or '='
@@ -3442,6 +3446,7 @@ A jump table for the options with a short description can be found at |Q_op|.
fold Folded |hl-Folded| fold Folded |hl-Folded|
diff DiffDelete |hl-DiffDelete| diff DiffDelete |hl-DiffDelete|
eob EndOfBuffer |hl-EndOfBuffer| eob EndOfBuffer |hl-EndOfBuffer|
lastline NonText |hl-NonText|
*'fixendofline'* *'fixeol'* *'nofixendofline'* *'nofixeol'* *'fixendofline'* *'fixeol'* *'nofixendofline'* *'nofixeol'*
'fixendofline' 'fixeol' boolean (default on) 'fixendofline' 'fixeol' boolean (default on)

View File

@@ -2643,33 +2643,42 @@ win_update(win_T *wp)
#endif #endif
else if (dy_flags & DY_TRUNCATE) // 'display' has "truncate" else if (dy_flags & DY_TRUNCATE) // 'display' has "truncate"
{ {
int scr_row = W_WINROW(wp) + wp->w_height - 1; int scr_row = W_WINROW(wp) + wp->w_height - 1;
int symbol = wp->w_fill_chars.lastline;
int len;
char_u fillbuf[12]; // 2 characters of 6 bytes
len = mb_char2bytes(symbol, &fillbuf[0]);
len += mb_char2bytes(symbol, &fillbuf[len]);
// Last line isn't finished: Display "@@@" in the last screen line. // Last line isn't finished: Display "@@@" in the last screen line.
screen_puts_len((char_u *)"@@", wp->w_width > 2 ? 2 : wp->w_width, screen_puts_len(fillbuf,
scr_row, wp->w_wincol, HL_ATTR(HLF_AT)); wp->w_width > 2 ? len : wp->w_width,
scr_row, wp->w_wincol, HL_ATTR(HLF_AT));
screen_fill(scr_row, scr_row + 1, screen_fill(scr_row, scr_row + 1,
(int)wp->w_wincol + 2, (int)W_ENDCOL(wp), (int)wp->w_wincol + 2, (int)W_ENDCOL(wp),
'@', ' ', HL_ATTR(HLF_AT)); symbol, ' ', HL_ATTR(HLF_AT));
set_empty_rows(wp, srow); set_empty_rows(wp, srow);
wp->w_botline = lnum; wp->w_botline = lnum;
} }
else if (dy_flags & DY_LASTLINE) // 'display' has "lastline" else if (dy_flags & DY_LASTLINE) // 'display' has "lastline"
{ {
int start_col = (int)W_ENDCOL(wp) - 3; int start_col = (int)W_ENDCOL(wp) - 3;
int symbol = wp->w_fill_chars.lastline;
// Last line isn't finished: Display "@@@" at the end. // Last line isn't finished: Display "@@@" at the end.
screen_fill(W_WINROW(wp) + wp->w_height - 1, screen_fill(W_WINROW(wp) + wp->w_height - 1,
W_WINROW(wp) + wp->w_height, W_WINROW(wp) + wp->w_height,
start_col < wp->w_wincol ? wp->w_wincol : start_col, start_col < wp->w_wincol ? wp->w_wincol : start_col,
(int)W_ENDCOL(wp), (int)W_ENDCOL(wp),
'@', '@', HL_ATTR(HLF_AT)); symbol, symbol, HL_ATTR(HLF_AT));
set_empty_rows(wp, srow); set_empty_rows(wp, srow);
wp->w_botline = lnum; wp->w_botline = lnum;
} }
else else
{ {
win_draw_end(wp, '@', ' ', TRUE, srow, wp->w_height, HLF_AT); win_draw_end(wp, wp->w_fill_chars.lastline, ' ', TRUE,
srow, wp->w_height, HLF_AT);
wp->w_botline = lnum; wp->w_botline = lnum;
} }
} }

View File

@@ -936,7 +936,8 @@ static struct vimoption options[] =
SCTX_INIT}, SCTX_INIT},
{"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP, {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
(char_u *)&p_fcs, PV_FCS, (char_u *)&p_fcs, PV_FCS,
{(char_u *)"vert:|,fold:-,eob:~", (char_u *)0L} {(char_u *)"vert:|,fold:-,eob:~,lastline:@",
(char_u *)0L}
SCTX_INIT}, SCTX_INIT},
{"fixendofline", "fixeol", P_BOOL|P_VI_DEF|P_RSTAT, {"fixendofline", "fixeol", P_BOOL|P_VI_DEF|P_RSTAT,
(char_u *)&p_fixeol, PV_FIXEOL, (char_u *)&p_fixeol, PV_FIXEOL,

View File

@@ -2511,7 +2511,7 @@ screen_fill(
else else
force_next = FALSE; force_next = FALSE;
} }
#endif #endif // FEAT_GUI || defined(UNIX)
ScreenLines[off] = c; ScreenLines[off] = c;
if (enc_utf8) if (enc_utf8)
{ {
@@ -4943,6 +4943,7 @@ set_chars_option(win_T *wp, char_u **varp, int apply)
{&fill_chars.foldsep, "foldsep"}, {&fill_chars.foldsep, "foldsep"},
{&fill_chars.diff, "diff"}, {&fill_chars.diff, "diff"},
{&fill_chars.eob, "eob"}, {&fill_chars.eob, "eob"},
{&fill_chars.lastline, "lastline"},
}; };
static lcs_chars_T lcs_chars; static lcs_chars_T lcs_chars;
@@ -5022,6 +5023,7 @@ set_chars_option(win_T *wp, char_u **varp, int apply)
fill_chars.foldsep = '|'; fill_chars.foldsep = '|';
fill_chars.diff = '-'; fill_chars.diff = '-';
fill_chars.eob = '~'; fill_chars.eob = '~';
fill_chars.lastline = '@';
} }
} }
p = value; p = value;

View File

@@ -3519,6 +3519,7 @@ typedef struct
int foldsep; int foldsep;
int diff; int diff;
int eob; int eob;
int lastline;
} fill_chars_T; } fill_chars_T;
/* /*

View File

@@ -1,10 +1,10 @@
>a+0&#ffffff0||+1&&|a+0&&@2| @69 >a+0&#ffffff0||+1&&|a+0&&@2| @69
|a||+1&&|b+0&&@72 |a||+1&&|b+0&&@72
|a||+1&&|b+0&&@26| @45 |a||+1&&|b+0&&@72
@1||+1&&|b+0&&@53| @18
|b||+1&&|~+0#4040ff13&| @71 |b||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71 |b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71 |b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|@||+1#0000000&|~+0#4040ff13&| @71 |@||+1#0000000&|~+0#4040ff13&| @71
|<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1 |<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1
| +0&&@74 | +0&&@74

View File

@@ -1,10 +1,10 @@
>a+0&#ffffff0||+1&&|a+0&&@2| @69 >a+0&#ffffff0||+1&&|a+0&&@2| @69
|a||+1&&|b+0&&@72 |a||+1&&|b+0&&@72
|a||+1&&|b+0&&@26| @45 |a||+1&&|b+0&&@72
@1||+1&&|b+0&&@53| @18
|b||+1&&|~+0#4040ff13&| @71 |b||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71 |b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71 |b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|@||+1#0000000&|~+0#4040ff13&| @71 |@||+1#0000000&|~+0#4040ff13&| @71
|<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1 |<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1
|:+0&&|s|e|t| |d|i|s|p|l|a|y|=|l|a|s|t|l|i|n|e| @53 |:+0&&|s|e|t| |d|i|s|p|l|a|y|=|l|a|s|t|l|i|n|e| @53

View File

@@ -1,7 +1,7 @@
>a+0&#ffffff0@2| @69||+1&&|a+0&& >a+0&#ffffff0@2| @69||+1&&|a+0&&
|b@72||+1&&|a+0&& |b@72||+1&&|a+0&&
|b@26| @45||+1&&|a+0&& |b@72||+1&&|a+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |b@53| @18||+1&&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&

View File

@@ -1,7 +1,7 @@
>a+0&#ffffff0@2| @69||+1&&|a+0&& >a+0&#ffffff0@2| @69||+1&&|a+0&&
|b@72||+1&&|a+0&& |b@72||+1&&|a+0&&
|b@26| @45||+1&&|a+0&& |b@72||+1&&|a+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |b@53| @18||+1&&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&& |~+0#4040ff13&| @71||+1#0000000&|b+0&&

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0@2| @71
|b@74
|@+0#4040ff13&@2| @71
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|T|o|p
|a+0&&@2| @71
|b@74
@75
@50| @24
|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|A|l@1
|:+0&&|3|s|p|l|i|t| @67

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0||+1&&|a+0&&@2| @69
|a||+1&&|b+0&&@72
|a||+1&&|b+0&&@72
@1||+1&&|b+0&&@53| @18
|b||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|€||+1#0000000&|~+0#4040ff13&| @71
|<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1
| +0&&@74

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0||+1&&|a+0&&@2| @69
|a||+1&&|b+0&&@72
|a||+1&&|b+0&&@72
@1||+1&&|b+0&&@53| @18
|b||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|b+0#0000000&||+1&&|~+0#4040ff13&| @71
|€||+1#0000000&|~+0#4040ff13&| @71
|<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1
|:+0&&|s|e|t| |d|i|s|p|l|a|y|=|l|a|s|t|l|i|n|e| @53

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0@2| @69||+1&&|a+0&&
|b@72||+1&&|a+0&&
|b@72||+1&&|a+0&&
|b@53| @18||+1&&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|€+0#4040ff13&
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1| |<+1&&
|:+0&&|1|0@1|w|i|n|c|m|d| |>| @62

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0@2| @69||+1&&|a+0&&
|b@72||+1&&|a+0&&
|b@72||+1&&|a+0&&
|b@53| @18||+1&&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|b+0&&
|~+0#4040ff13&| @71||+1#0000000&|€+0#4040ff13&
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1| |<+1&&
|:+0&&|s|e|t| |d|i|s|p|l|a|y|=|t|r|u|n|c|a|t|e| @53

View File

@@ -0,0 +1,10 @@
>a+0&#ffffff0@2| @71
|b@74
|€+0#4040ff13&@2| @71
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|T|o|p
|a+0&&@2| @71
|b@74
@75
@50| @24
|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|A|l@1
|:+0&&|3|s|p|l|i|t| @67

View File

@@ -391,30 +391,46 @@ func Test_display_linebreak_breakat()
let &breakat=_breakat let &breakat=_breakat
endfunc endfunc
func Test_display_lastline() func Run_Test_display_lastline(euro)
CheckScreendump
let lines =<< trim END let lines =<< trim END
call setline(1, ['aaa', 'b'->repeat(100)]) call setline(1, ['aaa', 'b'->repeat(200)])
set display=truncate set display=truncate
vsplit vsplit
100wincmd < 100wincmd <
END END
if a:euro != ''
let lines[2] = 'set fillchars=vert:\|,lastline:€'
endif
call writefile(lines, 'XdispLastline', 'D') call writefile(lines, 'XdispLastline', 'D')
let buf = RunVimInTerminal('-S XdispLastline', #{rows: 10}) let buf = RunVimInTerminal('-S XdispLastline', #{rows: 10})
call VerifyScreenDump(buf, 'Test_display_lastline_1', {}) call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}1', {})
call term_sendkeys(buf, ":set display=lastline\<CR>") call term_sendkeys(buf, ":set display=lastline\<CR>")
call VerifyScreenDump(buf, 'Test_display_lastline_2', {}) call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}2', {})
call term_sendkeys(buf, ":100wincmd >\<CR>") call term_sendkeys(buf, ":100wincmd >\<CR>")
call VerifyScreenDump(buf, 'Test_display_lastline_3', {}) call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}3', {})
call term_sendkeys(buf, ":set display=truncate\<CR>") call term_sendkeys(buf, ":set display=truncate\<CR>")
call VerifyScreenDump(buf, 'Test_display_lastline_4', {}) call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}4', {})
call term_sendkeys(buf, ":close\<CR>")
call term_sendkeys(buf, ":3split\<CR>")
call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}5', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
func Test_display_lastline()
CheckScreendump
call Run_Test_display_lastline('')
call Run_Test_display_lastline('euro_')
call assert_fails(':set fillchars=lastline:', 'E474:')
call assert_fails(':set fillchars=lastline:', 'E474:')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
656,
/**/ /**/
655, 655,
/**/ /**/