patch 7.4.710

Problem:    It is not possible to make spaces visibible in list mode.
Solution:   Add the "space" item to 'listchars'. (David Bürgin, issue 350)
This commit is contained in:
Bram Moolenaar
2015-04-21 18:33:48 +02:00
parent 40ce3a4e1f
commit 7927836733
12 changed files with 100 additions and 15 deletions

View File

@ -4717,31 +4717,35 @@ A jump table for the options with a short description can be found at |Q_op|.
{not in Vi} {not in Vi}
Strings to use in 'list' mode and for the |:list| command. It is a Strings to use in 'list' mode and for the |:list| command. It is a
comma separated list of string settings. comma separated list of string settings.
*lcs-eol* *lcs-eol*
eol:c Character to show at the end of each line. When eol:c Character to show at the end of each line. When
omitted, there is no extra character at the end of the omitted, there is no extra character at the end of the
line. line.
*lcs-tab* *lcs-tab*
tab:xy Two characters to be used to show a tab. The first tab:xy Two characters to be used to show a tab. The first
char is used once. The second char is repeated to char is used once. The second char is repeated to
fill the space that the tab normally occupies. fill the space that the tab normally occupies.
"tab:>-" will show a tab that takes four spaces as "tab:>-" will show a tab that takes four spaces as
">---". When omitted, a tab is show as ^I. ">---". When omitted, a tab is show as ^I.
*lcs-trail* *lcs-space*
space:c Character to show for a space. When omitted, spaces
are left blank.
*lcs-trail*
trail:c Character to show for trailing spaces. When omitted, trail:c Character to show for trailing spaces. When omitted,
trailing spaces are blank. trailing spaces are blank. Overrides the "space"
*lcs-extends* setting for trailing spaces.
*lcs-extends*
extends:c Character to show in the last column, when 'wrap' is extends:c Character to show in the last column, when 'wrap' is
off and the line continues beyond the right of the off and the line continues beyond the right of the
screen. screen.
*lcs-precedes* *lcs-precedes*
precedes:c Character to show in the first column, when 'wrap' precedes:c Character to show in the first column, when 'wrap'
is off and there is text preceding the character is off and there is text preceding the character
visible in the first column. visible in the first column.
*lcs-conceal* *lcs-conceal*
conceal:c Character to show in place of concealed text, when conceal:c Character to show in place of concealed text, when
'conceallevel' is set to 1. 'conceallevel' is set to 1.
*lcs-nbsp* *lcs-nbsp*
nbsp:c Character to show for a non-breakable space (character nbsp:c Character to show for a non-breakable space (character
0xA0, 160). Left blank when omitted. 0xA0, 160). Left blank when omitted.
@ -4754,7 +4758,7 @@ A jump table for the options with a short description can be found at |Q_op|.
:set lcs=tab:>-,eol:<,nbsp:% :set lcs=tab:>-,eol:<,nbsp:%
:set lcs=extends:>,precedes:< :set lcs=extends:>,precedes:<
< The "NonText" highlighting will be used for "eol", "extends" and < The "NonText" highlighting will be used for "eol", "extends" and
"precedes". "SpecialKey" for "nbsp", "tab" and "trail". "precedes". "SpecialKey" for "nbsp", "space", "tab" and "trail".
|hl-NonText| |hl-SpecialKey| |hl-NonText| |hl-SpecialKey|
*'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'* *'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*

View File

@ -1163,6 +1163,7 @@ EXTERN int lcs_eol INIT(= '$');
EXTERN int lcs_ext INIT(= NUL); EXTERN int lcs_ext INIT(= NUL);
EXTERN int lcs_prec INIT(= NUL); EXTERN int lcs_prec INIT(= NUL);
EXTERN int lcs_nbsp INIT(= NUL); EXTERN int lcs_nbsp INIT(= NUL);
EXTERN int lcs_space INIT(= NUL);
EXTERN int lcs_tab1 INIT(= NUL); EXTERN int lcs_tab1 INIT(= NUL);
EXTERN int lcs_tab2 INIT(= NUL); EXTERN int lcs_tab2 INIT(= NUL);
EXTERN int lcs_trail INIT(= NUL); EXTERN int lcs_trail INIT(= NUL);

View File

@ -4334,14 +4334,16 @@ win_line(wp, lnum, startrow, endrow, nochange)
#endif #endif
++ptr; ++ptr;
/* 'list' : change char 160 to lcs_nbsp. */ /* 'list': change char 160 to lcs_nbsp and space to lcs_space. */
if (wp->w_p_list && (c == 160 if (wp->w_p_list
&& (((c == 160
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
|| (mb_utf8 && mb_c == 160) || (mb_utf8 && mb_c == 160)
#endif #endif
) && lcs_nbsp) ) && lcs_nbsp)
|| (c == ' ' && lcs_space && ptr <= line + trailcol)))
{ {
c = lcs_nbsp; c = (c == ' ') ? lcs_space : lcs_nbsp;
if (area_attr == 0 && search_attr == 0) if (area_attr == 0 && search_attr == 0)
{ {
n_attr = 1; n_attr = 1;

View File

@ -46,6 +46,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \
@ -189,6 +190,7 @@ test_command_count.out: test_command_count.in
test_erasebackword.out: test_erasebackword.in test_erasebackword.out: test_erasebackword.in
test_eval.out: test_eval.in test_eval.out: test_eval.in
test_insertcount.out: test_insertcount.in test_insertcount.out: test_insertcount.in
test_listchars.out: test_listchars.in
test_listlbr.out: test_listlbr.in test_listlbr.out: test_listlbr.in
test_listlbr_utf8.out: test_listlbr_utf8.in test_listlbr_utf8.out: test_listlbr_utf8.in
test_mapping.out: test_mapping.in test_mapping.out: test_mapping.in

View File

@ -45,6 +45,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \

View File

@ -67,6 +67,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \

View File

@ -47,6 +47,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \

View File

@ -4,7 +4,7 @@
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
# #
# Last change: 2015 Mar 24 # Last change: 2015 Apr 21
# #
# This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
# Edit the lines in the Configuration section below to select. # Edit the lines in the Configuration section below to select.
@ -106,6 +106,7 @@ SCRIPT = test1.out test2.out test3.out test4.out test5.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \

View File

@ -43,6 +43,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
test_erasebackword.out \ test_erasebackword.out \
test_eval.out \ test_eval.out \
test_insertcount.out \ test_insertcount.out \
test_listchars.out \
test_listlbr.out \ test_listlbr.out \
test_listlbr_utf8.out \ test_listlbr_utf8.out \
test_mapping.out \ test_mapping.out \

View File

@ -0,0 +1,53 @@
Tests for 'listchars' display with 'list' and :list
STARTTEST
:so small.vim
:let g:lines = []
:function GetScreenCharsForLine(lnum)
: return join(map(range(1, virtcol('$')), 'nr2char(screenchar(a:lnum, v:val))'), '')
:endfunction
:nnoremap <expr> GG ":call add(g:lines, GetScreenCharsForLine(".screenrow()."))\<CR>"
:set listchars+=tab:>-,space:.,trail:<
:set list
:
/^start:/
:normal! jzt
GG
GG
GG
GG
GGH:
:set listchars-=trail:<
GG
GG
GG
GG
GG:
:put =g:lines
:'[,']w! test.out
ENDTEST
start:
aa
bb
cccc
dd ee
STARTTEST
:set listchars+=trail:<
:set nolist
:
/^start:/
:redir! >> test.out
:+1,$list
:redir END
:q!
ENDTEST
start:
fff
gg
h
iii

View File

@ -0,0 +1,16 @@
>-------aa>-----$
..bb>---<<$
...cccc><$
dd........ee<<>-$
<$
>-------aa>-----$
..bb>---..$
...cccc>.$
dd........ee..>-$
.$
..fff>--<<$
>-------gg>-----$
.....h>-$
iii<<<<><<$

View File

@ -741,6 +741,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 */
/**/
710,
/**/ /**/
709, 709,
/**/ /**/