aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2018-06-22 09:53:46 +0200
committerGitHub <noreply@github.com>2018-06-22 09:53:46 +0200
commitbf2460e2f980697be54090bdaa6b1bdc618b3791 (patch)
tree9997df764fabad0f60b2aaf81f5935a3f702ff60 /src
parente1c6109e62b4e1d12ebdab67140f82cc7dc2c0d1 (diff)
parent8917e0c3010f93d6238bda21c4807c6c5921eb4a (diff)
downloadrneovim-bf2460e2f980697be54090bdaa6b1bdc618b3791.tar.gz
rneovim-bf2460e2f980697be54090bdaa6b1bdc618b3791.tar.bz2
rneovim-bf2460e2f980697be54090bdaa6b1bdc618b3791.zip
Merge pull request #7551 from bfredl/setl_bufwin
fix copying setl options for buffer currently displayed in another window
Diffstat (limited to 'src')
-rw-r--r--src/nvim/buffer.c11
-rw-r--r--src/nvim/testdir/test_options.vim52
2 files changed, 61 insertions, 2 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index ae535354f8..19c17a9d68 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -2381,8 +2381,15 @@ void get_winopts(buf_T *buf)
clear_winopt(&curwin->w_onebuf_opt);
clearFolding(curwin);
- wip = find_wininfo(buf, TRUE);
- if (wip != NULL && wip->wi_optset) {
+ wip = find_wininfo(buf, true);
+ if (wip != NULL && wip->wi_win != curwin && wip->wi_win != NULL
+ && wip->wi_win->w_buffer == buf) {
+ win_T *wp = wip->wi_win;
+ copy_winopt(&wp->w_onebuf_opt, &curwin->w_onebuf_opt);
+ curwin->w_fold_manual = wp->w_fold_manual;
+ curwin->w_foldinvalid = true;
+ cloneFoldGrowArray(&wp->w_folds, &curwin->w_folds);
+ } else if (wip != NULL && wip->wi_optset) {
copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
curwin->w_fold_manual = wip->wi_fold_manual;
curwin->w_foldinvalid = true;
diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim
index d9cd5fd583..f0aec42ae1 100644
--- a/src/nvim/testdir/test_options.vim
+++ b/src/nvim/testdir/test_options.vim
@@ -287,3 +287,55 @@ func Test_set_indentexpr()
call assert_equal('', &indentexpr)
bwipe!
endfunc
+
+func Test_copy_winopt()
+ set hidden
+
+ " Test copy option from current buffer in window
+ split
+ enew
+ setlocal numberwidth=5
+ wincmd w
+ call assert_equal(4,&numberwidth)
+ bnext
+ call assert_equal(5,&numberwidth)
+ bw!
+ call assert_equal(4,&numberwidth)
+
+ " Test copy value from window that used to be display the buffer
+ split
+ enew
+ setlocal numberwidth=6
+ bnext
+ wincmd w
+ call assert_equal(4,&numberwidth)
+ bnext
+ call assert_equal(6,&numberwidth)
+ bw!
+
+ " Test that if buffer is current, don't use the stale cached value
+ " from the last time the buffer was displayed.
+ split
+ enew
+ setlocal numberwidth=7
+ bnext
+ bnext
+ setlocal numberwidth=8
+ wincmd w
+ call assert_equal(4,&numberwidth)
+ bnext
+ call assert_equal(8,&numberwidth)
+ bw!
+
+ " Test value is not copied if window already has seen the buffer
+ enew
+ split
+ setlocal numberwidth=9
+ bnext
+ setlocal numberwidth=10
+ wincmd w
+ call assert_equal(4,&numberwidth)
+ bnext
+ call assert_equal(4,&numberwidth)
+ bw!
+endfunc