diff --git a/src/Compositor.cpp b/src/Compositor.cpp index c80f05e6361..a68a06650e6 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2400,6 +2400,9 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { } else if (regexp.starts_with("initialtitle:")) { mode = MODE_INITIAL_TITLE_REGEX; regexCheck = regexp.substr(13); + } else if (regexp.starts_with("tag:")) { + mode = MODE_TAG_REGEX; + regexCheck = regexp.substr(4); } else if (regexp.starts_with("address:")) { mode = MODE_ADDRESS; matchCheck = regexp.substr(8); @@ -2437,6 +2440,18 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { continue; break; } + case MODE_TAG_REGEX: { + bool tagMatched = false; + for (auto const& t : w->m_tags.getTags()) { + if (RE2::FullMatch(t, regexCheck)) { + tagMatched = true; + break; + } + } + if (!tagMatched) + continue; + break; + } case MODE_ADDRESS: { std::string addr = std::format("0x{:x}", (uintptr_t)w.get()); if (matchCheck != addr) diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 02a39df9b5a..fe3e13d36f5 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -49,6 +49,7 @@ enum eFocusWindowMode : uint8_t { MODE_INITIAL_CLASS_REGEX, MODE_TITLE_REGEX, MODE_INITIAL_TITLE_REGEX, + MODE_TAG_REGEX, MODE_ADDRESS, MODE_PID, MODE_ACTIVE_WINDOW