From 54e04b5a30228e1c7c95c714bcf0fe178684b96d Mon Sep 17 00:00:00 2001 From: herlev <> Date: Wed, 19 Oct 2022 13:25:08 +0200 Subject: [PATCH] Refactor rewriteTitle --- include/modules/hyprland/window.hpp | 1 - include/modules/sway/window.hpp | 1 - include/util/rewrite_title.hpp | 8 ++++++++ meson.build | 3 ++- src/modules/hyprland/window.cpp | 32 +++-------------------------- src/modules/sway/window.cpp | 29 ++------------------------ src/util/rewrite_title.cpp | 32 +++++++++++++++++++++++++++++ 7 files changed, 47 insertions(+), 59 deletions(-) create mode 100644 include/util/rewrite_title.hpp create mode 100644 src/util/rewrite_title.cpp diff --git a/include/modules/hyprland/window.hpp b/include/modules/hyprland/window.hpp index 2c2ed972..1423aece 100644 --- a/include/modules/hyprland/window.hpp +++ b/include/modules/hyprland/window.hpp @@ -19,7 +19,6 @@ class Window : public waybar::ALabel { private: uint getActiveWorkspaceID(std::string); std::string getLastWindowTitle(uint); - std::string rewriteTitle(const std::string&); void onEvent(const std::string&); bool separate_outputs; diff --git a/include/modules/sway/window.hpp b/include/modules/sway/window.hpp index c99ba7f7..c13d5cee 100644 --- a/include/modules/sway/window.hpp +++ b/include/modules/sway/window.hpp @@ -24,7 +24,6 @@ class Window : public AIconLabel, public sigc::trackable { std::tuple getFocusedNode( const Json::Value& nodes, std::string& output); void getTree(); - std::string rewriteTitle(const std::string& title); void updateAppIconName(); void updateAppIcon(); diff --git a/include/util/rewrite_title.hpp b/include/util/rewrite_title.hpp new file mode 100644 index 00000000..c477339e --- /dev/null +++ b/include/util/rewrite_title.hpp @@ -0,0 +1,8 @@ +#pragma once +#include + +#include + +namespace waybar::util { +std::string rewriteTitle(const std::string&, const Json::Value&); +} diff --git a/meson.build b/meson.build index e537bcca..e72d99f4 100644 --- a/meson.build +++ b/meson.build @@ -157,7 +157,8 @@ src_files = files( 'src/config.cpp', 'src/group.cpp', 'src/util/ustring_clen.cpp', - 'src/util/sanitize_str.cpp' + 'src/util/sanitize_str.cpp', + 'src/util/rewrite_title.cpp' ) if is_linux diff --git a/src/modules/hyprland/window.cpp b/src/modules/hyprland/window.cpp index 0d22fe03..e49561df 100644 --- a/src/modules/hyprland/window.cpp +++ b/src/modules/hyprland/window.cpp @@ -8,6 +8,7 @@ #include "modules/hyprland/backend.hpp" #include "util/command.hpp" #include "util/json.hpp" +#include "util/rewrite_title.hpp" namespace waybar::modules::hyprland { @@ -33,7 +34,7 @@ auto Window::update() -> void { if (!format_.empty()) { label_.show(); - label_.set_markup(fmt::format(format_, rewriteTitle(lastView))); + label_.set_markup(fmt::format(format_, waybar::util::rewriteTitle(lastView, config_["rewrite"]))); } else { label_.hide(); } @@ -61,7 +62,7 @@ std::string Window::getLastWindowTitle(uint workspaceID) { return workspace["id"].as() == workspaceID; }); - if (workspace != std::end(json)) { + if (workspace == std::end(json)) { return ""; } return (*workspace)["lastwindowtitle"].as(); @@ -87,31 +88,4 @@ void Window::onEvent(const std::string& ev) { dp.emit(); } - -std::string Window::rewriteTitle(const std::string& title) { - const auto& rules = config_["rewrite"]; - if (!rules.isObject()) { - return title; - } - - std::string res = title; - - for (auto it = rules.begin(); it != rules.end(); ++it) { - if (it.key().isString() && it->isString()) { - try { - // malformated regexes will cause an exception. - // in this case, log error and try the next rule. - const std::regex rule{it.key().asString()}; - if (std::regex_match(title, rule)) { - res = std::regex_replace(res, rule, it->asString()); - } - } catch (const std::regex_error& e) { - spdlog::error("Invalid rule {}: {}", it.key().asString(), e.what()); - } - } - } - - return res; -} - } // namespace waybar::modules::hyprland \ No newline at end of file diff --git a/src/modules/sway/window.cpp b/src/modules/sway/window.cpp index 3d63743f..499c08c0 100644 --- a/src/modules/sway/window.cpp +++ b/src/modules/sway/window.cpp @@ -1,4 +1,5 @@ #include "modules/sway/window.hpp" +#include "util/rewrite_title.hpp" #include #include @@ -175,7 +176,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", rewriteTitle(window_)), + label_.set_markup(fmt::format(format_, fmt::arg("title", waybar::util::rewriteTitle(window_, config_["rewrite"])), fmt::arg("app_id", app_id_), fmt::arg("shell", shell_))); if (tooltipEnabled()) { label_.set_tooltip_text(window_); @@ -262,30 +263,4 @@ void Window::getTree() { } } -std::string Window::rewriteTitle(const std::string& title) { - const auto& rules = config_["rewrite"]; - if (!rules.isObject()) { - return title; - } - - std::string res = title; - - for (auto it = rules.begin(); it != rules.end(); ++it) { - if (it.key().isString() && it->isString()) { - try { - // malformated regexes will cause an exception. - // in this case, log error and try the next rule. - const std::regex rule{it.key().asString()}; - if (std::regex_match(title, rule)) { - res = std::regex_replace(res, rule, it->asString()); - } - } catch (const std::regex_error& e) { - spdlog::error("Invalid rule {}: {}", it.key().asString(), e.what()); - } - } - } - - return res; -} - } // namespace waybar::modules::sway diff --git a/src/util/rewrite_title.cpp b/src/util/rewrite_title.cpp new file mode 100644 index 00000000..fae59bb1 --- /dev/null +++ b/src/util/rewrite_title.cpp @@ -0,0 +1,32 @@ +#include "util/rewrite_title.hpp" + +#include + +#include + +namespace waybar::util { +std::string rewriteTitle(const std::string& title, const Json::Value& rules) { + if (!rules.isObject()) { + return title; + } + + std::string res = title; + + for (auto it = rules.begin(); it != rules.end(); ++it) { + if (it.key().isString() && it->isString()) { + try { + // malformated regexes will cause an exception. + // in this case, log error and try the next rule. + const std::regex rule{it.key().asString()}; + if (std::regex_match(title, rule)) { + res = std::regex_replace(res, rule, it->asString()); + } + } catch (const std::regex_error& e) { + spdlog::error("Invalid rule {}: {}", it.key().asString(), e.what()); + } + } + } + + return res; +} +} // namespace waybar::util