aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt47
-rw-r--r--src/nvim/eval.c43
-rw-r--r--src/nvim/testdir/test_bufwintabinfo.vim24
-rw-r--r--src/nvim/version.c2
4 files changed, 86 insertions, 30 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index d97c10ee84..0a5a51a0e1 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 7.4. Last change: 2016 Jun 04
+*eval.txt* For Vim version 7.4. Last change: 2016 Aug 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3625,26 +3625,31 @@ getbufinfo([{dict}])
lnum current line number in buffer.
loaded TRUE if the buffer is loaded.
name full path to the file in the buffer.
- options dictionary of buffer local options.
signs list of signs placed in the buffer.
Each list item is a dictionary with
the following fields:
id sign identifier
lnum line number
name sign name
- variables dictionary of buffer local variables.
- windows list of window IDs with this buffer
+ variables a reference to the dictionary with
+ buffer-local variables.
+ windows list of |window-ID|s that display this
+ buffer
Examples: >
for buf in getbufinfo()
echo buf.name
endfor
for buf in getbufinfo({'buflisted':1})
- if buf.options.filetype == 'java'
+ if buf.changed
....
endif
endfor
<
+ To get buffer-local options use: >
+ getbufvar({bufnr}, '&')
+
+<
*getbufline()*
getbufline({expr}, {lnum} [, {end}])
Return a |List| with the lines starting from {lnum} to {end}
@@ -3676,6 +3681,10 @@ getbufvar({expr}, {varname} [, {def}]) *getbufvar()*
must be used.
When {varname} is empty returns a dictionary with all the
buffer-local variables.
+ When {varname} is equal to "&" returns a dictionary with all
+ the buffer-local options.
+ Otherwise, when {varname} starts with "&" returns the value of
+ a buffer-local option.
This also works for a global or buffer-local option, but it
doesn't work for a global variable, window-local variable or
window-local option.
@@ -4111,8 +4120,9 @@ gettabinfo([{arg}]) *gettabinfo()*
Each List item is a Dictionary with the following entries:
nr tab page number.
+ variables a reference to the dictionary with
+ tabpage-local variables
windows List of window IDs in the tag page.
- variables dictionary of tabpage local variables.
gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
Get the value of a tab-local variable {varname} in tab page
@@ -4127,10 +4137,12 @@ gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
Get the value of window-local variable {varname} in window
{winnr} in tab page {tabnr}.
- When {varname} starts with "&" get the value of a window-local
- option.
When {varname} is empty a dictionary with all window-local
variables is returned.
+ When {varname} is equal to "&" get the values of all
+ window-local options in a Dictionary.
+ Otherwise, when {varname} starts with "&" get the value of a
+ window-local option.
Note that {varname} must be the name without "w:".
Tabs are numbered starting with one. For the current tabpage
use |getwinvar()|.
@@ -4170,13 +4182,16 @@ getwininfo([{winid}]) *getwininfo()*
height window height
loclist 1 if showing a location list
nr window number
- options dictionary of window local options
quickfix 1 if quickfix or location list window
tpnr tab page number
- variables dictionary of window local variables
+ variables a reference to the dictionary with
+ window-local variables
width window width
winid window ID
+ To obtain all window-local variables use: >
+ gettabwinvar({tabnr}, {winnr}, '&')
+
getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Like |gettabwinvar()| for the current tabpage.
Examples: >
@@ -5544,6 +5559,16 @@ printf({fmt}, {expr1} ...) *printf()*
numeric field; if the result of a conversion is wider
than the field width, the field is expanded to contain
the conversion result.
+ The 'h' modifier indicates the argument is 16 bits.
+ The 'l' modifier indicates the argument is 32 bits.
+ The 'L' modifier indicates the argument is 64 bits.
+ Generally, these modifiers are not useful. They are
+ ignored when type is known from the argument.
+
+ i alias for d
+ D alias for ld
+ U alias for lu
+ O alias for lo
*printf-c*
c The Number argument is converted to a byte, and the
@@ -5560,7 +5585,7 @@ printf({fmt}, {expr1} ...) *printf()*
feature works just like 's'.
*printf-f* *E807*
- f The Float argument is converted into a string of the
+ f F The Float argument is converted into a string of the
form 123.456. The precision specifies the number of
digits after the decimal point. When the precision is
zero the decimal point is omitted. When the precision
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 59d1132c79..2b325bbf20 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -9883,12 +9883,6 @@ static dict_T *get_buffer_info(buf_T *buf)
// Get a reference to buffer variables
dict_add_dict(dict, "variables", buf->b_vars);
- // Copy buffer options
- dict_T *opts = get_winbuf_options(true);
- if (opts != NULL) {
- dict_add_dict(dict, "options", opts);
- }
-
// List of windows displaying this buffer
list_T *windows = list_alloc();
FOR_ALL_TAB_WINDOWS(tp, wp) {
@@ -10056,8 +10050,20 @@ static void f_getbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
curbuf = buf;
if (*varname == '&') { /* buffer-local-option */
- if (get_option_tv(&varname, rettv, TRUE) == OK)
+ if (varname[1] == NUL) {
+ // get all buffer-local options in a dict
+ dict_T *opts = get_winbuf_options(true);
+
+ if (opts != NULL) {
+ rettv->v_type = VAR_DICT;
+ rettv->vval.v_dict = opts;
+ opts->dv_refcount++;
+ done = true;
+ }
+ } else if (get_option_tv(&varname, rettv, true) == OK) {
+ // buffer-local-option
done = TRUE;
+ }
} else if (STRCMP(varname, "changedtick") == 0) {
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = curbuf->b_changedtick;
@@ -10904,15 +10910,9 @@ static dict_T *get_win_info(win_T *wp, short tpnr, short winnr)
(bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL),
NULL);
- // Make a reference to window variables
+ // Add a reference to window variables
dict_add_dict(dict, "variables", wp->w_vars);
- // Copy window options
- dict_T *opts = get_winbuf_options(false);
- if (opts != NULL) {
- dict_add_dict(dict, "options", opts);
- }
-
return dict;
}
@@ -11072,8 +11072,19 @@ getwinvar (
bool need_switch_win = tp != curtab || win != curwin;
if (!need_switch_win
|| switch_win(&oldcurwin, &oldtabpage, win, tp, true) == OK) {
- if (*varname == '&') { // window-local-option
- if (get_option_tv(&varname, rettv, 1) == OK) {
+ if (*varname == '&') {
+ if (varname[1] == NUL) {
+ // get all window-local options in a dict
+ dict_T *opts = get_winbuf_options(false);
+
+ if (opts != NULL) {
+ rettv->v_type = VAR_DICT;
+ rettv->vval.v_dict = opts;
+ opts->dv_refcount++;
+ done = true;
+ }
+ } else if (get_option_tv(&varname, rettv, 1) == OK) {
+ // window-local-option
done = true;
}
} else {
diff --git a/src/nvim/testdir/test_bufwintabinfo.vim b/src/nvim/testdir/test_bufwintabinfo.vim
index 42c016621f..5c916e2dd7 100644
--- a/src/nvim/testdir/test_bufwintabinfo.vim
+++ b/src/nvim/testdir/test_bufwintabinfo.vim
@@ -18,7 +18,6 @@ function Test_getbufwintabinfo()
let b:editor = 'vim'
let l = getbufinfo('%')
call assert_equal(bufnr('%'), l[0].bufnr)
- call assert_equal(8, l[0].options.tabstop)
call assert_equal('vim', l[0].variables.editor)
call assert_notequal(-1, index(l[0].windows, bufwinid('%')))
@@ -49,7 +48,6 @@ function Test_getbufwintabinfo()
call assert_equal(winbufnr(2), winlist[1].bufnr)
call assert_equal(winheight(2), winlist[1].height)
call assert_equal(1, winlist[2].winnr)
- call assert_equal('auto', winlist[0].options.signcolumn)
call assert_equal(2, winlist[3].tabnr)
call assert_equal('green', winlist[2].variables.signal)
call assert_equal(winwidth(1), winlist[0].width)
@@ -81,3 +79,25 @@ function Test_getbufwintabinfo()
call assert_false(winlist[2].loclist)
wincmd t | only
endfunction
+
+function Test_get_buf_options()
+ let opts = getbufvar(bufnr('%'), '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(8, opts.tabstop)
+endfunc
+
+function Test_get_win_options()
+ let opts = getwinvar(1, '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(0, opts.linebreak)
+ if has('signs')
+ call assert_equal('auto', opts.signcolumn)
+ endif
+
+ let opts = gettabwinvar(1, 1, '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(0, opts.linebreak)
+ if has('signs')
+ call assert_equal('auto', opts.signcolumn)
+ endif
+endfunc
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 4ad4c82928..55d86b3aec 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -167,7 +167,7 @@ static int included_patches[] = {
// 2276,
// 2275,
2274,
- // 2273,
+ 2273,
2272,
// 2271 NA
// 2270 NA