Skip to content

Commit 2075402

Browse files
committed
updated for version 7.3.861
Problem: ":setlocal number" clears global value of 'relativenumber'. Solution: Do it properly. (Markus Heidelberg)
1 parent 1e284f5 commit 2075402

File tree

4 files changed

+78
-13
lines changed

4 files changed

+78
-13
lines changed

src/option.c

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7631,22 +7631,33 @@ set_bool_option(opt_idx, varp, value, opt_flags)
76317631
}
76327632
#endif
76337633

7634-
/* 'number', 'relativenumber' */
7635-
else if ((int *)varp == &curwin->w_p_nu
7636-
|| (int *)varp == &curwin->w_p_rnu)
7634+
/* If 'number' is set, reset 'relativenumber'. */
7635+
/* If 'relativenumber' is set, reset 'number'. */
7636+
else if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
76377637
{
7638-
/* If 'number' is set, reset 'relativenumber'. */
7639-
/* If 'relativenumber' is set, reset 'number'. */
7640-
if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
7641-
{
7642-
curwin->w_p_rnu = FALSE;
7638+
curwin->w_p_rnu = FALSE;
7639+
7640+
/* Only reset the global value if the own value is set globally. */
7641+
if (((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0))
76437642
curwin->w_allbuf_opt.wo_rnu = FALSE;
7644-
}
7645-
if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
7646-
{
7647-
curwin->w_p_nu = FALSE;
7643+
}
7644+
else if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
7645+
{
7646+
curwin->w_p_nu = FALSE;
7647+
7648+
/* Only reset the global value if the own value is set globally. */
7649+
if (((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0))
76487650
curwin->w_allbuf_opt.wo_nu = FALSE;
7649-
}
7651+
}
7652+
else if ((int *)varp == &curwin->w_allbuf_opt.wo_nu
7653+
&& curwin->w_allbuf_opt.wo_nu)
7654+
{
7655+
curwin->w_allbuf_opt.wo_rnu = FALSE;
7656+
}
7657+
else if ((int *)varp == &curwin->w_allbuf_opt.wo_rnu
7658+
&& curwin->w_allbuf_opt.wo_rnu)
7659+
{
7660+
curwin->w_allbuf_opt.wo_nu = FALSE;
76507661
}
76517662

76527663
else if ((int *)varp == &curbuf->b_p_ro)

src/testdir/test89.in

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,43 @@ STARTTEST
1010
:$put ='results:'
1111
:$put a
1212
:$put b
13+
:"
14+
:set nonu nornu
15+
:setglobal nu
16+
:setlocal rnu
17+
:redir @c | setglobal nu? | redir END
18+
:set nonu nornu
19+
:setglobal rnu
20+
:setlocal nu
21+
:redir @d | setglobal rnu? | redir END
22+
:$put =':setlocal must NOT reset the other global value'
23+
:$put c
24+
:$put d
25+
:"
26+
:set nonu nornu
27+
:setglobal nu
28+
:setglobal rnu
29+
:redir @e | setglobal nu? | redir END
30+
:set nonu nornu
31+
:setglobal rnu
32+
:setglobal nu
33+
:redir @f | setglobal rnu? | redir END
34+
:$put =':setglobal MUST reset the other global value'
35+
:$put e
36+
:$put f
37+
:"
38+
:set nonu nornu
39+
:set nu
40+
:set rnu
41+
:redir @g | setglobal nu? | redir END
42+
:set nonu nornu
43+
:set rnu
44+
:set nu
45+
:redir @h | setglobal rnu? | redir END
46+
:$put =':set MUST reset the other global value'
47+
:$put g
48+
:$put h
49+
:"
1350
:/^results/,$w! test.out
1451
:q!
1552
ENDTEST

src/testdir/test89.ok

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,18 @@ nonumber
55

66
nonumber
77
relativenumber
8+
:setlocal must NOT reset the other global value
9+
10+
number
11+
12+
relativenumber
13+
:setglobal MUST reset the other global value
14+
15+
nonumber
16+
17+
norelativenumber
18+
:set MUST reset the other global value
19+
20+
nonumber
21+
22+
norelativenumber

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,8 @@ static char *(features[]) =
728728

729729
static int included_patches[] =
730730
{ /* Add new patch number below this line */
731+
/**/
732+
861,
731733
/**/
732734
860,
733735
/**/

0 commit comments

Comments
 (0)