summaryrefslogtreecommitdiff
path: root/src/main.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-04-07 21:25:44 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-04-07 23:47:51 +0100
commit203a7732f5fafb5f9b7e8564bd3bd4587e168134 (patch)
treee136448924786ac638b8ad91304b6cdf6e5eb035 /src/main.cc
parent33de42610dc08dd7bfd65f49a70ec68a478dee2d (diff)
Add support for querying client environement variables
At connection, a remote client sends all its environement to the server, which then provides access to client env through kak_client_env_VAR_NAME variables in the shell.
Diffstat (limited to 'src/main.cc')
-rw-r--r--src/main.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main.cc b/src/main.cc
index a026f664..43b9675a 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -102,6 +102,10 @@ void register_env_vars()
[](const String& name, const Context& context) -> String
{ return RegisterManager::instance()[name[4]].values(context)[0]; }
}, {
+ "client_env_.+",
+ [](const String& name, const Context& context) -> String
+ { return context.client().get_env_var(name.substr(11_byte)); }
+ }, {
"session",
[](const String& name, const Context& context) -> String
{ return Server::instance().session(); }
@@ -189,7 +193,7 @@ void create_local_client(const String& init_command)
UserInterface* ui = new LocalNCursesUI{};
static Client* client = ClientManager::instance().create_client(
- std::unique_ptr<UserInterface>{ui}, init_command);
+ std::unique_ptr<UserInterface>{ui}, get_env_vars(), init_command);
signal(SIGHUP, [](int) {
if (client)
ClientManager::instance().remove_client(*client);
@@ -221,6 +225,7 @@ int run_client(const String& session, const String& init_command)
EventManager event_manager;
auto client = connect_to(session,
std::unique_ptr<UserInterface>{new NCursesUI{}},
+ get_env_vars(),
init_command);
while (true)
event_manager.handle_next_events();