mirror of
https://github.com/polybar/polybar.git
synced 2024-10-27 05:23:39 -04:00
feat: longest match ws-icon fuzzy matching (#2831)
* better fuzzy matching Improved fuzzy matching so that it finds the longest matching icon instead of the first possible match * Update CHANGELOG.md * removed debug output * added tests and improved fuzzy finder - added return statements to the fuzzy finder - added tests to check whether the fuzzy finder works. * minor style changes * minor change to iconset.cpp * Delete tasks.json
This commit is contained in:
parent
03987b19a5
commit
303015244e
4 changed files with 40 additions and 3 deletions
|
@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- `internal/fs`: Use `/` as a fallback if no mountpoints are specified ([`#2572`](https://github.com/polybar/polybar/issues/2572), [`#2705`](https://github.com/polybar/polybar/pull/2705))
|
- `internal/fs`: Use `/` as a fallback if no mountpoints are specified ([`#2572`](https://github.com/polybar/polybar/issues/2572), [`#2705`](https://github.com/polybar/polybar/pull/2705))
|
||||||
- `internal/backlight`: Detect backlight if none specified ([`#2572`](https://github.com/polybar/polybar/issues/2572), [`#2728`](https://github.com/polybar/polybar/pull/2728))
|
- `internal/backlight`: Detect backlight if none specified ([`#2572`](https://github.com/polybar/polybar/issues/2572), [`#2728`](https://github.com/polybar/polybar/pull/2728))
|
||||||
- Providing a negative min-width to a token adds right-padding ([`#2789`](https://github.com/polybar/polybar/issues/2789), [`#2801`](https://github.com/polybar/polybar/pull/2801)) by [@VanillaViking](https://github.com/VanillaViking).
|
- Providing a negative min-width to a token adds right-padding ([`#2789`](https://github.com/polybar/polybar/issues/2789), [`#2801`](https://github.com/polybar/polybar/pull/2801)) by [@VanillaViking](https://github.com/VanillaViking).
|
||||||
|
- Changed fuzzy match option on i3 and bspwm modules to find longest match instead of the first match ([`#2831`](https://github.com/polybar/polybar/pull/2831), [`#2829`](https://github.com/polybar/polybar/issues/2829)) by [@Ron0Studios](https://github.com/ron0studios/).
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Waiting for double click interval on modules that don't have a double click action ([`#2663`](https://github.com/polybar/polybar/issues/2663), [`#2695`](https://github.com/polybar/polybar/pull/2695))
|
- Waiting for double click interval on modules that don't have a double click action ([`#2663`](https://github.com/polybar/polybar/issues/2663), [`#2695`](https://github.com/polybar/polybar/pull/2695))
|
||||||
|
|
|
@ -21,6 +21,6 @@ namespace drawtypes {
|
||||||
};
|
};
|
||||||
|
|
||||||
using iconset_t = shared_ptr<iconset>;
|
using iconset_t = shared_ptr<iconset>;
|
||||||
} // namespace drawtypes
|
} // namespace drawtypes
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "drawtypes/iconset.hpp"
|
#include "drawtypes/iconset.hpp"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
POLYBAR_NS
|
POLYBAR_NS
|
||||||
|
|
||||||
namespace drawtypes {
|
namespace drawtypes {
|
||||||
|
@ -20,11 +22,22 @@ namespace drawtypes {
|
||||||
|
|
||||||
// If fuzzy matching is turned on, try that first before returning the fallback.
|
// If fuzzy matching is turned on, try that first before returning the fallback.
|
||||||
if (fuzzy_match) {
|
if (fuzzy_match) {
|
||||||
|
// works by finding the *longest* matching icon to the given workspace id
|
||||||
|
size_t max_size = -1;
|
||||||
|
label_t max_label;
|
||||||
|
|
||||||
for (auto const& icon : m_icons) {
|
for (auto const& icon : m_icons) {
|
||||||
if (id.find(icon.first) != std::string::npos) {
|
if (id.find(icon.first) != std::string::npos) {
|
||||||
return icon.second;
|
if (icon.first.length() > max_size || !max_label) {
|
||||||
|
max_size = icon.first.length();
|
||||||
|
max_label = icon.second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (max_label) {
|
||||||
|
return max_label;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_icons.find(fallback_id)->second;
|
return m_icons.find(fallback_id)->second;
|
||||||
|
@ -33,6 +46,6 @@ namespace drawtypes {
|
||||||
iconset::operator bool() {
|
iconset::operator bool() {
|
||||||
return !m_icons.empty();
|
return !m_icons.empty();
|
||||||
}
|
}
|
||||||
} // namespace drawtypes
|
} // namespace drawtypes
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
|
|
@ -16,3 +16,26 @@ TEST(IconSet, fuzzyMatchExactMatchFirst) {
|
||||||
|
|
||||||
EXPECT_EQ("10", ret->get());
|
EXPECT_EQ("10", ret->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(IconSet, fuzzyMatchLargestSubstring) {
|
||||||
|
iconset_t icons = make_shared<iconset>();
|
||||||
|
|
||||||
|
icons->add("1", make_shared<label>("1"));
|
||||||
|
icons->add("10", make_shared<label>("10"));
|
||||||
|
|
||||||
|
label_t ret = icons->get("10a", "", true);
|
||||||
|
|
||||||
|
EXPECT_EQ("10", ret->get());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(IconSet, fuzzyMatchFallback) {
|
||||||
|
iconset_t icons = make_shared<iconset>();
|
||||||
|
|
||||||
|
icons->add("1", make_shared<label>("1"));
|
||||||
|
icons->add("10", make_shared<label>("10"));
|
||||||
|
icons->add("fallback_id", make_shared<label>("fallback_label"));
|
||||||
|
|
||||||
|
label_t ret = icons->get("b", "fallback_id", true);
|
||||||
|
|
||||||
|
EXPECT_EQ("fallback_label", ret->get());
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue