mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Merge pull request #1887 from LukashonakV/ISSUE#1874
This commit is contained in:
commit
c1ea7626b9
@ -33,8 +33,9 @@ class Clock : public ALabel {
|
|||||||
|
|
||||||
bool handleScroll(GdkEventScroll* e);
|
bool handleScroll(GdkEventScroll* e);
|
||||||
|
|
||||||
std::string weeks_format_;
|
std::string fmt_str_weeks_;
|
||||||
int weeks_format_left_gaps{0};
|
std::string fmt_str_calendar_;
|
||||||
|
int fmt_weeks_left_pad_{0};
|
||||||
auto calendar_text(const waybar_time& wtime) -> std::string;
|
auto calendar_text(const waybar_time& wtime) -> std::string;
|
||||||
auto weekdays_header(const date::weekday& first_dow, std::ostream& os) -> void;
|
auto weekdays_header(const date::weekday& first_dow, std::ostream& os) -> void;
|
||||||
auto first_day_of_week() -> date::weekday;
|
auto first_day_of_week() -> date::weekday;
|
||||||
|
@ -76,13 +76,19 @@ waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config_["format-calendar-weeks"].isString()) {
|
if (config_["format-calendar-weeks"].isString()) {
|
||||||
weeks_format_ =
|
fmt_str_weeks_ =
|
||||||
std::regex_replace(config_["format-calendar-weeks"].asString(), std::regex("\\{\\}"),
|
std::regex_replace(config_["format-calendar-weeks"].asString(), std::regex("\\{\\}"),
|
||||||
(first_day_of_week() == date::Monday) ? "{:%V}" : "{:%U}");
|
(first_day_of_week() == date::Monday) ? "{:%V}" : "{:%U}");
|
||||||
weeks_format_left_gaps =
|
fmt_weeks_left_pad_ =
|
||||||
std::regex_replace(weeks_format_, std::regex("</?[^>]+>|\\{.*\\}"), "").length();
|
std::regex_replace(fmt_str_weeks_, std::regex("</?[^>]+>|\\{.*\\}"), "").length();
|
||||||
} else {
|
} else {
|
||||||
weeks_format_ = "";
|
fmt_str_weeks_ = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_["format-calendar"].isString()) {
|
||||||
|
fmt_str_calendar_ = config_["format-calendar"].asString();
|
||||||
|
} else {
|
||||||
|
fmt_str_calendar_ = "{}";
|
||||||
}
|
}
|
||||||
|
|
||||||
thread_ = [this] {
|
thread_ = [this] {
|
||||||
@ -206,7 +212,7 @@ auto waybar::modules::Clock::calendar_text(const waybar_time& wtime) -> std::str
|
|||||||
if (config_["calendar-weeks-pos"].asString() == "left") {
|
if (config_["calendar-weeks-pos"].asString() == "left") {
|
||||||
weeks_pos = WeeksSide::LEFT;
|
weeks_pos = WeeksSide::LEFT;
|
||||||
// Add paddings before the header
|
// Add paddings before the header
|
||||||
os << std::string(3 + weeks_format_left_gaps, ' ');
|
os << std::string(3 + fmt_weeks_left_pad_, ' ');
|
||||||
} else if (config_["calendar-weeks-pos"].asString() == "right") {
|
} else if (config_["calendar-weeks-pos"].asString() == "right") {
|
||||||
weeks_pos = WeeksSide::RIGHT;
|
weeks_pos = WeeksSide::RIGHT;
|
||||||
}
|
}
|
||||||
@ -221,7 +227,7 @@ auto waybar::modules::Clock::calendar_text(const waybar_time& wtime) -> std::str
|
|||||||
|
|
||||||
/* Print weeknumber on the left for the first row*/
|
/* Print weeknumber on the left for the first row*/
|
||||||
if (weeks_pos == WeeksSide::LEFT) {
|
if (weeks_pos == WeeksSide::LEFT) {
|
||||||
os << fmt::format(weeks_format_, print_wd) << ' ';
|
os << fmt::format(fmt_str_weeks_, print_wd) << ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty_days > 0) {
|
if (empty_days > 0) {
|
||||||
@ -235,7 +241,7 @@ auto waybar::modules::Clock::calendar_text(const waybar_time& wtime) -> std::str
|
|||||||
os << ' ';
|
os << ' ';
|
||||||
} else if (unsigned(d) != 1) {
|
} else if (unsigned(d) != 1) {
|
||||||
if (weeks_pos == WeeksSide::RIGHT) {
|
if (weeks_pos == WeeksSide::RIGHT) {
|
||||||
os << ' ' << fmt::format(weeks_format_, print_wd);
|
os << ' ' << fmt::format(fmt_str_weeks_, print_wd);
|
||||||
}
|
}
|
||||||
|
|
||||||
os << '\n';
|
os << '\n';
|
||||||
@ -243,7 +249,7 @@ auto waybar::modules::Clock::calendar_text(const waybar_time& wtime) -> std::str
|
|||||||
print_wd = (ym / d);
|
print_wd = (ym / d);
|
||||||
|
|
||||||
if (weeks_pos == WeeksSide::LEFT) {
|
if (weeks_pos == WeeksSide::LEFT) {
|
||||||
os << fmt::format(weeks_format_, print_wd) << ' ';
|
os << fmt::format(fmt_str_weeks_, print_wd) << ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,19 +260,17 @@ auto waybar::modules::Clock::calendar_text(const waybar_time& wtime) -> std::str
|
|||||||
} else {
|
} else {
|
||||||
os << "<b><u>" << date::format("%e", d) << "</u></b>";
|
os << "<b><u>" << date::format("%e", d) << "</u></b>";
|
||||||
}
|
}
|
||||||
} else if (config_["format-calendar"].isString()) {
|
|
||||||
os << fmt::format(config_["format-calendar"].asString(), date::format("%e", d));
|
|
||||||
} else {
|
} else {
|
||||||
os << date::format("%e", d);
|
os << fmt::format(fmt_str_calendar_, date::format("%e", d));
|
||||||
}
|
}
|
||||||
/*Print weeks on the right when the endings with spaces*/
|
/*Print weeks on the right when the endings with spaces*/
|
||||||
if (weeks_pos == WeeksSide::RIGHT && d == last_day) {
|
if (weeks_pos == WeeksSide::RIGHT && d == last_day) {
|
||||||
empty_days = 6 - (wd.c_encoding() - first_dow.c_encoding());
|
empty_days = 6 - (wd.c_encoding() - first_dow.c_encoding());
|
||||||
if (empty_days > 0) {
|
if (empty_days > 0 && empty_days < 7) {
|
||||||
os << std::string(empty_days * 3, ' ');
|
os << std::string(empty_days * 3, ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
os << ' ' << fmt::format(weeks_format_, print_wd);
|
os << ' ' << fmt::format(fmt_str_weeks_, print_wd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user