forked from aniani/vim
updated for version 7.3.487
Problem: When setting 'timeoutlen' or 'ttimeoutlen' the column for vertical movement is reset unnecessarily. Solution: Do not set w_set_curswant for every option. Add a test for this. (Kana Natsuno) Add the P_CURSWANT flag for options.
This commit is contained in:
67
src/option.c
67
src/option.c
@@ -444,6 +444,8 @@ struct vimoption
|
||||
#define P_PRI_MKRC 0x800000L /* priority for :mkvimrc (setting option has
|
||||
side effects) */
|
||||
#define P_NO_ML 0x1000000L /* not allowed in modeline */
|
||||
#define P_CURSWANT 0x2000000L /* update curswant required; not needed when
|
||||
* there is a redraw flag */
|
||||
|
||||
#define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
|
||||
|
||||
@@ -479,7 +481,7 @@ static struct vimoption
|
||||
#endif
|
||||
options[] =
|
||||
{
|
||||
{"aleph", "al", P_NUM|P_VI_DEF,
|
||||
{"aleph", "al", P_NUM|P_VI_DEF|P_CURSWANT,
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
(char_u *)&p_aleph, PV_NONE,
|
||||
#else
|
||||
@@ -501,7 +503,7 @@ static struct vimoption
|
||||
{(char_u *)FALSE, (char_u *)FALSE}
|
||||
#endif
|
||||
SCRIPTID_INIT},
|
||||
{"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM,
|
||||
{"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
|
||||
#ifdef FEAT_ARABIC
|
||||
(char_u *)VAR_WIN, PV_ARAB,
|
||||
#else
|
||||
@@ -778,7 +780,7 @@ static struct vimoption
|
||||
{"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
|
||||
(char_u *)&Columns, PV_NONE,
|
||||
{(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
|
||||
{"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
|
||||
#ifdef FEAT_COMMENTS
|
||||
(char_u *)&p_com, PV_COM,
|
||||
{(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
|
||||
@@ -788,7 +790,7 @@ static struct vimoption
|
||||
{(char_u *)0L, (char_u *)0L}
|
||||
#endif
|
||||
SCRIPTID_INIT},
|
||||
{"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
|
||||
{"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
|
||||
#ifdef FEAT_FOLDING
|
||||
(char_u *)&p_cms, PV_CMS,
|
||||
{(char_u *)"/*%s*/", (char_u *)0L}
|
||||
@@ -953,7 +955,7 @@ static struct vimoption
|
||||
{"debug", NULL, P_STRING|P_VI_DEF,
|
||||
(char_u *)&p_debug, PV_NONE,
|
||||
{(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
|
||||
{"define", "def", P_STRING|P_ALLOCED|P_VI_DEF,
|
||||
{"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
|
||||
#ifdef FEAT_FIND_ID
|
||||
(char_u *)&p_def, PV_DEF,
|
||||
{(char_u *)"^\\s*#\\s*define", (char_u *)0L}
|
||||
@@ -983,7 +985,7 @@ static struct vimoption
|
||||
(char_u *)NULL, PV_NONE,
|
||||
#endif
|
||||
{(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE,
|
||||
{"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
|
||||
#if defined(FEAT_DIFF) && defined(FEAT_EVAL)
|
||||
(char_u *)&p_dex, PV_NONE,
|
||||
{(char_u *)"", (char_u *)0L}
|
||||
@@ -1099,7 +1101,7 @@ static struct vimoption
|
||||
{(char_u *)0L, (char_u *)0L}
|
||||
#endif
|
||||
SCRIPTID_INIT},
|
||||
{"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
|
||||
{"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
|
||||
(char_u *)&p_ff, PV_FF,
|
||||
{(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP,
|
||||
@@ -1159,7 +1161,7 @@ static struct vimoption
|
||||
{"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
|
||||
(char_u *)VAR_WIN, PV_FDL,
|
||||
{(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"foldlevelstart","fdls", P_NUM|P_VI_DEF,
|
||||
{"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
|
||||
(char_u *)&p_fdls, PV_NONE,
|
||||
{(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
|
||||
@@ -1176,7 +1178,7 @@ static struct vimoption
|
||||
{"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
|
||||
(char_u *)VAR_WIN, PV_FDN,
|
||||
{(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
|
||||
{"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
|
||||
(char_u *)&p_fdo, PV_NONE,
|
||||
{(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
|
||||
(char_u *)0L} SCRIPTID_INIT},
|
||||
@@ -1741,7 +1743,7 @@ static struct vimoption
|
||||
{"matchtime", "mat", P_NUM|P_VI_DEF,
|
||||
(char_u *)&p_mat, PV_NONE,
|
||||
{(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
|
||||
{"maxcombine", "mco", P_NUM|P_VI_DEF,
|
||||
{"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
|
||||
#ifdef FEAT_MBYTE
|
||||
(char_u *)&p_mco, PV_NONE,
|
||||
#else
|
||||
@@ -2710,7 +2712,7 @@ static struct vimoption
|
||||
{(char_u *)0L, (char_u *)0L}
|
||||
#endif
|
||||
SCRIPTID_INIT},
|
||||
{"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
|
||||
{"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
|
||||
#ifdef FEAT_VIRTUALEDIT
|
||||
(char_u *)&p_ve, PV_NONE,
|
||||
{(char_u *)"", (char_u *)""}
|
||||
@@ -7064,8 +7066,10 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
||||
}
|
||||
#endif
|
||||
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */
|
||||
if (curwin->w_curswant != MAXCOL
|
||||
&& (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
/* check redraw when it's not a GUI option or the GUI is active. */
|
||||
if (!redraw_gui_only || gui.in_use)
|
||||
@@ -7587,9 +7591,6 @@ set_bool_option(opt_idx, varp, value, opt_flags)
|
||||
|| (int *)varp == &curwin->w_p_nu
|
||||
|| (int *)varp == &curwin->w_p_rnu)
|
||||
{
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
|
||||
/* If 'number' is set, reset 'relativenumber'. */
|
||||
/* If 'relativenumber' is set, reset 'number'. */
|
||||
if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
|
||||
@@ -7834,8 +7835,6 @@ set_bool_option(opt_idx, varp, value, opt_flags)
|
||||
{
|
||||
if (curwin->w_p_wrap)
|
||||
curwin->w_leftcol = 0;
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
@@ -8062,31 +8061,8 @@ set_bool_option(opt_idx, varp, value, opt_flags)
|
||||
curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
|
||||
# endif
|
||||
}
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
|
||||
else if ((int *)varp == &p_arshape)
|
||||
{
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_LINEBREAK
|
||||
if ((int *)varp == &curwin->w_p_lbr)
|
||||
{
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
if ((int *)varp == &curwin->w_p_rl)
|
||||
{
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -8096,7 +8072,9 @@ set_bool_option(opt_idx, varp, value, opt_flags)
|
||||
options[opt_idx].flags |= P_WAS_SET;
|
||||
|
||||
comp_col(); /* in case 'ruler' or 'showcmd' changed */
|
||||
|
||||
if (curwin->w_curswant != MAXCOL
|
||||
&& (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
check_redraw(options[opt_idx].flags);
|
||||
|
||||
return NULL;
|
||||
@@ -8611,8 +8589,9 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
|
||||
options[opt_idx].flags |= P_WAS_SET;
|
||||
|
||||
comp_col(); /* in case 'columns' or 'ls' changed */
|
||||
if (curwin->w_curswant != MAXCOL)
|
||||
curwin->w_set_curswant = TRUE; /* in case 'tabstop' changed */
|
||||
if (curwin->w_curswant != MAXCOL
|
||||
&& (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
check_redraw(options[opt_idx].flags);
|
||||
|
||||
return errmsg;
|
||||
|
@@ -29,7 +29,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
|
||||
test66.out test67.out test68.out test69.out test70.out \
|
||||
test71.out test72.out test73.out test74.out test75.out \
|
||||
test76.out test77.out test78.out test79.out test80.out \
|
||||
test81.out test82.out test83.out
|
||||
test81.out test82.out test83.out test84.out
|
||||
|
||||
.SUFFIXES: .in .out
|
||||
|
||||
@@ -132,3 +132,4 @@ test80.out: test80.in
|
||||
test81.out: test81.in
|
||||
test82.out: test82.in
|
||||
test83.out: test83.in
|
||||
test84.out: test84.in
|
||||
|
@@ -29,7 +29,8 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
|
||||
test42.out test52.out test65.out test66.out test67.out \
|
||||
test68.out test69.out test71.out test72.out test73.out \
|
||||
test74.out test75.out test76.out test77.out test78.out \
|
||||
test79.out test80.out test81.out test82.out test83.out
|
||||
test79.out test80.out test81.out test82.out test83.out \
|
||||
test84.out
|
||||
|
||||
SCRIPTS32 = test50.out test70.out
|
||||
|
||||
|
@@ -49,7 +49,8 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
|
||||
test42.out test52.out test65.out test66.out test67.out \
|
||||
test68.out test69.out test71.out test72.out test73.out \
|
||||
test74.out test75.out test76.out test77.out test78.out \
|
||||
test79.out test80.out test81.out test82.out test83.out
|
||||
test79.out test80.out test81.out test82.out test83.out \
|
||||
test84.out
|
||||
|
||||
SCRIPTS32 = test50.out test70.out
|
||||
|
||||
|
@@ -29,7 +29,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
|
||||
test66.out test67.out test68.out test69.out test70.out \
|
||||
test71.out test72.out test73.out test74.out test75.out \
|
||||
test76.out test77.out test78.out test79.out test80.out \
|
||||
test81.out test82.out test83.out
|
||||
test81.out test82.out test83.out test84.out
|
||||
|
||||
.SUFFIXES: .in .out
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
|
||||
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
|
||||
#
|
||||
# Last change: 2011 Jul 15
|
||||
# Last change: 2012 Mar 28
|
||||
#
|
||||
# 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.
|
||||
@@ -76,7 +76,7 @@ SCRIPT = test1.out test2.out test3.out test4.out test5.out \
|
||||
test66.out test67.out test68.out test69.out \
|
||||
test71.out test72.out test74.out test75.out test76.out \
|
||||
test77.out test78.out test79.out test80.out test81.out \
|
||||
test82.out test83.out
|
||||
test82.out test83.out test84.out
|
||||
|
||||
# Known problems:
|
||||
# Test 30: a problem around mac format - unknown reason
|
||||
|
@@ -26,7 +26,8 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
|
||||
test64.out test65.out test66.out test67.out test68.out \
|
||||
test69.out test70.out test71.out test72.out test73.out \
|
||||
test74.out test75.out test76.out test77.out test78.out \
|
||||
test79.out test80.out test81.out test82.out test83.out
|
||||
test79.out test80.out test81.out test82.out test83.out \
|
||||
test84.out
|
||||
|
||||
SCRIPTS_GUI = test16.out
|
||||
|
||||
|
35
src/testdir/test84.in
Normal file
35
src/testdir/test84.in
Normal file
@@ -0,0 +1,35 @@
|
||||
Tests for curswant not changing when setting an option
|
||||
|
||||
STARTTEST
|
||||
:so small.vim
|
||||
:/^start target options$/+1,/^end target options$/-1 yank
|
||||
:let target_option_names = split(@0)
|
||||
:function TestCurswant(option_name)
|
||||
: normal! ggf8j
|
||||
: let curswant_before = winsaveview().curswant
|
||||
: execute 'let' '&'.a:option_name '=' '&'.a:option_name
|
||||
: let curswant_after = winsaveview().curswant
|
||||
: return [a:option_name, curswant_before, curswant_after]
|
||||
:endfunction
|
||||
:
|
||||
:new
|
||||
:put =['1234567890', '12345']
|
||||
:1 delete _
|
||||
:let result = []
|
||||
:for option_name in target_option_names
|
||||
: call add(result, TestCurswant(option_name))
|
||||
:endfor
|
||||
:
|
||||
:new
|
||||
:put =map(copy(result), 'join(v:val, '' '')')
|
||||
:1 delete _
|
||||
:write test.out
|
||||
:
|
||||
:qall!
|
||||
ENDTEST
|
||||
|
||||
start target options
|
||||
tabstop
|
||||
timeoutlen
|
||||
ttimeoutlen
|
||||
end target options
|
3
src/testdir/test84.ok
Normal file
3
src/testdir/test84.ok
Normal file
@@ -0,0 +1,3 @@
|
||||
tabstop 7 4
|
||||
timeoutlen 7 7
|
||||
ttimeoutlen 7 7
|
@@ -714,6 +714,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
487,
|
||||
/**/
|
||||
486,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user