aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-12-27 14:24:54 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-12-27 14:37:19 -0500
commitcff4cad25a1236bd869843f9578b7f276518d9b8 (patch)
tree2c87eac4aec90d17cf8448f9f3b2d58765454d06 /src
parent883114e8824ecf5094faa2c860bd1379228d209f (diff)
downloadrneovim-cff4cad25a1236bd869843f9578b7f276518d9b8.tar.gz
rneovim-cff4cad25a1236bd869843f9578b7f276518d9b8.tar.bz2
rneovim-cff4cad25a1236bd869843f9578b7f276518d9b8.zip
vim-patch:8.2.2231: when "--remote file" is used "file" is not reloaded
Problem: When "--remote file" is used "file" is not reloaded. Solution: When a :drop command is used for a file that is already displayed in a window and it has not been changed, check if it needs to be reloaded. (closes vim/vim#7560) https://github.com/vim/vim/commit/e4862a0fe62261754daf476866ef2aa8586b716c Remove unused "focus" parameter from "buf_check_timestamp()". It was meant for removed GUI code.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/buffer.c2
-rw-r--r--src/nvim/diff.c2
-rw-r--r--src/nvim/ex_cmds.c2
-rw-r--r--src/nvim/ex_cmds2.c10
-rw-r--r--src/nvim/fileio.c9
-rw-r--r--src/nvim/testdir/test_clientserver.vim9
6 files changed, 23 insertions, 11 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index a8cb90ff0e..93a03986e5 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1587,7 +1587,7 @@ void enter_buffer(buf_T *buf)
need_fileinfo = true; // display file info after redraw
}
// check if file changed
- (void)buf_check_timestamp(curbuf, false);
+ (void)buf_check_timestamp(curbuf);
curwin->w_topline = 1;
curwin->w_topfill = 0;
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 4d72117fed..93bc34fa4b 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -805,7 +805,7 @@ static void diff_try_update(diffio_T *dio,
for (idx_new = idx_orig; idx_new < DB_COUNT; idx_new++) {
buf = curtab->tp_diffbuf[idx_new];
if (buf_valid(buf)) {
- buf_check_timestamp(buf, false);
+ buf_check_timestamp(buf);
}
}
}
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index c0f08139ec..a7d97c904b 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -2323,7 +2323,7 @@ int do_ecmd(
// Existing memfile.
oldbuf = true;
set_bufref(&bufref, buf);
- (void)buf_check_timestamp(buf, false);
+ (void)buf_check_timestamp(buf);
// Check if autocommands made buffer invalid or changed the current
// buffer.
if (!bufref_valid(&bufref) || curbuf != old_curbuf.br_buf) {
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 3b9c44c3cd..bde584d27e 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -3392,7 +3392,7 @@ void ex_checktime(exarg_T *eap)
} else {
buf = buflist_findnr((int)eap->line2);
if (buf != NULL) { // cannot happen?
- (void)buf_check_timestamp(buf, false);
+ (void)buf_check_timestamp(buf);
}
}
no_check_timestamps = save_no_check_timestamps;
@@ -3790,6 +3790,14 @@ void ex_drop(exarg_T *eap)
if (wp->w_buffer == buf) {
goto_tabpage_win(tp, wp);
curwin->w_arg_idx = 0;
+ if (!bufIsChanged(curbuf)) {
+ const int save_ar = curbuf->b_p_ar;
+
+ // reload the file if it is newer
+ curbuf->b_p_ar = 1;
+ buf_check_timestamp(curbuf);
+ curbuf->b_p_ar = save_ar;
+ }
return;
}
}
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 1568bf3fbb..e1e34bf24a 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -4675,7 +4675,6 @@ check_timestamps(
)
{
int didit = 0;
- int n;
/* Don't check timestamps while system() or another low-level function may
* cause us to lose and gain focus. */
@@ -4703,7 +4702,7 @@ check_timestamps(
if (buf->b_nwindows > 0) {
bufref_T bufref;
set_bufref(&bufref, buf);
- n = buf_check_timestamp(buf, focus);
+ const int n = buf_check_timestamp(buf);
if (didit < n) {
didit = n;
}
@@ -4773,11 +4772,7 @@ static int move_lines(buf_T *frombuf, buf_T *tobuf)
* return 2 if a message has been displayed.
* return 0 otherwise.
*/
-int
-buf_check_timestamp(
- buf_T *buf,
- int focus /* called for GUI focus event */
-)
+int buf_check_timestamp(buf_T *buf)
FUNC_ATTR_NONNULL_ALL
{
int retval = 0;
diff --git a/src/nvim/testdir/test_clientserver.vim b/src/nvim/testdir/test_clientserver.vim
index 3377f86126..53704bd094 100644
--- a/src/nvim/testdir/test_clientserver.vim
+++ b/src/nvim/testdir/test_clientserver.vim
@@ -61,6 +61,15 @@ func Test_client_server()
call assert_fails('call remote_send("XXX", ":let testvar = ''yes''\<CR>")', 'E241')
+ call writefile(['one'], 'Xclientfile')
+ let cmd = GetVimProg() .. ' --servername ' .. name .. ' --remote Xclientfile'
+ call system(cmd)
+ call WaitForAssert({-> assert_equal('Xclientfile', remote_expr(name, "bufname()", "", 2))})
+ call WaitForAssert({-> assert_equal('one', remote_expr(name, "getline(1)", "", 2))})
+ call writefile(['one', 'two'], 'Xclientfile')
+ call system(cmd)
+ call WaitForAssert({-> assert_equal('two', remote_expr(name, "getline(2)", "", 2))})
+
" Expression evaluated locally.
if v:servername == ''
call remote_startserver('MYSELF')