Patch 8.1.1924
Problem: Using empty string for current buffer is unexpected.
Solution: Make the argument optional for bufname() and bufnr().
Files: src/evalfunc.c, src/testdir/test_arglist.vim, runtime/doc/eval.txt
*** ../vim-8.1.1923/src/evalfunc.c 2019-08-24 20:49:58.825320302 +0200
--- src/evalfunc.c 2019-08-24 22:11:16.163188153 +0200
***************
*** 457,469 ****
{"bufadd", 1, 1, FEARG_1, f_bufadd},
{"bufexists", 1, 1, FEARG_1, f_bufexists},
{"buffer_exists", 1, 1, FEARG_1, f_bufexists}, // obsolete
! {"buffer_name", 1, 1, 0, f_bufname}, // obsolete
! {"buffer_number", 1, 1, 0, f_bufnr}, // obsolete
{"buflisted", 1, 1, FEARG_1, f_buflisted},
{"bufload", 1, 1, FEARG_1, f_bufload},
{"bufloaded", 1, 1, FEARG_1, f_bufloaded},
! {"bufname", 1, 1, FEARG_1, f_bufname},
! {"bufnr", 1, 2, FEARG_1, f_bufnr},
{"bufwinid", 1, 1, FEARG_1, f_bufwinid},
{"bufwinnr", 1, 1, FEARG_1, f_bufwinnr},
{"byte2line", 1, 1, FEARG_1, f_byte2line},
--- 457,469 ----
{"bufadd", 1, 1, FEARG_1, f_bufadd},
{"bufexists", 1, 1, FEARG_1, f_bufexists},
{"buffer_exists", 1, 1, FEARG_1, f_bufexists}, // obsolete
! {"buffer_name", 0, 1, FEARG_1, f_bufname}, // obsolete
! {"buffer_number", 0, 1, FEARG_1, f_bufnr}, // obsolete
{"buflisted", 1, 1, FEARG_1, f_buflisted},
{"bufload", 1, 1, FEARG_1, f_bufload},
{"bufloaded", 1, 1, FEARG_1, f_bufloaded},
! {"bufname", 0, 1, FEARG_1, f_bufname},
! {"bufnr", 0, 2, FEARG_1, f_bufnr},
{"bufwinid", 1, 1, FEARG_1, f_bufwinid},
{"bufwinnr", 1, 1, FEARG_1, f_bufwinnr},
{"byte2line", 1, 1, FEARG_1, f_byte2line},
***************
*** 1820,1834 ****
{
buf_T *buf;
! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */
! ++emsg_off;
! buf = tv_get_buf(&argvars[0], FALSE);
rettv->v_type = VAR_STRING;
if (buf != NULL && buf->b_fname != NULL)
rettv->vval.v_string = vim_strsave(buf->b_fname);
else
rettv->vval.v_string = NULL;
- --emsg_off;
}
/*
--- 1820,1839 ----
{
buf_T *buf;
! if (argvars[0].v_type == VAR_UNKNOWN)
! buf = curbuf;
! else
! {
! (void)tv_get_number(&argvars[0]); // issue errmsg if type error
! ++emsg_off;
! buf = tv_get_buf(&argvars[0], FALSE);
! --emsg_off;
! }
rettv->v_type = VAR_STRING;
if (buf != NULL && buf->b_fname != NULL)
rettv->vval.v_string = vim_strsave(buf->b_fname);
else
rettv->vval.v_string = NULL;
}
/*
***************
*** 1841,1853 ****
int error = FALSE;
char_u *name;
! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */
! ++emsg_off;
! buf = tv_get_buf(&argvars[0], FALSE);
! --emsg_off;
! /* If the buffer isn't found and the second argument is not zero create a
! * new buffer. */
if (buf == NULL
&& argvars[1].v_type != VAR_UNKNOWN
&& tv_get_number_chk(&argvars[1], &error) != 0
--- 1846,1863 ----
int error = FALSE;
char_u *name;
! if (argvars[0].v_type == VAR_UNKNOWN)
! buf = curbuf;
! else
! {
! (void)tv_get_number(&argvars[0]); // issue errmsg if type error
! ++emsg_off;
! buf = tv_get_buf(&argvars[0], FALSE);
! --emsg_off;
! }
! // If the buffer isn't found and the second argument is not zero create a
! // new buffer.
if (buf == NULL
&& argvars[1].v_type != VAR_UNKNOWN
&& tv_get_number_chk(&argvars[1], &error) != 0
*** ../vim-8.1.1923/src/testdir/test_arglist.vim 2019-08-18
23:01:33.725885954 +0200
--- src/testdir/test_arglist.vim 2019-08-24 22:00:35.866048714 +0200
***************
*** 398,407 ****
" make sure to use a new buffer number for x when it is loaded
bw! x
new
! let a = bufnr('')
argedit x
! call assert_equal(a, bufnr(''))
! call assert_equal('x', bufname(''))
%argd
bw! x
endfunc
--- 398,407 ----
" make sure to use a new buffer number for x when it is loaded
bw! x
new
! let a = bufnr()
argedit x
! call assert_equal(a, bufnr())
! call assert_equal('x', bufname())
%argd
bw! x
endfunc
*** ../vim-8.1.1923/runtime/doc/eval.txt 2019-08-24 20:49:58.825320302
+0200
--- runtime/doc/eval.txt 2019-08-24 22:13:24.134613987 +0200
***************
*** 2330,2337 ****
buflisted({expr}) Number |TRUE| if buffer {expr} is listed
bufload({expr}) Number load buffer {expr} if not
loaded yet
bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded
! bufname({expr}) String Name of the buffer {expr}
! bufnr({expr} [, {create}]) Number Number of the buffer {expr}
bufwinid({expr}) Number window ID of buffer {expr}
bufwinnr({expr}) Number window number of buffer {expr}
byte2line({byte}) Number line number at byte count {byte}
--- 2335,2342 ----
buflisted({expr}) Number |TRUE| if buffer {expr} is listed
bufload({expr}) Number load buffer {expr} if not
loaded yet
bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded
! bufname([{expr}]) String Name of the buffer {expr}
! bufnr([{expr} [, {create}]]) Number Number of the buffer {expr}
bufwinid({expr}) Number window ID of buffer {expr}
bufwinnr({expr}) Number window number of buffer {expr}
byte2line({byte}) Number line number at byte count {byte}
***************
*** 3212,3220 ****
Can also be used as a |method|: >
let loaded = 'somename'->bufloaded()
! bufname({expr}) *bufname()*
The result is the name of a buffer, as it is displayed by the
":ls" command.
If {expr} is a Number, that buffer number's name is given.
Number zero is the alternate buffer for the current window.
If {expr} is a String, it is used as a |file-pattern| to match
--- 3217,3226 ----
Can also be used as a |method|: >
let loaded = 'somename'->bufloaded()
! bufname([{expr}]) *bufname()*
The result is the name of a buffer, as it is displayed by the
":ls" command.
+ If {expr} is omitted the current buffer is used.
If {expr} is a Number, that buffer number's name is given.
Number zero is the alternate buffer for the current window.
If {expr} is a String, it is used as a |file-pattern| to match
***************
*** 3246,3252 ****
Obsolete name: buffer_name().
*bufnr()*
! bufnr({expr} [, {create}])
The result is the number of a buffer, as it is displayed by
the ":ls" command. For the use of {expr}, see |bufname()|
above.
--- 3252,3258 ----
Obsolete name: buffer_name().
*bufnr()*
! bufnr([{expr} [, {create}]])
The result is the number of a buffer, as it is displayed by
the ":ls" command. For the use of {expr}, see |bufname()|
above.
***************
*** 3254,3260 ****
{create} argument is present and not zero, a new, unlisted,
buffer is created and its number is returned.
bufnr("$") is the last buffer: >
! :let last_buffer = bufnr("$")
< The result is a Number, which is the highest buffer number
of existing buffers. Note that not all buffers with a smaller
number necessarily exist, because ":bwipeout" may have removed
--- 3260,3266 ----
{create} argument is present and not zero, a new, unlisted,
buffer is created and its number is returned.
bufnr("$") is the last buffer: >
! :let last_buffer = bufnr("$")
< The result is a Number, which is the highest buffer number
of existing buffers. Note that not all buffers with a smaller
number necessarily exist, because ":bwipeout" may have removed
***************
*** 7192,7198 ****
that was entered at the prompt. This can be an empty string
if the user only typed Enter.
Example: >
! call prompt_setcallback(bufnr(''), function('s:TextEntered'))
func s:TextEntered(text)
if a:text == 'exit' || a:text == 'quit'
stopinsert
--- 7202,7208 ----
that was entered at the prompt. This can be an empty string
if the user only typed Enter.
Example: >
! call prompt_setcallback(bufnr(), function('s:TextEntered'))
func s:TextEntered(text)
if a:text == 'exit' || a:text == 'quit'
stopinsert
***************
*** 7218,7224 ****
{text} to end in a space.
The result is only visible if {buf} has 'buftype' set to
"prompt". Example: >
! call prompt_setprompt(bufnr(''), 'command: ')
<
prop_ functions are documented here: |text-prop-functions|.
--- 7228,7234 ----
{text} to end in a space.
The result is only visible if {buf} has 'buftype' set to
"prompt". Example: >
! call prompt_setprompt(bufnr(), 'command: ')
<
prop_ functions are documented here: |text-prop-functions|.
*** ../vim-8.1.1923/src/version.c 2019-08-24 21:53:12.000023828 +0200
--- src/version.c 2019-08-24 22:13:47.974506989 +0200
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 1924,
/**/
--
hundred-and-one symptoms of being an internet addict:
114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...".
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/201908242015.x7OKFOpX011092%40masaka.moolenaar.net.