mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
3c1ba0a240 | |||
6c7acf18b5 | |||
ead1b2f0dc | |||
115c6e36e6 | |||
210f4454f0 | |||
77d8376fef | |||
0e580236ce | |||
1aa7587cac | |||
b6655e475b | |||
903fc2b6a2 | |||
50fc63b749 | |||
ece86c96d7 |
11
README.md
11
README.md
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> Highly customizable Wayland bar for Sway and Wlroots based compositors.<br>
|
> Highly customizable Wayland bar for Sway and Wlroots based compositors.<br>
|
||||||
> Available in Arch [community](https://www.archlinux.org/packages/community/x86_64/waybar/) or
|
> Available in Arch [community](https://www.archlinux.org/packages/community/x86_64/waybar/) or
|
||||||
[AUR](https://aur.archlinux.org/packages/waybar-git/), [Gentoo](https://packages.gentoo.org/packages/gui-apps/waybar), [openSUSE](https://build.opensuse.org/package/show/X11:Wayland/waybar), and [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=waybar)<br>
|
[AUR](https://aur.archlinux.org/packages/waybar-git/), [Gentoo](https://packages.gentoo.org/packages/gui-apps/waybar), [openSUSE](https://build.opensuse.org/package/show/X11:Wayland/waybar), and [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=waybar).<br>
|
||||||
> *Waybar [examples](https://github.com/Alexays/Waybar/wiki/Examples)*
|
> *Waybar [examples](https://github.com/Alexays/Waybar/wiki/Examples)*
|
||||||
|
|
||||||
#### Current features
|
#### Current features
|
||||||
@ -20,7 +20,7 @@
|
|||||||
- MPD
|
- MPD
|
||||||
- Custom scripts
|
- Custom scripts
|
||||||
- Multiple output configuration
|
- Multiple output configuration
|
||||||
- And much more customizations
|
- And many more customizations
|
||||||
|
|
||||||
#### Configuration and Styling
|
#### Configuration and Styling
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ scdoc
|
|||||||
wayland-protocols
|
wayland-protocols
|
||||||
```
|
```
|
||||||
|
|
||||||
On Ubuntu you can install all the relevant dependencies using this command (tested with 19.10 and 20.04):
|
On Ubuntu, you can install all the relevant dependencies using this command (tested with 19.10 and 20.04):
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
@ -107,8 +107,9 @@ sudo apt install \
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Contributions welcome! - have fun :)<br>
|
Contributions welcome!<br>
|
||||||
The style guidelines is [Google's](https://google.github.io/styleguide/cppguide.html)
|
Have fun :)<br>
|
||||||
|
The style guidelines are [Google's](https://google.github.io/styleguide/cppguide.html)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ struct waybar_time;
|
|||||||
namespace modules {
|
namespace modules {
|
||||||
|
|
||||||
const std::string kCalendarPlaceholder = "calendar";
|
const std::string kCalendarPlaceholder = "calendar";
|
||||||
|
const std::string KTimezonedTimeListPlaceholder = "timezoned_time_list";
|
||||||
|
|
||||||
class Clock : public ALabel {
|
class Clock : public ALabel {
|
||||||
public:
|
public:
|
||||||
@ -26,6 +27,7 @@ class Clock : public ALabel {
|
|||||||
date::year_month_day cached_calendar_ymd_ = date::January/1/0;
|
date::year_month_day cached_calendar_ymd_ = date::January/1/0;
|
||||||
std::string cached_calendar_text_;
|
std::string cached_calendar_text_;
|
||||||
bool is_calendar_in_tooltip_;
|
bool is_calendar_in_tooltip_;
|
||||||
|
bool is_timezoned_list_in_tooltip_;
|
||||||
|
|
||||||
bool handleScroll(GdkEventScroll* e);
|
bool handleScroll(GdkEventScroll* e);
|
||||||
|
|
||||||
@ -34,6 +36,7 @@ class Clock : public ALabel {
|
|||||||
auto first_day_of_week() -> date::weekday;
|
auto first_day_of_week() -> date::weekday;
|
||||||
const date::time_zone* current_timezone();
|
const date::time_zone* current_timezone();
|
||||||
bool is_timezone_fixed();
|
bool is_timezone_fixed();
|
||||||
|
auto timezones_text(std::chrono::_V2::system_clock::time_point *now) -> std::string;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace modules
|
} // namespace modules
|
||||||
|
@ -96,6 +96,7 @@ View all valid format options in *strftime(3)*.
|
|||||||
# FORMAT REPLACEMENTS
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
*{calendar}*: Current month calendar
|
*{calendar}*: Current month calendar
|
||||||
|
*{timezoned_time_list}*: List of time in the rest timezones, if more than one timezone is set in the config
|
||||||
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
|
||||||
|
@ -70,6 +70,11 @@ Addressed by *sway/window*
|
|||||||
typeof: object ++
|
typeof: object ++
|
||||||
Rules to rewrite window title. See *rewrite rules*.
|
Rules to rewrite window title. See *rewrite rules*.
|
||||||
|
|
||||||
|
*icon*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
Option to hide the application icon.
|
||||||
|
|
||||||
# REWRITE RULES
|
# REWRITE RULES
|
||||||
|
|
||||||
*rewrite* is an object where keys are regular expressions and values are
|
*rewrite* is an object where keys are regular expressions and values are
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
project(
|
project(
|
||||||
'waybar', 'cpp', 'c',
|
'waybar', 'cpp', 'c',
|
||||||
version: '0.9.10',
|
version: '0.9.12',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
meson_version: '>= 0.49.0',
|
meson_version: '>= 0.49.0',
|
||||||
default_options : [
|
default_options : [
|
||||||
|
@ -22,7 +22,7 @@ auto AIconLabel::update() -> void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool AIconLabel::iconEnabled() const {
|
bool AIconLabel::iconEnabled() const {
|
||||||
return config_["icon"].isBool() ? config_["icon"].asBool() : true;
|
return config_["icon"].isBool() ? config_["icon"].asBool() : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace waybar
|
} // namespace waybar
|
||||||
|
@ -23,7 +23,8 @@ using waybar::waybar_time;
|
|||||||
waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config)
|
waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config)
|
||||||
: ALabel(config, "clock", id, "{:%H:%M}", 60, false, false, true),
|
: ALabel(config, "clock", id, "{:%H:%M}", 60, false, false, true),
|
||||||
current_time_zone_idx_(0),
|
current_time_zone_idx_(0),
|
||||||
is_calendar_in_tooltip_(false)
|
is_calendar_in_tooltip_(false),
|
||||||
|
is_timezoned_list_in_tooltip_(false)
|
||||||
{
|
{
|
||||||
if (config_["timezones"].isArray() && !config_["timezones"].empty()) {
|
if (config_["timezones"].isArray() && !config_["timezones"].empty()) {
|
||||||
for (const auto& zone_name: config_["timezones"]) {
|
for (const auto& zone_name: config_["timezones"]) {
|
||||||
@ -64,6 +65,9 @@ waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config)
|
|||||||
if (trimmed_format.find("{" + kCalendarPlaceholder + "}") != std::string::npos) {
|
if (trimmed_format.find("{" + kCalendarPlaceholder + "}") != std::string::npos) {
|
||||||
is_calendar_in_tooltip_ = true;
|
is_calendar_in_tooltip_ = true;
|
||||||
}
|
}
|
||||||
|
if (trimmed_format.find("{" + KTimezonedTimeListPlaceholder + "}") != std::string::npos) {
|
||||||
|
is_timezoned_list_in_tooltip_ = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config_["locale"].isString()) {
|
if (config_["locale"].isString()) {
|
||||||
@ -108,11 +112,15 @@ auto waybar::modules::Clock::update() -> void {
|
|||||||
if (tooltipEnabled()) {
|
if (tooltipEnabled()) {
|
||||||
if (config_["tooltip-format"].isString()) {
|
if (config_["tooltip-format"].isString()) {
|
||||||
std::string calendar_lines = "";
|
std::string calendar_lines = "";
|
||||||
|
std::string timezoned_time_lines = "";
|
||||||
if (is_calendar_in_tooltip_) {
|
if (is_calendar_in_tooltip_) {
|
||||||
calendar_lines = calendar_text(wtime);
|
calendar_lines = calendar_text(wtime);
|
||||||
}
|
}
|
||||||
|
if (is_timezoned_list_in_tooltip_) {
|
||||||
|
timezoned_time_lines = timezones_text(&now);
|
||||||
|
}
|
||||||
auto tooltip_format = config_["tooltip-format"].asString();
|
auto tooltip_format = config_["tooltip-format"].asString();
|
||||||
text = fmt::format(tooltip_format, wtime, fmt::arg(kCalendarPlaceholder.c_str(), calendar_lines));
|
text = fmt::format(tooltip_format, wtime, fmt::arg(kCalendarPlaceholder.c_str(), calendar_lines), fmt::arg(KTimezonedTimeListPlaceholder.c_str(), timezoned_time_lines));
|
||||||
label_.set_tooltip_markup(text);
|
label_.set_tooltip_markup(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -211,6 +219,26 @@ auto waybar::modules::Clock::weekdays_header(const date::weekday& first_dow, std
|
|||||||
os << "\n";
|
os << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto waybar::modules::Clock::timezones_text(std::chrono::_V2::system_clock::time_point *now) -> std::string {
|
||||||
|
if (time_zones_.size() == 1) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
std::stringstream os;
|
||||||
|
waybar_time wtime;
|
||||||
|
for (size_t time_zone_idx = 0; time_zone_idx < time_zones_.size(); ++time_zone_idx) {
|
||||||
|
if (static_cast<int>(time_zone_idx) == current_time_zone_idx_) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const date::time_zone* timezone = time_zones_[time_zone_idx];
|
||||||
|
if (!timezone) {
|
||||||
|
timezone = date::current_zone();
|
||||||
|
}
|
||||||
|
wtime = {locale_, date::make_zoned(timezone, date::floor<std::chrono::seconds>(*now))};
|
||||||
|
os << fmt::format(format_, wtime) << "\n";
|
||||||
|
}
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LANGINFO_1STDAY
|
#ifdef HAVE_LANGINFO_1STDAY
|
||||||
template <auto fn>
|
template <auto fn>
|
||||||
using deleter_from_fn = std::integral_constant<decltype(fn), fn>;
|
using deleter_from_fn = std::integral_constant<decltype(fn), fn>;
|
||||||
|
@ -78,7 +78,7 @@ waybar::modules::Network::Network(const std::string &id, const Json::Value &conf
|
|||||||
family_(config["family"] == "ipv6" ? AF_INET6 : AF_INET),
|
family_(config["family"] == "ipv6" ? AF_INET6 : AF_INET),
|
||||||
efd_(-1),
|
efd_(-1),
|
||||||
ev_fd_(-1),
|
ev_fd_(-1),
|
||||||
want_route_dump_(true),
|
want_route_dump_(false),
|
||||||
want_link_dump_(false),
|
want_link_dump_(false),
|
||||||
want_addr_dump_(false),
|
want_addr_dump_(false),
|
||||||
dump_in_progress_(false),
|
dump_in_progress_(false),
|
||||||
|
Reference in New Issue
Block a user