fix(channel): fix channel consistency

- Fix the problem that chanclose() does not work for channel created by
  nvim_open_term().
- Fix the problem that the loopback channel is not released.
- Fix the error message when sending raw data to the loopback channel.
This commit is contained in:
erw7
2021-11-12 00:07:03 +09:00
committed by zeertzjq
parent ab456bc304
commit 5051510ade
6 changed files with 52 additions and 5 deletions

View File

@@ -317,10 +317,14 @@ void terminal_close(Terminal *term, int status)
term->opts.close_cb(term->opts.data);
}
} else if (!only_destroy) {
// This was called by channel_process_exit_cb() not in process_teardown().
// Associated channel has been closed and the editor is not exiting.
// Do not call the close callback now. Wait for the user to press a key.
char msg[sizeof("\r\n[Process exited ]") + NUMBUFLEN];
snprintf(msg, sizeof msg, "\r\n[Process exited %d]", status);
if (((Channel *)term->opts.data)->streamtype == kChannelStreamInternal) {
snprintf(msg, sizeof msg, "\r\n[Terminal closed]");
} else {
snprintf(msg, sizeof msg, "\r\n[Process exited %d]", status);
}
terminal_receive(term, msg, strlen(msg));
}