mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00: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:
@ -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
|
||||
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' string (default "both")
|
||||
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
|
||||
diff '-' deleted lines of the 'diff' option
|
||||
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
|
||||
"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|
|
||||
diff DiffDelete |hl-DiffDelete|
|
||||
eob EndOfBuffer |hl-EndOfBuffer|
|
||||
lastline NonText |hl-NonText|
|
||||
|
||||
*'fixendofline'* *'fixeol'* *'nofixendofline'* *'nofixeol'*
|
||||
'fixendofline' 'fixeol' boolean (default on)
|
||||
|
@ -2643,33 +2643,42 @@ win_update(win_T *wp)
|
||||
#endif
|
||||
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.
|
||||
screen_puts_len((char_u *)"@@", wp->w_width > 2 ? 2 : wp->w_width,
|
||||
scr_row, wp->w_wincol, HL_ATTR(HLF_AT));
|
||||
screen_puts_len(fillbuf,
|
||||
wp->w_width > 2 ? len : wp->w_width,
|
||||
scr_row, wp->w_wincol, HL_ATTR(HLF_AT));
|
||||
screen_fill(scr_row, scr_row + 1,
|
||||
(int)wp->w_wincol + 2, (int)W_ENDCOL(wp),
|
||||
'@', ' ', HL_ATTR(HLF_AT));
|
||||
symbol, ' ', HL_ATTR(HLF_AT));
|
||||
set_empty_rows(wp, srow);
|
||||
wp->w_botline = lnum;
|
||||
}
|
||||
else if (dy_flags & DY_LASTLINE) // 'display' has "lastline"
|
||||
{
|
||||
int start_col = (int)W_ENDCOL(wp) - 3;
|
||||
int symbol = wp->w_fill_chars.lastline;
|
||||
|
||||
// Last line isn't finished: Display "@@@" at the end.
|
||||
screen_fill(W_WINROW(wp) + wp->w_height - 1,
|
||||
W_WINROW(wp) + wp->w_height,
|
||||
start_col < wp->w_wincol ? wp->w_wincol : start_col,
|
||||
(int)W_ENDCOL(wp),
|
||||
'@', '@', HL_ATTR(HLF_AT));
|
||||
symbol, symbol, HL_ATTR(HLF_AT));
|
||||
set_empty_rows(wp, srow);
|
||||
wp->w_botline = lnum;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -936,7 +936,8 @@ static struct vimoption options[] =
|
||||
SCTX_INIT},
|
||||
{"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
|
||||
(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},
|
||||
{"fixendofline", "fixeol", P_BOOL|P_VI_DEF|P_RSTAT,
|
||||
(char_u *)&p_fixeol, PV_FIXEOL,
|
||||
|
@ -2511,7 +2511,7 @@ screen_fill(
|
||||
else
|
||||
force_next = FALSE;
|
||||
}
|
||||
#endif
|
||||
#endif // FEAT_GUI || defined(UNIX)
|
||||
ScreenLines[off] = c;
|
||||
if (enc_utf8)
|
||||
{
|
||||
@ -4943,6 +4943,7 @@ set_chars_option(win_T *wp, char_u **varp, int apply)
|
||||
{&fill_chars.foldsep, "foldsep"},
|
||||
{&fill_chars.diff, "diff"},
|
||||
{&fill_chars.eob, "eob"},
|
||||
{&fill_chars.lastline, "lastline"},
|
||||
};
|
||||
|
||||
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.diff = '-';
|
||||
fill_chars.eob = '~';
|
||||
fill_chars.lastline = '@';
|
||||
}
|
||||
}
|
||||
p = value;
|
||||
|
@ -3519,6 +3519,7 @@ typedef struct
|
||||
int foldsep;
|
||||
int diff;
|
||||
int eob;
|
||||
int lastline;
|
||||
} fill_chars_T;
|
||||
|
||||
/*
|
||||
|
@ -1,10 +1,10 @@
|
||||
>a+0&#ffffff0||+1&&|a+0&&@2| @69
|
||||
|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+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
|
||||
|<+3#0000000&| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @41|1|,|1| @11|A|l@1
|
||||
| +0&&@74
|
||||
|
@ -1,10 +1,10 @@
|
||||
>a+0&#ffffff0||+1&&|a+0&&@2| @69
|
||||
|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+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
|
||||
|<+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
|
||||
|
@ -1,7 +1,7 @@
|
||||
>a+0&#ffffff0@2| @69||+1&&|a+0&&
|
||||
|b@72||+1&&|a+0&&
|
||||
|b@26| @45||+1&&|a+0&&
|
||||
|~+0#4040ff13&| @71||+1#0000000&|b+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&&
|
||||
|
@ -1,7 +1,7 @@
|
||||
>a+0&#ffffff0@2| @69||+1&&|a+0&&
|
||||
|b@72||+1&&|a+0&&
|
||||
|b@26| @45||+1&&|a+0&&
|
||||
|~+0#4040ff13&| @71||+1#0000000&|b+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&&
|
||||
|
10
src/testdir/dumps/Test_display_lastline_5.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_5.dump
Normal 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
|
10
src/testdir/dumps/Test_display_lastline_euro_1.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_euro_1.dump
Normal 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
|
10
src/testdir/dumps/Test_display_lastline_euro_2.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_euro_2.dump
Normal 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
|
10
src/testdir/dumps/Test_display_lastline_euro_3.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_euro_3.dump
Normal 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
|
10
src/testdir/dumps/Test_display_lastline_euro_4.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_euro_4.dump
Normal 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
|
10
src/testdir/dumps/Test_display_lastline_euro_5.dump
Normal file
10
src/testdir/dumps/Test_display_lastline_euro_5.dump
Normal 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
|
@ -391,30 +391,46 @@ func Test_display_linebreak_breakat()
|
||||
let &breakat=_breakat
|
||||
endfunc
|
||||
|
||||
func Test_display_lastline()
|
||||
CheckScreendump
|
||||
|
||||
func Run_Test_display_lastline(euro)
|
||||
let lines =<< trim END
|
||||
call setline(1, ['aaa', 'b'->repeat(100)])
|
||||
call setline(1, ['aaa', 'b'->repeat(200)])
|
||||
set display=truncate
|
||||
|
||||
vsplit
|
||||
100wincmd <
|
||||
END
|
||||
if a:euro != ''
|
||||
let lines[2] = 'set fillchars=vert:\|,lastline:€'
|
||||
endif
|
||||
call writefile(lines, 'XdispLastline', 'D')
|
||||
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 VerifyScreenDump(buf, 'Test_display_lastline_2', {})
|
||||
call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}2', {})
|
||||
|
||||
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 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)
|
||||
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
|
||||
|
@ -699,6 +699,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
656,
|
||||
/**/
|
||||
655,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user