config:output:Allow multiple exclusions & wildcard
Covers the use case where needing to exclude more than 1 output but still include all other displays. e.g. I have 3 monitors: laptop + HD + 4K; and 3 bar types: - The main bar is on the laptop. `output: "laptop-monitor-id"` - The 4K has a specific waybar bar-1 configuration. `output: "4K-monitor-id"` - I want all other displays (3rd HD monitor / any HDMI output when presenting) to have a plain bar: `output: ["!laptop-monitor-id", "!4k-monitor-id", "*"]`pull/2053/head
parent
9a0dbd555d
commit
90206f55be
|
@ -30,6 +30,7 @@ Also a minimal example configuration can be found on the at the bottom of this m
|
|||
*output* ++
|
||||
typeof: string|array ++
|
||||
Specifies on which screen this bar will be displayed. Exclamation mark(*!*) can be used to exclude specific output.
|
||||
In an array, star '*\**' can be used at the end to accept all outputs, in case all previous entries are exclusions.
|
||||
|
||||
*position* ++
|
||||
typeof: string ++
|
||||
|
|
|
@ -124,9 +124,21 @@ bool isValidOutput(const Json::Value &config, const std::string &name,
|
|||
const std::string &identifier) {
|
||||
if (config["output"].isArray()) {
|
||||
for (auto const &output_conf : config["output"]) {
|
||||
if (output_conf.isString() &&
|
||||
(output_conf.asString() == name || output_conf.asString() == identifier)) {
|
||||
return true;
|
||||
if (output_conf.isString()) {
|
||||
auto config_output = output_conf.asString();
|
||||
if (config_output.substr(0, 1) == "!") {
|
||||
if (config_output.substr(1) == name || config_output.substr(1) == identifier) {
|
||||
return false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (config_output == name || config_output == identifier) {
|
||||
return true;
|
||||
}
|
||||
if (config_output.substr(0, 1) == "*") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue