Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						1c3a849881 
					 
					
						
						
							
							API/nvim_command_output: handle :echon capture ( #8265 )  
						
						 
						
						... 
						
						
						
						ref https://github.com/neovim/python-client/pull/290  
						
						
					 
					
						2018-04-13 00:49:37 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						87f4d2592c 
					 
					
						
						
							
							test/util: expect_err() ( #8257 )  
						
						 
						
						... 
						
						
						
						other cleanup, ref #8245  
						
						
					 
					
						2018-04-11 22:07:00 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						fa6415f13f 
					 
					
						
						
							
							test/API: validate channel arg ( #8245 )  
						
						 
						
						
						
						
					 
					
						2018-04-08 03:01:15 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						98e7112390 
					 
					
						
						
							
							msg: do not scroll entire screen ( #8088 )  
						
						 
						
						
						
						
					 
					
						2018-03-31 11:12:27 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Nimit Bhardwaj 
							
						 
					 
					
						
						
							
						
						8d5a46e77b 
					 
					
						
						
							
							TUI: implement "standout" attribute  #8081  
						
						 
						
						... 
						
						
						
						closes  #8054  
						
						
					 
					
						2018-03-27 04:38:19 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						a034d4b69d 
					 
					
						
						
							
							API: nvim_get_proc()  
						
						 
						
						... 
						
						
						
						TODO: "exepath" field (win32: QueryFullProcessImageName())
On unix-likes `ps` is used because the platform-specific APIs are
a nightmare.  For reference, below is a (incomplete) attempt:
diff --git a/src/nvim/os/process.c b/src/nvim/os/process.c
index 09769925aca5..99afbbf290c1 100644
--- a/src/nvim/os/process.c
+++ b/src/nvim/os/process.c
@@ -208,3 +210,60 @@ int os_proc_children(int ppid, int **proc_list, size_t *proc_count)
   return 0;
 }
+/// Gets various properties of the process identified by `pid`.
+///
+/// @param pid Process to inspect.
+/// @return Map of process properties, empty on error.
+Dictionary os_proc_info(int pid)
+{
+  Dictionary pinfo = ARRAY_DICT_INIT;
+#ifdef WIN32
+
+#elif defined(__APPLE__)
+  char buf[PROC_PIDPATHINFO_MAXSIZE];
+  if (proc_pidpath(pid, buf, sizeof(buf))) {
+    name = getName(buf);
+    PUT(pinfo, "exepath", STRING_OBJ(cstr_to_string(buf)));
+    return name;
+  } else {
+    ILOG("proc_pidpath() failed for pid: %d", pid);
+  }
+#elif defined(BSD)
+# if defined(__FreeBSD__)
+#  define KP_COMM(o) o.ki_comm
+# else
+#  define KP_COMM(o) o.p_comm
+# endif
+  struct kinfo_proc *proc = kinfo_getproc(pid);
+  if (proc) {
+    PUT(pinfo, "name", cstr_to_string(KP_COMM(proc)));
+    xfree(proc);
+  } else {
+    ILOG("kinfo_getproc() failed for pid: %d", pid);
+  }
+
+#elif defined(__linux__)
+  char fname[256] = { 0 };
+  char buf[MAXPATHL];
+  snprintf(fname, sizeof(fname), "/proc/%d/comm", pid);
+  FILE *fp = fopen(fname, "r");
+  // FileDescriptor *f = file_open_new(&error, fname, kFileReadOnly, 0);
+  // ptrdiff_t file_read(FileDescriptor *const fp, char *const ret_buf,
+  //                     const size_t size)
+  if (fp == NULL) {
+    ILOG("fopen() of /proc/%d/comm failed", pid);
+  } else {
+    size_t n = fread(buf, sizeof(char), sizeof(buf) - 1, fp);
+    if (n == 0) {
+      WLOG("fread() of /proc/%d/comm failed", pid);
+    } else {
+      size_t end = MIN(sizeof(buf) - 1, n);
+      end = (end > 0 && buf[end - 1] == '\n') ? end - 1 : end;
+      buf[end] = '\0';
+      PUT(pinfo, "name", STRING_OBJ(cstr_to_string(buf)));
+    }
+  }
+  fclose(fp);
+#endif
+  return pinfo;
+} 
						
						
					 
					
						2018-03-18 00:11:45 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						dbad797edd 
					 
					
						
						
							
							API: nvim_get_proc_children()  
						
						 
						
						... 
						
						
						
						ref https://github.com/libuv/libuv/pull/836  
						
						
					 
					
						2018-03-16 10:55:12 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						fd4021387e 
					 
					
						
						
							
							test: rename next_message() to next_msg()  
						
						 
						
						
						
						
					 
					
						2018-03-11 12:43:42 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								geekodour 
							
						 
					 
					
						
						
							
						
						9f994bb699 
					 
					
						
						
							
							api: nvim_list_uis  #8004  
						
						 
						
						... 
						
						
						
						ref #7438 
closes  #4842  
						
						
					 
					
						2018-03-03 15:06:24 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						6e5cb0debd 
					 
					
						
						
							
							ui: refactor ui options  
						
						 
						
						
						
						
					 
					
						2018-02-13 20:48:51 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						352a51e831 
					 
					
						
						
							
							test: :! print binary data, control chars  
						
						 
						
						... 
						
						
						
						closes  #5442 
closes  #4142 
ref #6618 
ref #4376 
ref #7844 
ref #2958 
ref #4338  
						
						
					 
					
						2018-02-07 09:25:51 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						4e7d85e635 
					 
					
						
						
							
							shell: update execute('!cmd') test to new behavior  
						
						 
						
						... 
						
						
						
						And similarly nvim_command_output test 
						
						
					 
					
						2018-02-06 20:16:38 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						a2dfeb8a16 
					 
					
						
						
							
							functests: Improve error reporting in _check_parsing function  
						
						 
						
						... 
						
						
						
						May be needed for unit tests as well though. 
						
						
					 
					
						2018-02-02 07:28:56 -05:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						5055d4a755 
					 
					
						
						
							
							api: nvim_command_output: direct impl  
						
						 
						
						
						
						
					 
					
						2018-01-10 23:58:56 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						c095f83116 
					 
					
						
						
							
							api: change nvim_command_output behavior  
						
						 
						
						... 
						
						
						
						Implement nvim_command_output with `execute({cmd},"silent")`.
Behavior changes:
- does not provoke any hit-enter prompt
- no longer prepends a newline char
- does not capture some noise (like the "[New File]" message, see the
  change to tabnewentered_spec.lua)
Technically ("bug-for-bug") this a breaking change.  But the previous
behavior of nvim_command_output meant that it probably wasn't used for
anything outside of tests.
Also remove the undocumented `v:command_output` variable which was
a hack introduced only for the purposes of nvim_command_output.
closes  #7726  
						
						
					 
					
						2018-01-10 23:45:44 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						5ab0f988ca 
					 
					
						
						
							
							*: Replace all occurrences of NVim with Nvim  
						
						 
						
						
						
						
					 
					
						2017-11-30 11:53:25 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						17077b6813 
					 
					
						
						
							
							viml/parser/expressions: Make $ENV not depend on &isident  
						
						 
						
						
						
						
					 
					
						2017-11-26 16:08:53 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						b9c7813058 
					 
					
						
						
							
							Merge branch 'master' into expression-parser  
						
						 
						
						
						
						
					 
					
						2017-11-26 15:54:03 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						91b856ccce 
					 
					
						
						
							
							channels: tests  
						
						 
						
						
						
						
					 
					
						2017-11-26 09:17:04 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						ebb33eddd9 
					 
					
						
						
							
							tests: Stabilize float format and %e in format_luav and format_string  
						
						 
						
						
						
						
					 
					
						2017-11-19 22:00:59 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						f20f97c936 
					 
					
						
						
							
							*: Fix linter errors  
						
						 
						
						
						
						
					 
					
						2017-11-19 21:13:27 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						a94255a7ac 
					 
					
						
						
							
							tests: Use single test file for unit and functional parser tests  
						
						 
						
						
						
						
					 
					
						2017-11-19 20:20:06 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						24a353364d 
					 
					
						
						
							
							Merge branch 'master' into expression-parser  
						
						 
						
						
						
						
					 
					
						2017-11-06 20:23:35 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						ebb5977837 
					 
					
						
						
							
							api/vim: Add “len” dictionary key  
						
						 
						
						... 
						
						
						
						This allows determining where parsing ended which may be needed for e.g. parsing
`:echo` with that API function. 
						
						
					 
					
						2017-11-06 01:17:39 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						7849070f99 
					 
					
						
						
							
							tests: Add missing test cases  
						
						 
						
						
						
						
					 
					
						2017-11-06 01:17:39 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						7bc6de7526 
					 
					
						
						
							
							api/vim,functests: Add tests for nvim_parse_expression, fix found bugs  
						
						 
						
						
						
						
					 
					
						2017-11-06 01:17:39 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						b9d5aea073 
					 
					
						
						
							
							api/vim: Create part of nvim_parse_expression function  
						
						 
						
						
						
						
					 
					
						2017-11-06 01:17:38 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								James McCoy 
							
						 
					 
					
						
						
							
						
						a39c8b7ce3 
					 
					
						
						
							
							test: server_spec: Tolerate missing protocol ( #7478 )  
						
						 
						
						... 
						
						
						
						Travis disabled IPv6:
[ RUN      ] serverstart(), serverstop() parses endpoints correctly: FAIL
...build/neovim/neovim/test/functional/eval/server_spec.lua:83: Expected objects to be the same.
Passed in:
(table) {
  [1] = '127.0.0.1:12345' }
Expected:
(table) {
  [1] = '127.0.0.1:12345'
 *[2] = '::1:12345' }
Change all tests to ensure a server was actually started before
expecting it to be returned from serverlist(). 
						
						
					 
					
						2017-11-02 10:45:38 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						2a3bcd1ff8 
					 
					
						
						
							
							rpc: Don't delay notifications when request is pending ( #6544 )  
						
						 
						
						... 
						
						
						
						With the old behavior, if a GUI makes a blocking request that requires user
interaction (like nvim_input()), it would not get any screen updates.
The client, not nvim, should decide how to handle notifications during a
pending request. If an rplugin wants to avoid async calls while a sync call is
busy, it likely wants to avoid processing async calls while another async call
also is handled as well.
This may break the expectation of some existing rplugins. For compatibility,
remote/define.vim reimplements the old behavior. Clients can opt-out by
specifying `sync=urgent`.
- Legacy hosts should be updated to use `sync=urgent`. They could add a flag
  indicating which async methods are always safe to call and which must wait
  until the main loop returns.
- New hosts can expose the full asyncness, they don't need to offer both
  behaviors.
ref #6532 
ref #1398  d83868fe90 
						
						
					 
					
						2017-10-29 03:06:53 +01:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						52517321d1 
					 
					
						
						
							
							test: nvim_get_hl_by_name/by_id  #7082  
						
						 
						
						... 
						
						
						
						- test all properties
- test failure modes 
						
						
					 
					
						2017-10-08 21:17:20 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						04187a1c74 
					 
					
						
						
							
							Merge  #7082  'api: nvim_get_hl_by_name/by_id'  
						
						 
						
						
						
						
					 
					
						2017-10-08 19:09:14 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Matthieu Coudron 
							
						 
					 
					
						
						
							
						
						3a00648639 
					 
					
						
						
							
							Changed prototypes to accept a boolean "rgb"  
						
						 
						
						
						
						
					 
					
						2017-09-30 11:43:26 +09:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Matthieu Coudron 
							
						 
					 
					
						
						
							
						
						e3a2cca387 
					 
					
						
						
							
							Increased test coverage for RGB and cterm  
						
						 
						
						
						
						
					 
					
						2017-09-30 11:43:26 +09:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Matthieu Coudron 
							
						 
					 
					
						
						
							
						
						ba7277cfb4 
					 
					
						
						
							
							Adds nvim_get_hl_by_name/by_id  
						
						 
						
						... 
						
						
						
						...in order to retrieve highlights.
Added test/functional/api/highlight_spec.lua
HL_NORMAL is not really a good name, since it's more like an empty attribute than the normal's one.
If one pays attention, syn_cterm_attr2entry is never called with attr=0 because it's always special cased before.
I suggest in subsequent PRs we remove the ATTR_OFF and just insert an EMPTY ATTR/RESET_ATTR/UNINITIALIZED for id 0. 
						
						
					 
					
						2017-09-30 11:43:26 +09:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						9d6bac3219 
					 
					
						
						
							
							test: more coverage for RPC + op-pending  #3732  
						
						 
						
						
						
						
					 
					
						2017-09-16 12:21:31 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						ce852bab04 
					 
					
						
						
							
							eventloop: K_EVENT does not finish mapping  
						
						 
						
						... 
						
						
						
						The "mapping" tests added in 541dde36e3  were flawed:
- Unlike op-pending mode, RPCs are _blocked_ during map-pending. So
  a synchronous RPC like nvim_get_current_buf() waits until
  'timeoutlen', then the mapping is canceled.
- helpers.expect() also performs a blocking RPC, so again that must not
  intervene the two nvim_input() calls.
closes  #6166  
						
						
					 
					
						2017-09-04 22:51:04 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						3922237b14 
					 
					
						
						
							
							test: lint  
						
						 
						
						
						
						
					 
					
						2017-09-04 10:46:10 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Matthew Malcomson 
							
						 
					 
					
						
						
							
						
						541dde36e3 
					 
					
						
						
							
							eventloop: K_EVENT should not finish operator  
						
						 
						
						... 
						
						
						
						normal_finish_command() and normal_prepare() assume that any pending
operator needs to be finished after any subsequent key.
Set `finish_op = false` in nv_event() to indicate that the pending
operator shouldn't be finished in normal_execute().
This is how nv_visual() indicates that 'v' or 'V' in operator-pending
mode should not finish the current pending operator.
fixes  #5398 
fixes  #6166  (partially; mappings are still interrupted) 
						
						
					 
					
						2017-09-04 08:20:04 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						af993da435 
					 
					
						
						
							
							rpc: close channel if stream was closed  
						
						 
						
						... 
						
						
						
						f_jobstop()/f_rpcstop() .. process_stop() .. process_close_in(proc)
closes the write-stream of a RPC channel. But there might be
a pending RPC notification on the queue, which may get processed just
before the channel is closed.
To handle that case, check the Stream.closed in
channel.c:receive_msgpack().
Before this change, the above scenario could trigger
this assert(!stream->closed) in wstream_write():
    0x00007f96e1cd3428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
    0x00007f96e1cd502a in __GI_abort () at abort.c:89
    0x00007f96e1ccbbd7 in __assert_fail_base (fmt=<optimized out>, assertion=assertion@entry=0x768f9b "!stream->closed",
    file=file@entry=0x768f70 "../src/nvim/event/wstream.c", line=line@entry=77,
    function=function@entry=0x768fb0 <__PRETTY_FUNCTION__.13735> "wstream_write") at assert.c:92
    0x00007f96e1ccbc82 in __GI___assert_fail (assertion=0x768f9b "!stream->closed", file=0x768f70 "../src/nvim/event/wstream.c", line=77,
    function=0x768fb0 <__PRETTY_FUNCTION__.13735> "wstream_write") at assert.c:101
    0x00000000004d2c1f in wstream_write (stream=0x7f96e0a35078, buffer=0x7f96e09f9b40) at ../src/nvim/event/wstream.c:77
    0x00000000005857b2 in channel_write (channel=0x7f96e0ae5800, buffer=0x7f96e09f9b40) at ../src/nvim/msgpack_rpc/channel.c:551
    0x000000000058567d in on_request_event (argv=0x7ffed792efa0) at ../src/nvim/msgpack_rpc/channel.c:523
    0x00000000005854c8 in handle_request (channel=0x7f96e0ae5800, request=0x7ffed792f1b8) at ../src/nvim/msgpack_rpc/channel.c:503
    0x00000000005850cb in parse_msgpack (channel=0x7f96e0ae5800) at ../src/nvim/msgpack_rpc/channel.c:423
    0x0000000000584f90 in receive_msgpack (stream=0x7f96e0a35218, rbuf=0x7f96e0d1d4c0, c=22, data=0x7f96e0ae5800, eof=false)
    at ../src/nvim/msgpack_rpc/channel.c:389
    0x00000000004d0b20 in read_event (argv=0x7ffed792f4a8) at ../src/nvim/event/rstream.c:190
    0x00000000004ce462 in multiqueue_process_events (this=0x7f96e18172d0) at ../src/nvim/event/multiqueue.c:150
    0x000000000059b630 in nv_event (cap=0x7ffed792f620) at ../src/nvim/normal.c:7908
    0x000000000058be69 in normal_execute (state=0x7ffed792f580, key=-25341) at ../src/nvim/normal.c:1137
    0x0000000000652463 in state_enter (s=0x7ffed792f580) at ../src/nvim/state.c:61
    0x000000000058a1fe in normal_enter (cmdwin=false, noexmode=false) at ../src/nvim/normal.c:467
    0x00000000005500c2 in main (argc=2, argv=0x7ffed792f8d8) at ../src/nvim/main.c:554
Alternative approach suggested by bfredl is to use close_cb of the
process. My unsuccessful attempt is below. (It seems close_cb is queued
too late, which is the similar problem addressed by this commit):
    commit 75fc12c6ab15711bdb7b18c6d42ec9d157f5145e
    Author: Justin M. Keyes <justinkz@gmail.com >
    Date:   Fri Aug 18 01:30:41 2017 +0200
        rpc: use Stream's close_cb instead of explicit check in receive_msgpack()
    diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
    index 8371d3cd482e..e52da23cdc40 100644
    --- a/src/nvim/event/process.c
    +++ b/src/nvim/event/process.c
    @@ -416,6 +416,10 @@ static void on_process_exit(Process *proc)
     static void on_process_stream_close(Stream *stream, void *data)
     {
       Process *proc = data;
    +  ILOG("on_process_stream_close");
    +  if (proc->stream_close_cb != NULL) {
    +    proc->stream_close_cb(stream, proc->stream_close_data);
    +  }
       decref(proc);
     }
    diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h
    index 5c00e8e7ecd5..34a8d54f6f8c 100644
    --- a/src/nvim/event/process.h
    +++ b/src/nvim/event/process.h
    @@ -26,6 +26,11 @@ struct process {
       Stream *in, *out, *err;
       process_exit_cb cb;
       internal_process_cb internal_exit_cb, internal_close_cb;
    +
    +  // Called when any of the process streams (in/out/err) closes.
    +  stream_close_cb stream_close_cb;
    +  void *stream_close_data;
    +
       bool closed, detach;
       MultiQueue *events;
     };
    @@ -50,6 +55,8 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data)
         .closed = false,
         .internal_close_cb = NULL,
         .internal_exit_cb = NULL,
    +    .stream_close_cb = NULL,
    +    .stream_close_data = NULL,
         .detach = false
       };
     }
    diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c
    index 7c865bfe1e8c..c8720d1e45d9 100644
    --- a/src/nvim/event/stream.c
    +++ b/src/nvim/event/stream.c
    @@ -95,7 +95,11 @@ void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
     void stream_close_handle(Stream *stream)
       FUNC_ATTR_NONNULL_ALL
     {
    +  ILOG("stream=%d", stream);
    +  // LOG_CALLSTACK();
       if (stream->uvstream) {
    +    // problem:  this schedules on the queue, but channel.c:receive_msgpack may
    +    // be processed before close_cb is called by libuv.
         uv_close((uv_handle_t *)stream->uvstream, close_cb);
       } else {
         uv_close((uv_handle_t *)&stream->uv.idle, close_cb);
    @@ -105,6 +109,7 @@ void stream_close_handle(Stream *stream)
     static void close_cb(uv_handle_t *handle)
     {
       Stream *stream = handle->data;
    +  ILOG(">>>>>>>>>>>>>>>>>>>>>>> stream=%p stream->internal_close_cb=%p", stream, stream->internal_close_cb);
       if (stream->buffer) {
         rbuffer_free(stream->buffer);
       }
    diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
    index 782eabe04e4a..dc2b794e366a 100644
    --- a/src/nvim/msgpack_rpc/channel.c
    +++ b/src/nvim/msgpack_rpc/channel.c
    @@ -128,6 +128,8 @@ uint64_t channel_from_process(Process *proc, uint64_t id, char *source)
                                           source);
       incref(channel);  // process channels are only closed by the exit_cb
       channel->data.proc = proc;
    +  channel->data.proc->stream_close_cb = close_cb2;
    +  channel->data.proc->stream_close_data = channel;
       wstream_init(proc->in, 0);
       rstream_init(proc->out, 0);
    @@ -387,17 +389,6 @@ static void receive_msgpack(Stream *stream, RBuffer *rbuf, size_t c,
         goto end;
       }
    -  if ((chan_wstream(channel) != NULL && chan_wstream(channel)->closed)
    -      || (chan_rstream(channel) != NULL && chan_rstream(channel)->closed)) {
    -    char buf[256];
    -    snprintf(buf, sizeof(buf),
    -             "ch %" PRIu64 ": stream closed unexpectedly. "
    -             "closing channel",
    -             channel->id);
    -    call_set_error(channel, buf, WARN_LOG_LEVEL);
    -    goto end;
    -  }
    -
       size_t count = rbuffer_size(rbuf);
       DLOG("ch %" PRIu64 ": parsing %u bytes from msgpack Stream: %p",
            channel->id, count, stream);
    @@ -571,23 +562,6 @@ static Stream *chan_wstream(Channel *chan)
       abort();
     }
    -/// Returns the Stream that a Channel reads from.
    -static Stream *chan_rstream(Channel *chan)
    -{
    -  switch (chan->type) {
    -    case kChannelTypeSocket:
    -      return &chan->data.stream;
    -    case kChannelTypeProc:
    -      return chan->data.proc->out;
    -    case kChannelTypeStdio:
    -      return &chan->data.std.in;
    -    case kChannelTypeInternal:
    -      return NULL;
    -  }
    -  abort();
    -}
    -
    -
     static bool channel_write(Channel *channel, WBuffer *buffer)
     {
       bool success = false;
    @@ -799,6 +773,12 @@ static void close_cb(Stream *stream, void *data)
       decref(data);
     }
    +static void close_cb2(Stream *stream, void *data)
    +{
    +  ILOG("close_cb2");
    +  close_channel(data);
    +}
    +
     /// @param source description of source function, rplugin name, TCP addr, etc
     static Channel *register_channel(ChannelType type, uint64_t id,
                                      MultiQueue *events, char *source) 
						
						
					 
					
						2017-08-21 01:04:28 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						0ea7e45bc1 
					 
					
						
						
							
							'cpoptions': remove "<" flag; ignore <special>  
						
						 
						
						... 
						
						
						
						Closes  #6937  "nvim_get_keymap output is unreliable" 
						
						
					 
					
						2017-07-08 16:34:35 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						d5916a823a 
					 
					
						
						
							
							functests: Test how spaces appear in get_keymap output  
						
						 
						
						
						
						
					 
					
						2017-07-02 20:08:00 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						5fe5d712aa 
					 
					
						
						
							
							functests: Use more extensive testing  
						
						 
						
						... 
						
						
						
						Fixes  #6937  
						
						
					 
					
						2017-07-02 19:50:03 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						24f0056ca5 
					 
					
						
						
							
							message: Add support for replacing < to str2special  
						
						 
						
						
						
						
					 
					
						2017-07-02 19:37:21 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						a1fee487ba 
					 
					
						
						
							
							functests: Add tests for new behaviour  
						
						 
						
						... 
						
						
						
						Apparently it is not working yet. 
						
						
					 
					
						2017-07-02 19:28:44 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								ZyX 
							
						 
					 
					
						
						
							
						
						4b8bdd953e 
					 
					
						
						
							
							functests: Remove local_copy function  
						
						 
						
						
						
						
					 
					
						2017-07-02 19:21:21 +03:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						ca4633bfe4 
					 
					
						
						
							
							ci/quickbuild: XXX: disable server_requests test ( #6851 )  
						
						 
						
						... 
						
						
						
						Temporarily disable this test which hangs quickbuild.
From #6905 : The hang occurs when calling nvim_set_current_line.
References #6594  5a151555c8 
						
						
					 
					
						2017-07-02 00:30:00 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Justin M. Keyes 
							
						 
					 
					
						
						
							
						
						f34befe74c 
					 
					
						
						
							
							Merge  #6789  from ZyX-I/lua-path  
						
						 
						
						... 
						
						
						
						lua: Add paths from &runtimepath to package.path and package.cpath 
						
						
					 
					
						2017-06-27 02:29:15 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						5a151555c8 
					 
					
						
						
							
							sockets: don't deadlock when connecting to own pipe address  
						
						 
						
						
						
						
					 
					
						2017-05-29 19:02:49 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Björn Linse 
							
						 
					 
					
						
						
							
						
						6a75938758 
					 
					
						
						
							
							channels: implement sockopen() to connect to socket  
						
						 
						
						... 
						
						
						
						Helped-By: oni-link <knil.ino@gmail.com > 
						
						
					 
					
						2017-05-29 19:02:49 +02:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								TJ DeVries 
							
						 
					 
					
						
						
							
						
						45626de63f 
					 
					
						
						
							
							get_keymap API ( #6236 )  
						
						 
						
						... 
						
						
						
						* Add api function get keymap
nvim_get_keymap(mode)
nvim_buf_get_keymap(buffer, mode) 
						
						
					 
					
						2017-05-25 12:41:53 +02:00