mirror of
https://github.com/neovim/neovim.git
synced 2026-02-09 14:02:05 +10:00
PROBLEM
------------------------------------------------------------------------
$NVIM_LISTEN_ADDRESS has conflicting purposes as both a parameter ("the
current process should listen on this address") and a descriptor ("the
current process is a child of this address").
This contradiction means the presence of NVIM_LISTEN_ADDRESS is
ambiguous, so child Nvim always tries to listen on its _parent's_
socket. This is the cause of lots of "Failed to start server" spam in
our test/CI logs:
WARN 2022-04-30… server_start:154: Failed to start server: address already in use: \\.\pipe\nvim-4480-0
WARN 2022-04-30… server_start:154: Failed to start server: address already in use: \\.\pipe\nvim-2168-0
SOLUTION
------------------------------------------------------------------------
1. Set $NVIM to the parent v:servername, *only* in child processes.
- Now the correct way to detect a "parent" Nvim is to check for $NVIM.
2. Do NOT set $NVIM_LISTEN_ADDRESS in child processes.
3. On startup if $NVIM_LISTEN_ADDRESS exists, unset it immediately after
server init.
4. Open a channel to parent automatically, expose it as v:parent.
Fixes #3118
Fixes #6764
Fixes #9336
Ref https://github.com/neovim/neovim/pull/8247#issuecomment-380275696
Ref #8696
27 lines
679 B
C
27 lines
679 B
C
#ifndef NVIM_TERMINAL_H
|
|
#define NVIM_TERMINAL_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
typedef struct terminal Terminal;
|
|
typedef void (*terminal_write_cb)(char *buffer, size_t size, void *data);
|
|
typedef void (*terminal_resize_cb)(uint16_t width, uint16_t height, void *data);
|
|
typedef void (*terminal_close_cb)(void *data);
|
|
|
|
#include "nvim/buffer_defs.h"
|
|
|
|
typedef struct {
|
|
void *data; // PTY process channel
|
|
uint16_t width, height;
|
|
terminal_write_cb write_cb;
|
|
terminal_resize_cb resize_cb;
|
|
terminal_close_cb close_cb;
|
|
} TerminalOptions;
|
|
|
|
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
|
# include "terminal.h.generated.h"
|
|
#endif
|
|
#endif // NVIM_TERMINAL_H
|