commit
038644f8d9
|
@ -1,105 +1,167 @@
|
||||||
waybar-clock(5)
|
waybar-clock(5) "waybar-clock" "User Manual"
|
||||||
|
|
||||||
# NAME
|
# NAME
|
||||||
|
|
||||||
waybar - clock module
|
clock
|
||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
The *clock* module displays the current date and time.
|
*clock* module displays current date and time
|
||||||
|
|
||||||
|
# FILES
|
||||||
|
|
||||||
|
$XDG_CONFIG_HOME/waybar/config ++
|
||||||
|
Per user configuration file
|
||||||
|
|
||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
|
|
||||||
*interval*: ++
|
1. Addressed by *clock*
|
||||||
typeof: integer ++
|
[- *Option*
|
||||||
default: 60 ++
|
:- *Typeof*
|
||||||
The interval in which the information gets polled.
|
:- *Default*
|
||||||
|
:- *Description*
|
||||||
|
|[ *interval*
|
||||||
|
:[ integer
|
||||||
|
:[ 60
|
||||||
|
:[ The interval in which the information gets polled
|
||||||
|
|[ *format*
|
||||||
|
:[ string
|
||||||
|
:[ *{:%H:%M}*
|
||||||
|
:[ The format, how the date and time should be displayed. See format options below
|
||||||
|
|[ *timezone*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ The timezone to display the time in, e.g. America/New_York. "" represents
|
||||||
|
the system's local timezone. See Wikipedia's unofficial list of timezones <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>
|
||||||
|
|[ *timezones*
|
||||||
|
:[ list of strings
|
||||||
|
:[
|
||||||
|
:[ A list of timezones (as in *timezone*) to use for time display, changed using
|
||||||
|
the scroll wheel. Do not specify *timezone* option when *timezones* is specified.
|
||||||
|
"" represents the system's local timezone
|
||||||
|
|[ *locale*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ A locale to be used to display the time. Intended to render times in custom
|
||||||
|
timezones with the proper language and format
|
||||||
|
|[ *max-length*
|
||||||
|
:[ integer
|
||||||
|
:[
|
||||||
|
:[ The maximum length in character the module should display
|
||||||
|
|[ *rotate*
|
||||||
|
:[ integer
|
||||||
|
:[
|
||||||
|
:[ Positive value to rotate the text label
|
||||||
|
|[ *on-click*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Command to execute when clicked on the module
|
||||||
|
|[ *on-click-middle*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Command to execute when you middle clicked on the module using mousewheel
|
||||||
|
|[ *on-click-right*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Command to execute when you right clicked on the module
|
||||||
|
|[ *on-scroll-up*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Command to execute when scrolling up on the module
|
||||||
|
|[ *on-scroll-down*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Command to execute when scrolling down on the module
|
||||||
|
|[ *smooth-scrolling-threshold*
|
||||||
|
:[ double
|
||||||
|
:[
|
||||||
|
:[ Threshold to be used when scrolling
|
||||||
|
|[ *tooltip*
|
||||||
|
:[ bool
|
||||||
|
:[ true
|
||||||
|
:[ Option to enable tooltip on hover
|
||||||
|
|[ *tooltip-format*
|
||||||
|
:[ string
|
||||||
|
:[ same as format
|
||||||
|
:[ Tooltip on hover
|
||||||
|
|
||||||
*format*: ++
|
View all valid format options in *strftime(3)* or have a look <https://fmt.dev/latest/syntax.html#chrono-specs>
|
||||||
typeof: string ++
|
|
||||||
default: {:%H:%M} ++
|
|
||||||
The format, how the date and time should be displayed. ++
|
|
||||||
It uses the format of the date library. See https://howardhinnant.github.io/date/date.html#to_stream_formatting for details.
|
|
||||||
|
|
||||||
*timezone*: ++
|
2. Addressed by *clock: calendar*
|
||||||
typeof: string ++
|
[- *Option*
|
||||||
default: inferred local timezone ++
|
:- *Typeof*
|
||||||
The timezone to display the time in, e.g. America/New_York. ++
|
:- *Default*
|
||||||
This field will be ignored if *timezones* field is set and have at least one value.
|
:- *Description*
|
||||||
|
|[ *mode*
|
||||||
|
:[ string
|
||||||
|
:[ month
|
||||||
|
:[ Calendar view mode. Possible values: year|month
|
||||||
|
|[ *mode-mon-col*
|
||||||
|
:[ integer
|
||||||
|
:[ 3
|
||||||
|
:[ Relevant for *mode=year*. Count of months per row
|
||||||
|
|[ *weeks-pos*
|
||||||
|
:[ integer
|
||||||
|
:[
|
||||||
|
:[ The position where week numbers should be displayed. Disabled when is empty.
|
||||||
|
Possible values: left|right
|
||||||
|
|[ *on-scroll*
|
||||||
|
:[ integer
|
||||||
|
:[ 1
|
||||||
|
:[ Value to scroll months/years forward/backward. Can be negative. Is
|
||||||
|
configured under *on-scroll* option
|
||||||
|
|
||||||
*timezones*: ++
|
3. Adressed by *clock: calendar: format*
|
||||||
typeof: list of strings ++
|
[- *Option*
|
||||||
A list of timezones to use for time display, changed using the scroll wheel. ++
|
:- *Typeof*
|
||||||
Use "" to represent the system's local timezone. Using %Z in the format or tooltip format is useful to track which time zone is currently displayed.
|
:- *Default*
|
||||||
|
:- *Description*
|
||||||
|
|[ *months*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Format is applied to months header(January, February,...etc.)
|
||||||
|
|[ *days*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Format is applied to days
|
||||||
|
|[ *weeks*
|
||||||
|
:[ string
|
||||||
|
:[ *{:%U}*
|
||||||
|
:[ Format is applied to week numbers. When weekday format is not provided then
|
||||||
|
is used default format: '{:%W}' when week starts with Monday, '{:%U}' otherwise
|
||||||
|
|[ *weekdays*
|
||||||
|
:[ string
|
||||||
|
:[
|
||||||
|
:[ Format is applied to weeks header(Su,Mo,...etc.)
|
||||||
|
|[ *today*
|
||||||
|
:[ string
|
||||||
|
:[ *<b><u>{}</u></b>*
|
||||||
|
:[ Format is applied to Today
|
||||||
|
|
||||||
*locale*: ++
|
## Actions
|
||||||
typeof: string ++
|
|
||||||
default: inferred from current locale ++
|
|
||||||
A locale to be used to display the time. Intended to render times in custom timezones with the proper language and format.
|
|
||||||
|
|
||||||
*today-format*: ++
|
[- *String*
|
||||||
typeof: string ++
|
:- *Action*
|
||||||
default: <b><u>{}</u></b> ++
|
|[ *mode*
|
||||||
The format of today's date in the calendar.
|
:[ Switch calendar mode between year/month
|
||||||
|
|[ *tz_up*
|
||||||
*max-length*: ++
|
:[ Switch to the next provided time zone
|
||||||
typeof: integer ++
|
|[ *tz_down*
|
||||||
The maximum length in character the module should display.
|
:[ Switch to the previous provided time zone
|
||||||
|
|[ *shift_up*
|
||||||
*min-length*: ++
|
:[ Switch to the next calendar month/year
|
||||||
typeof: integer ++
|
|[ *shift_down*
|
||||||
The minimum length in characters the module should take up.
|
:[ Switch to the previous calendar month/year
|
||||||
|
|
||||||
*align*: ++
|
|
||||||
typeof: float ++
|
|
||||||
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
|
||||||
|
|
||||||
*rotate*: ++
|
|
||||||
typeof: integer ++
|
|
||||||
Positive value to rotate the text label.
|
|
||||||
|
|
||||||
*on-click*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when clicked on the module.
|
|
||||||
|
|
||||||
*on-click-middle*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when middle-clicked on the module using mousewheel.
|
|
||||||
|
|
||||||
*on-click-right*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when you right clicked on the module.
|
|
||||||
|
|
||||||
*on-update*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when the module is updated.
|
|
||||||
|
|
||||||
*on-scroll-up*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when scrolling up on the module.
|
|
||||||
|
|
||||||
*on-scroll-down*: ++
|
|
||||||
typeof: string ++
|
|
||||||
Command to execute when scrolling down on the module.
|
|
||||||
|
|
||||||
*smooth-scrolling-threshold*: ++
|
|
||||||
typeof: double ++
|
|
||||||
Threshold to be used when scrolling.
|
|
||||||
|
|
||||||
*tooltip*: ++
|
|
||||||
typeof: bool ++
|
|
||||||
default: true ++
|
|
||||||
Option to disable tooltip on hover.
|
|
||||||
|
|
||||||
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
|
- *{timezoned_time_list}*: List of time in the rest timezones, if more than one timezone is set in the config
|
||||||
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
|
||||||
|
1. General
|
||||||
|
|
||||||
```
|
```
|
||||||
"clock": {
|
"clock": {
|
||||||
"interval": 60,
|
"interval": 60,
|
||||||
|
@ -108,6 +170,101 @@ View all valid format options in *strftime(3)*.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
2. Calendar
|
||||||
|
|
||||||
|
```
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%H:%M} ",
|
||||||
|
"format-alt": "{:%A, %B %d, %Y (%R)} ",
|
||||||
|
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
||||||
|
"calendar": {
|
||||||
|
"mode" : "year",
|
||||||
|
"mode-mon-col" : 3,
|
||||||
|
"weeks-pos" : "right",
|
||||||
|
"on-scroll" : 1,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#ffead3'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#ecc6d9'><b>{}</b></span>",
|
||||||
|
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
|
||||||
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"on-click-forward": "tz_up",
|
||||||
|
"on-click-backward": "tz_down",
|
||||||
|
"on-scroll-up": "shift_up",
|
||||||
|
"on-scroll-down": "shift_down"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Full date on hover
|
||||||
|
|
||||||
|
```
|
||||||
|
"clock": {
|
||||||
|
"interval": 60,
|
||||||
|
"tooltip": true,
|
||||||
|
"format": "{:%H.%M}",
|
||||||
|
"tooltip-format": "{:%Y-%m-%d}",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# STYLE
|
# STYLE
|
||||||
|
|
||||||
- *#clock*
|
- *#clock*
|
||||||
|
|
||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
If clock module is disabled at startup with locale::facet::\_S\_create\_c\_locale ++
|
||||||
|
name not valid error message try one of the followings:
|
||||||
|
|
||||||
|
- check if LC_TIME is set properly (glibc)
|
||||||
|
- set locale to C in the config file (musl)
|
||||||
|
|
||||||
|
The locale option must be set for {calendar} to use the correct start-of-week, regardless of system locale.
|
||||||
|
|
||||||
|
## Calendar in Chinese. Alignment
|
||||||
|
|
||||||
|
In order to have aligned Chinese calendar there are some useful recommendations:
|
||||||
|
|
||||||
|
. Use "WenQuanYi Zen Hei Mono" which is provided in most Linux distributions
|
||||||
|
. Try different font sizes and find best for you. size = 9pt should be fine
|
||||||
|
. In case when "WenQuanYi Zen Hei Mono" font is used disable monospace font pango tag
|
||||||
|
|
||||||
|
Example of working config
|
||||||
|
|
||||||
|
```
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%H:%M} ",
|
||||||
|
"format-alt": "{:%A, %B %d, %Y (%R)} ",
|
||||||
|
"tooltip-format": "\n<span size='9pt' font='WenQuanYi Zen Hei Mono'>{calendar}</span>",
|
||||||
|
"calendar": {
|
||||||
|
"mode" : "year",
|
||||||
|
"mode-mon-col" : 3,
|
||||||
|
"weeks-pos" : "right",
|
||||||
|
"on-scroll" : 1,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#ffead3'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#ecc6d9'><b>{}</b></span>",
|
||||||
|
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
|
||||||
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"on-click-forward": "tz_up",
|
||||||
|
"on-click-backward": "tz_down",
|
||||||
|
"on-scroll-up": "shift_up",
|
||||||
|
"on-scroll-down": "shift_down"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
# AUTHOR
|
||||||
|
|
||||||
|
Alexis Rouillard <contact@arouillard.fr>
|
||||||
|
|
|
@ -22,19 +22,25 @@ waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config)
|
||||||
is_timezoned_list_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"]) {
|
||||||
if (!zone_name.isString() || zone_name.asString().empty()) continue;
|
if (!zone_name.isString()) continue;
|
||||||
|
if (zone_name.asString().empty())
|
||||||
|
time_zones_.push_back(date::current_zone());
|
||||||
|
else
|
||||||
|
try {
|
||||||
|
time_zones_.push_back(date::locate_zone(zone_name.asString()));
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
spdlog::warn("Timezone: {0}. {1}", zone_name.asString(), e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (config_["timezone"].isString()) {
|
||||||
|
if (config_["timezone"].asString().empty())
|
||||||
|
time_zones_.push_back(date::current_zone());
|
||||||
|
else
|
||||||
try {
|
try {
|
||||||
time_zones_.push_back(date::locate_zone(zone_name.asString()));
|
time_zones_.push_back(date::locate_zone(config_["timezone"].asString()));
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
spdlog::warn("Timezone: {0}. {1}", zone_name.asString(), e.what());
|
spdlog::warn("Timezone: {0}. {1}", config_["timezone"].asString(), e.what());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else if (config_["timezone"].isString() && !config_["timezone"].asString().empty()) {
|
|
||||||
try {
|
|
||||||
time_zones_.push_back(date::locate_zone(config_["timezone"].asString()));
|
|
||||||
} catch (const std::exception& e) {
|
|
||||||
spdlog::warn("Timezone: {0}. {1}", config_["timezone"].asString(), e.what());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If all timezones are parsed and no one is good, add current time zone. nullptr in timezones
|
// If all timezones are parsed and no one is good, add current time zone. nullptr in timezones
|
||||||
|
|
Loading…
Reference in New Issue