From 2d1ebadb9b65ef8d57f998031f022b29842b40e4 Mon Sep 17 00:00:00 2001 From: zakk4223 Date: Thu, 9 Jan 2025 14:52:26 -0600 Subject: [PATCH] selectors: add a tag: to for matching window tag(s) by regex (#8985) --- src/Compositor.cpp | 15 +++++++++++++++ src/managers/KeybindManager.hpp | 1 + 2 files changed, 16 insertions(+) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 3d159042..79574084 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2401,6 +2401,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); @@ -2438,6 +2441,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 76c72187..d01ec75b 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