feat: optional default icon for 0-match classes
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
This commit is contained in:
parent
fbe544984c
commit
adbc9d95de
|
@ -136,6 +136,7 @@ class Workspaces : public AModule, public EventHandler {
|
||||||
Json::Value window_rewrite_rules_;
|
Json::Value window_rewrite_rules_;
|
||||||
std::map<std::string, std::string> regex_cache_;
|
std::map<std::string, std::string> regex_cache_;
|
||||||
std::string format_window_separator_;
|
std::string format_window_separator_;
|
||||||
|
std::string window_rewrite_default_;
|
||||||
bool with_icon_;
|
bool with_icon_;
|
||||||
uint64_t monitor_id_;
|
uint64_t monitor_id_;
|
||||||
std::string active_workspace_name_;
|
std::string active_workspace_name_;
|
||||||
|
|
|
@ -5,4 +5,6 @@
|
||||||
|
|
||||||
namespace waybar::util {
|
namespace waybar::util {
|
||||||
std::string rewriteString(const std::string&, const Json::Value&);
|
std::string rewriteString(const std::string&, const Json::Value&);
|
||||||
}
|
std::string rewriteStringOnce(const std::string& value, const Json::Value& rules,
|
||||||
|
bool& matched_any);
|
||||||
|
} // namespace waybar::util
|
||||||
|
|
|
@ -77,6 +77,10 @@ auto Workspaces::parse_config(const Json::Value &config) -> void {
|
||||||
format_window_separator.isString() ? format_window_separator.asString() : " ";
|
format_window_separator.isString() ? format_window_separator.asString() : " ";
|
||||||
|
|
||||||
window_rewrite_rules_ = config["window-rewrite"];
|
window_rewrite_rules_ = config["window-rewrite"];
|
||||||
|
|
||||||
|
Json::Value window_rewrite_default = config["window-rewrite-default"];
|
||||||
|
window_rewrite_default_ =
|
||||||
|
window_rewrite_default.isString() ? window_rewrite_default.asString() : "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Workspaces::register_ipc() -> void {
|
auto Workspaces::register_ipc() -> void {
|
||||||
|
@ -757,8 +761,14 @@ std::string Workspaces::get_rewrite(std::string window_class) {
|
||||||
return regex_cache_[window_class];
|
return regex_cache_[window_class];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool matched_any;
|
||||||
|
|
||||||
std::string window_class_rewrite =
|
std::string window_class_rewrite =
|
||||||
waybar::util::rewriteString(window_class, window_rewrite_rules_);
|
waybar::util::rewriteStringOnce(window_class, window_rewrite_rules_, matched_any);
|
||||||
|
|
||||||
|
if (!matched_any) {
|
||||||
|
window_class_rewrite = window_rewrite_default_;
|
||||||
|
}
|
||||||
|
|
||||||
regex_cache_.emplace(window_class, window_class_rewrite);
|
regex_cache_.emplace(window_class, window_class_rewrite);
|
||||||
|
|
||||||
|
|
|
@ -30,4 +30,31 @@ std::string rewriteString(const std::string& value, const Json::Value& rules) {
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string rewriteStringOnce(const std::string& value, const Json::Value& rules,
|
||||||
|
bool& matched_any) {
|
||||||
|
if (!rules.isObject()) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
matched_any = false;
|
||||||
|
|
||||||
|
std::string res = value;
|
||||||
|
|
||||||
|
for (auto it = rules.begin(); it != rules.end(); ++it) {
|
||||||
|
if (it.key().isString() && it->isString()) {
|
||||||
|
try {
|
||||||
|
const std::regex rule{it.key().asString(), std::regex_constants::icase};
|
||||||
|
if (std::regex_match(value, rule)) {
|
||||||
|
matched_any = true;
|
||||||
|
return std::regex_replace(res, rule, it->asString());
|
||||||
|
}
|
||||||
|
} catch (const std::regex_error& e) {
|
||||||
|
spdlog::error("Invalid rule {}: {}", it.key().asString(), e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
} // namespace waybar::util
|
} // namespace waybar::util
|
||||||
|
|
Loading…
Reference in New Issue