Implement 'env-*' option in script_module
This stores the key-value pairs specified for the script module. The command to be executed must pass on this argument.
This commit is contained in:
parent
37cd63a356
commit
e798ed57a2
@ -31,6 +31,8 @@ namespace modules {
|
|||||||
|
|
||||||
unique_ptr<command<output_policy::REDIRECTED>> m_command;
|
unique_ptr<command<output_policy::REDIRECTED>> m_command;
|
||||||
|
|
||||||
|
vector<pair<string, string>> m_env;
|
||||||
|
|
||||||
bool m_tail;
|
bool m_tail;
|
||||||
|
|
||||||
string m_exec;
|
string m_exec;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "modules/script.hpp"
|
#include "modules/script.hpp"
|
||||||
|
|
||||||
#include "drawtypes/label.hpp"
|
#include "drawtypes/label.hpp"
|
||||||
#include "modules/meta/base.inl"
|
#include "modules/meta/base.inl"
|
||||||
|
|
||||||
@ -13,7 +14,6 @@ namespace modules {
|
|||||||
*/
|
*/
|
||||||
script_module::script_module(const bar_settings& bar, string name_)
|
script_module::script_module(const bar_settings& bar, string name_)
|
||||||
: module<script_module>(bar, move(name_)), m_handler([&]() -> function<chrono::duration<double>()> {
|
: module<script_module>(bar, move(name_)), m_handler([&]() -> function<chrono::duration<double>()> {
|
||||||
|
|
||||||
m_tail = m_conf.get(name(), "tail", false);
|
m_tail = m_conf.get(name(), "tail", false);
|
||||||
// Handler for continuous tail commands {{{
|
// Handler for continuous tail commands {{{
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ namespace modules {
|
|||||||
m_command = command_util::make_command<output_policy::REDIRECTED>(exec);
|
m_command = command_util::make_command<output_policy::REDIRECTED>(exec);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
m_command->exec(false);
|
m_command->exec(false, m_env);
|
||||||
} catch (const exception& err) {
|
} catch (const exception& err) {
|
||||||
m_log.err("%s: %s", name(), err.what());
|
m_log.err("%s: %s", name(), err.what());
|
||||||
throw module_error("Failed to execute command, stopping module...");
|
throw module_error("Failed to execute command, stopping module...");
|
||||||
@ -60,7 +60,7 @@ namespace modules {
|
|||||||
auto exec = string_util::replace_all(m_exec, "%counter%", to_string(++m_counter));
|
auto exec = string_util::replace_all(m_exec, "%counter%", to_string(++m_counter));
|
||||||
m_log.info("%s: Invoking shell command: \"%s\"", name(), exec);
|
m_log.info("%s: Invoking shell command: \"%s\"", name(), exec);
|
||||||
m_command = command_util::make_command<output_policy::REDIRECTED>(exec);
|
m_command = command_util::make_command<output_policy::REDIRECTED>(exec);
|
||||||
m_command->exec(true);
|
m_command->exec(true, m_env);
|
||||||
} catch (const exception& err) {
|
} catch (const exception& err) {
|
||||||
m_log.err("%s: %s", name(), err.what());
|
m_log.err("%s: %s", name(), err.what());
|
||||||
throw module_error("Failed to execute command, stopping module...");
|
throw module_error("Failed to execute command, stopping module...");
|
||||||
@ -86,6 +86,8 @@ namespace modules {
|
|||||||
m_exec_if = m_conf.get(name(), "exec-if", m_exec_if);
|
m_exec_if = m_conf.get(name(), "exec-if", m_exec_if);
|
||||||
m_interval = m_conf.get<decltype(m_interval)>(name(), "interval", m_tail ? 0s : 5s);
|
m_interval = m_conf.get<decltype(m_interval)>(name(), "interval", m_tail ? 0s : 5s);
|
||||||
|
|
||||||
|
m_env = m_conf.get_with_prefix(name(), "env-");
|
||||||
|
|
||||||
// Load configured click handlers
|
// Load configured click handlers
|
||||||
m_actions[mousebtn::LEFT] = m_conf.get(name(), "click-left", ""s);
|
m_actions[mousebtn::LEFT] = m_conf.get(name(), "click-left", ""s);
|
||||||
m_actions[mousebtn::MIDDLE] = m_conf.get(name(), "click-middle", ""s);
|
m_actions[mousebtn::MIDDLE] = m_conf.get(name(), "click-middle", ""s);
|
||||||
@ -156,7 +158,7 @@ namespace modules {
|
|||||||
/**
|
/**
|
||||||
* Process mutex wrapped script handler
|
* Process mutex wrapped script handler
|
||||||
*/
|
*/
|
||||||
chrono::duration<double> script_module::process(const decltype(m_handler) & handler) const {
|
chrono::duration<double> script_module::process(const decltype(m_handler)& handler) const {
|
||||||
std::lock_guard<decltype(handler)> guard(handler);
|
std::lock_guard<decltype(handler)> guard(handler);
|
||||||
return handler();
|
return handler();
|
||||||
}
|
}
|
||||||
@ -191,7 +193,7 @@ namespace modules {
|
|||||||
* The pid token is only for tailed commands.
|
* The pid token is only for tailed commands.
|
||||||
* If the command is not specified or running, replacement is unnecessary as well
|
* If the command is not specified or running, replacement is unnecessary as well
|
||||||
*/
|
*/
|
||||||
if(m_tail && m_command && m_command->is_running()) {
|
if (m_tail && m_command && m_command->is_running()) {
|
||||||
action_replaced = string_util::replace_all(action_replaced, "%pid%", to_string(m_command->get_pid()));
|
action_replaced = string_util::replace_all(action_replaced, "%pid%", to_string(m_command->get_pid()));
|
||||||
}
|
}
|
||||||
m_builder->action(btn, action_replaced);
|
m_builder->action(btn, action_replaced);
|
||||||
@ -215,6 +217,6 @@ namespace modules {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
} // namespace modules
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
Loading…
Reference in New Issue
Block a user