diff options
| author | Alexander Sanchez <asanchez.dev@gmail.com> | 2017-08-28 16:26:31 -0400 |
|---|---|---|
| committer | Alexander Sanchez <asanchez.dev@gmail.com> | 2017-08-28 16:26:31 -0400 |
| commit | 0e50ae1383fa6646dbb230a81c3679dfd4b6405c (patch) | |
| tree | 0b2030d1bf9308c80154718203759f65c0bd1814 /src | |
| parent | 77ccb714cee06beebb2767fdf070a450c7dc052e (diff) | |
| parent | e80b36b495db30c6c0dd5dab577822aa3959d78e (diff) | |
Merge branch 'master' of https://github.com/mawww/kakoune
Diffstat (limited to 'src')
| -rw-r--r-- | src/client.cc | 3 | ||||
| -rw-r--r-- | src/client.hh | 6 | ||||
| -rw-r--r-- | src/client_manager.cc | 7 | ||||
| -rw-r--r-- | src/client_manager.hh | 2 | ||||
| -rw-r--r-- | src/main.cc | 9 | ||||
| -rw-r--r-- | src/remote.cc | 6 | ||||
| -rw-r--r-- | src/remote.hh | 2 |
7 files changed, 24 insertions, 11 deletions
diff --git a/src/client.cc b/src/client.cc index dea670d6..f47f3189 100644 --- a/src/client.cc +++ b/src/client.cc @@ -24,11 +24,12 @@ namespace Kakoune Client::Client(std::unique_ptr<UserInterface>&& ui, std::unique_ptr<Window>&& window, - SelectionList selections, + SelectionList selections, int pid, EnvVarMap env_vars, String name, OnExitCallback on_exit) : m_ui{std::move(ui)}, m_window{std::move(window)}, + m_pid{pid}, m_on_exit{std::move(on_exit)}, m_input_handler{std::move(selections), Context::Flags::None, std::move(name)}, diff --git a/src/client.hh b/src/client.hh index d870871b..fd80ba24 100644 --- a/src/client.hh +++ b/src/client.hh @@ -29,7 +29,7 @@ public: Client(std::unique_ptr<UserInterface>&& ui, std::unique_ptr<Window>&& window, SelectionList selections, - EnvVarMap env_vars, + int pid, EnvVarMap env_vars, String name, OnExitCallback on_exit); ~Client(); @@ -69,6 +69,8 @@ public: void exit(int status) { m_on_exit(status); } + int pid() const { return m_pid; } + private: void on_option_changed(const Option& option) override; @@ -83,6 +85,8 @@ private: std::unique_ptr<UserInterface> m_ui; std::unique_ptr<Window> m_window; + const int m_pid; + OnExitCallback m_on_exit; EnvVarMap m_env_vars; diff --git a/src/client_manager.cc b/src/client_manager.cc index 6525b854..bec1b2ea 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -38,7 +38,7 @@ String ClientManager::generate_name() const } } -Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, +Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pid, EnvVarMap env_vars, StringView init_cmds, Optional<BufferCoord> init_coord, Client::OnExitCallback on_exit) @@ -46,8 +46,9 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, Buffer& buffer = BufferManager::instance().get_first_buffer(); WindowAndSelections ws = get_free_window(buffer); Client* client = new Client{std::move(ui), std::move(ws.window), - std::move(ws.selections), std::move(env_vars), - generate_name(), std::move(on_exit)}; + std::move(ws.selections), pid, + std::move(env_vars), generate_name(), + std::move(on_exit)}; m_clients.emplace_back(client); if (init_coord) diff --git a/src/client_manager.hh b/src/client_manager.hh index f0a3a59d..5508b519 100644 --- a/src/client_manager.hh +++ b/src/client_manager.hh @@ -19,7 +19,7 @@ public: ClientManager(); ~ClientManager(); - Client* create_client(std::unique_ptr<UserInterface>&& ui, + Client* create_client(std::unique_ptr<UserInterface>&& ui, int pid, EnvVarMap env_vars, StringView init_cmds, Optional<BufferCoord> init_coord, Client::OnExitCallback on_exit); diff --git a/src/main.cc b/src/main.cc index 0d4f0c78..81ad37bc 100644 --- a/src/main.cc +++ b/src/main.cc @@ -127,6 +127,10 @@ void register_env_vars() [](StringView name, const Context& context) -> String { return context.name(); } }, { + "client_pid", false, + [](StringView name, const Context& context) -> String + { return to_string(context.client().pid()); } + }, { "modified", false, [](StringView name, const Context& context) -> String { return context.buffer().is_modified() ? "true" : "false"; } @@ -475,7 +479,8 @@ int run_client(StringView session, StringView client_init, try { EventManager event_manager; - RemoteClient client{session, make_ui(ui_type), get_env_vars(), client_init, std::move(init_coord)}; + RemoteClient client{session, make_ui(ui_type), getpid(), get_env_vars(), + client_init, std::move(init_coord)}; while (not client.exit_status()) event_manager.handle_next_events(EventMode::Normal); return *client.exit_status(); @@ -614,7 +619,7 @@ int run_server(StringView session, StringView server_init, if (not (flags & ServerFlags::Daemon)) { local_client = client_manager.create_client( - create_local_ui(ui_type), get_env_vars(), client_init, std::move(init_coord), + create_local_ui(ui_type), getpid(), get_env_vars(), client_init, std::move(init_coord), [](int status) { local_client_exit = status; }); if (startup_error) diff --git a/src/remote.cc b/src/remote.cc index d88195f8..c26aabb7 100644 --- a/src/remote.cc +++ b/src/remote.cc @@ -552,7 +552,7 @@ bool check_session(StringView session) } RemoteClient::RemoteClient(StringView session, std::unique_ptr<UserInterface>&& ui, - const EnvVarMap& env_vars, StringView init_command, + int pid, const EnvVarMap& env_vars, StringView init_command, Optional<BufferCoord> init_coord) : m_ui(std::move(ui)) { @@ -560,6 +560,7 @@ RemoteClient::RemoteClient(StringView session, std::unique_ptr<UserInterface>&& { MsgWriter msg{m_send_buffer, MessageType::Connect}; + msg.write(pid); msg.write(init_command); msg.write(init_coord); msg.write(m_ui->dimensions()); @@ -706,13 +707,14 @@ private: { case MessageType::Connect: { + auto pid = m_reader.read<int>(); auto init_cmds = m_reader.read<String>(); auto init_coord = m_reader.read_optional<BufferCoord>(); auto dimensions = m_reader.read<DisplayCoord>(); auto env_vars = m_reader.read_hash_map<String, String, MemoryDomain::EnvVars>(); auto* ui = new RemoteUI{sock, dimensions}; if (auto* client = ClientManager::instance().create_client( - std::unique_ptr<UserInterface>(ui), + std::unique_ptr<UserInterface>(ui), pid, std::move(env_vars), init_cmds, init_coord, [ui](int status) { ui->exit(status); })) ui->set_client(client); diff --git a/src/remote.hh b/src/remote.hh index 84382dc4..f716d243 100644 --- a/src/remote.hh +++ b/src/remote.hh @@ -30,7 +30,7 @@ class RemoteClient { public: RemoteClient(StringView session, std::unique_ptr<UserInterface>&& ui, - const EnvVarMap& env_vars, StringView init_command, + int pid, const EnvVarMap& env_vars, StringView init_command, Optional<BufferCoord> init_coord); const Optional<int>& exit_status() const { return m_exit_status; } |
