patch 9.1.0890: %! item not allowed for 'rulerformat'

Problem:  %! item not allowed for 'rulerformat'
          (yatinlala)
Solution: also allow to use %! for rulerformat option
          (Yegappan Lakshmanan)

fixes: #16091
closes: #16118

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yegappan Lakshmanan
2024-11-27 20:55:45 +01:00
committed by Christian Brabandt
parent 7e501f4d99
commit ac023e8baa
7 changed files with 37 additions and 3 deletions

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 9.1. Last change: 2024 Nov 24 *options.txt* For Vim version 9.1. Last change: 2024 Nov 27
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -7870,6 +7870,7 @@ A jump table for the options with a short description can be found at |Q_op|.
All fields except the {item} are optional. A single percent sign can All fields except the {item} are optional. A single percent sign can
be given as "%%". be given as "%%".
*stl-%!*
When the option starts with "%!" then it is used as an expression, When the option starts with "%!" then it is used as an expression,
evaluated and the result is used as the option value. Example: > evaluated and the result is used as the option value. Example: >
:set statusline=%!MyStatusLine() :set statusline=%!MyStatusLine()

View File

@ -10222,6 +10222,7 @@ state() builtin.txt /*state()*
static-tag tagsrch.txt /*static-tag* static-tag tagsrch.txt /*static-tag*
status-line windows.txt /*status-line* status-line windows.txt /*status-line*
statusmsg-variable eval.txt /*statusmsg-variable* statusmsg-variable eval.txt /*statusmsg-variable*
stl-%! options.txt /*stl-%!*
stl-%{ options.txt /*stl-%{* stl-%{ options.txt /*stl-%{*
str2float() builtin.txt /*str2float()* str2float() builtin.txt /*str2float()*
str2list() builtin.txt /*str2list()* str2list() builtin.txt /*str2list()*

View File

@ -1,4 +1,4 @@
*version9.txt* For Vim version 9.1. Last change: 2024 Nov 14 *version9.txt* For Vim version 9.1. Last change: 2024 Nov 27
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -41607,6 +41607,8 @@ Changed~
started via |:Tutor| started via |:Tutor|
- improve the |vimtutor| and add a second chapter for more advanced tips - improve the |vimtutor| and add a second chapter for more advanced tips
- allow to pass local Vim script variables to python interpreter |py3eval()| - allow to pass local Vim script variables to python interpreter |py3eval()|
- |getwininfo()| now also returns the "leftcol" property for a window
- 'rulerformat' now supports the |stl-%!| item
*added-9.2* *added-9.2*
Added ~ Added ~

View File

@ -3330,7 +3330,12 @@ parse_statustabline_rulerformat(optset_T *args, int rulerformat)
if (wid && *s == '(' && (errmsg = check_stl_option(p_ruf)) == NULL) if (wid && *s == '(' && (errmsg = check_stl_option(p_ruf)) == NULL)
ru_wid = wid; ru_wid = wid;
else else
errmsg = check_stl_option(p_ruf); {
// Validate the flags in 'rulerformat' only if it doesn't point to
// a custom function ("%!" flag).
if ((*varp)[1] != '!')
errmsg = check_stl_option(p_ruf);
}
} }
// check 'statusline' or 'tabline' only if it doesn't start with "%!" // check 'statusline' or 'tabline' only if it doesn't start with "%!"
else if (rulerformat || s[0] != '%' || s[1] != '!') else if (rulerformat || s[0] != '%' || s[1] != '!')

View File

@ -0,0 +1,2 @@
> +0&#ffffff0@39
@22|1|0|,|2|0| @8|3|0|%|

View File

@ -3867,6 +3867,27 @@ func Test_rulerformat_position()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
" Test for using "%!" in 'rulerformat' to use a function
func Test_rulerformat_function()
CheckScreendump
let lines =<< trim END
func TestRulerFn()
return '10,20%=30%%'
endfunc
END
call writefile(lines, 'Xrulerformat_function', 'D')
let buf = RunVimInTerminal('-S Xrulerformat_function', #{rows: 2, cols: 40})
call term_sendkeys(buf, ":set ruler rulerformat=%!TestRulerFn()\<CR>")
call term_sendkeys(buf, ":redraw!\<CR>")
call term_wait(buf)
call VerifyScreenDump(buf, 'Test_rulerformat_function', {})
" clean up
call StopVimInTerminal(buf)
endfunc
func Test_getcompletion_usercmd() func Test_getcompletion_usercmd()
command! -nargs=* -complete=command TestCompletion echo <q-args> command! -nargs=* -complete=command TestCompletion echo <q-args>

View File

@ -704,6 +704,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 */
/**/
890,
/**/ /**/
889, 889,
/**/ /**/