mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Add option to rewrite sway/window title
Rewrites window title according to config option "rewrite". "rewrite" is an object where keys are regular expressions and values are rewrite rules if the expression matches. Rules may contain references to captures of the expression. Regex and replacement follow ECMA-script rules. If no regex matches, the title is left unchanged. example: "sway/window": { "rewrite": { "(.*) - Mozilla Firefox": " $1", "(.*) - zsh": " $1", } }
This commit is contained in:
parent
1c9b62de07
commit
b16c8972c7
@ -22,6 +22,7 @@ class Window : public ALabel, public sigc::trackable {
|
||||
std::tuple<std::size_t, int, std::string, std::string> getFocusedNode(const Json::Value& nodes,
|
||||
std::string& output);
|
||||
void getTree();
|
||||
std::string rewriteTitle(const std::string& title);
|
||||
|
||||
const Bar& bar_;
|
||||
std::string window_;
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "modules/sway/window.hpp"
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <regex>
|
||||
|
||||
namespace waybar::modules::sway {
|
||||
|
||||
@ -56,7 +57,7 @@ auto Window::update() -> void {
|
||||
bar_.window.get_style_context()->remove_class("solo");
|
||||
bar_.window.get_style_context()->remove_class("empty");
|
||||
}
|
||||
label_.set_markup(fmt::format(format_, fmt::arg("title", window_),
|
||||
label_.set_markup(fmt::format(format_, fmt::arg("title", rewriteTitle(window_)),
|
||||
fmt::arg("app_id", app_id_)));
|
||||
if (tooltipEnabled()) {
|
||||
label_.set_tooltip_text(window_);
|
||||
@ -131,4 +132,23 @@ void Window::getTree() {
|
||||
}
|
||||
}
|
||||
|
||||
std::string Window::rewriteTitle(const std::string& title)
|
||||
{
|
||||
const auto& rules = config_["rewrite"];
|
||||
if (!rules.isObject()) {
|
||||
return title;
|
||||
}
|
||||
|
||||
for (auto it = rules.begin(); it != rules.end(); ++it) {
|
||||
if (it.key().isString() && it->isString()) {
|
||||
const std::regex rule{it.key().asString()};
|
||||
if (std::regex_match(title, rule)) {
|
||||
return std::regex_replace(title, rule, it->asString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
} // namespace waybar::modules::sway
|
||||
|
Loading…
Reference in New Issue
Block a user