Colored clock for work hours
Patch status: rejected
Patch by Blaz Balon
Long description:
If enabled it color clock green during working hours (default 7am to 5pm) and week (Mon to Fri). Days and hours can be manualy configured.
To apply this patch, use:
curl http://cr.i3wm.org/patch/98/raw.patch | git am
b/i3status.c
18 |
@@ -242,12 +242,22 @@ int main(int argc, char *argv[]) { |
19 |
|
20 |
cfg_opt_t time_opts[] = { |
21 |
CFG_STR("format", "%Y-%m-%d %H:%M:%S", CFGF_NONE), |
22 |
+ CFG_BOOL("workday_color", false, CFGF_NONE), |
23 |
+ CFG_INT("work_start", 7, CFGF_NONE), |
24 |
+ CFG_INT("work_end", 17, CFGF_NONE), |
25 |
+ CFG_STR("workdays", "1,2,3,4,5", CFGF_NONE), |
26 |
+ CFG_CUSTOM_COLOR_OPTS, |
27 |
CFG_END() |
28 |
}; |
29 |
|
30 |
cfg_opt_t tztime_opts[] = { |
31 |
CFG_STR("format", "%Y-%m-%d %H:%M:%S %Z", CFGF_NONE), |
32 |
+ CFG_BOOL("workday_color", false, CFGF_NONE), |
33 |
+ CFG_INT("work_start", 7, CFGF_NONE), |
34 |
+ CFG_INT("work_end", 17, CFGF_NONE), |
35 |
CFG_STR("timezone", "", CFGF_NONE), |
36 |
+ CFG_STR("workdays", "1,2,3,4,5", CFGF_NONE), |
37 |
+ CFG_CUSTOM_COLOR_OPTS, |
38 |
CFG_END() |
39 |
}; |
40 |
|
41 |
@@ -469,13 +479,13 @@ int main(int argc, char *argv[]) { |
42 |
|
43 |
CASE_SEC("time") { |
44 |
SEC_OPEN_MAP("time"); |
45 |
- print_time(json_gen, buffer, cfg_getstr(sec, "format"), NULL, tv.tv_sec); |
46 |
+ print_time(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getbool(sec, "workday_color"), cfg_getint(sec, "work_start"), cfg_getint(sec, "work_end"), cfg_getstr(sec, "workdays"), NULL, tv.tv_sec); |
47 |
SEC_CLOSE_MAP; |
48 |
} |
49 |
|
50 |
CASE_SEC_TITLE("tztime") { |
51 |
SEC_OPEN_MAP("tztime"); |
52 |
- print_time(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getstr(sec, "timezone"), tv.tv_sec); |
53 |
+ print_time(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getbool(sec, "workday_color"), cfg_getint(sec, "work_start"), cfg_getint(sec, "work_end"), cfg_getstr(sec, "workdays"), cfg_getstr(sec, "timezone"), tv.tv_sec); |
54 |
SEC_CLOSE_MAP; |
55 |
} |
56 |
|
b/include/i3status.h
61 |
@@ -143,7 +143,7 @@ void set_timezone(const char *tz); |
62 |
void print_ipv6_info(yajl_gen json_gen, char *buffer, const char *format_up, const char *format_down); |
63 |
void print_disk_info(yajl_gen json_gen, char *buffer, const char *path, const char *format); |
64 |
void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, const char *format_down, int low_threshold, char *threshold_type, bool last_full_capacity, bool integer_battery_capacity); |
65 |
-void print_time(yajl_gen json_gen, char *buffer, const char *format, const char *tz, time_t t); |
66 |
+void print_time(yajl_gen json_gen, char *buffer, const char *format, bool wcolor, int wstart, int wend, const char *workdays, const char *tz, time_t t); |
67 |
void print_ddate(yajl_gen json_gen, char *buffer, const char *format, time_t t); |
68 |
const char *get_ip_addr(); |
69 |
void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down); |
b/man/i3status.man
74 |
@@ -276,16 +276,30 @@ Outputs the current time in the local timezone. |
75 |
To use a different timezone, you can set the TZ environment variable, |
76 |
or use the +tztime+ module. |
77 |
See +strftime(3)+ for details on the format string. |
78 |
+Workdays colors can be turn on, resulting into showing date in green for |
79 |
+inside wirking hours, and red for outside working hours. Workdays can be |
80 |
+specified with numbers from 0 to 7, 0 and 7 being Sunday, 1 Monday,... |
81 |
|
82 |
*Example order*: +time+ |
83 |
|
84 |
*Example format*: +%Y-%m-%d %H:%M:%S+ |
85 |
|
86 |
+*Example workday_color*: +false+ |
87 |
+ |
88 |
+*Example work_start*: +7+ |
89 |
+ |
90 |
+*Example work_end*: +17+ |
91 |
+ |
92 |
+*Example workdays*: +"1,2,3,4,5"+ |
93 |
+ |
94 |
=== TzTime |
95 |
|
96 |
Outputs the current time in the given timezone. |
97 |
If no timezone is given, local time will be used. |
98 |
See +strftime(3)+ for details on the format string. |
99 |
+Workdays colors can be turn on, resulting into showing date in green for |
100 |
+inside wirking hours, and red for outside working hours. Workdays can be |
101 |
+specified with numbers from 0 to 7, 0 and 7 being Sunday, 1 Monday,... |
102 |
The system's timezone database is usually installed in +/usr/share/zoneinfo+. |
103 |
Files below that path make for valid timezone strings, e.g. for |
104 |
+/usr/share/zoneinfo/Europe/Berlin+ you can set timezone to +Europe/Berlin+ |
105 |
@@ -295,8 +309,16 @@ in the +tztime+ module. |
106 |
|
107 |
*Example format*: +%Y-%m-%d %H:%M:%S %Z+ |
108 |
|
109 |
+*Example workday_color*: +false+ |
110 |
+ |
111 |
+*Example work_start*: +7+ |
112 |
+ |
113 |
+*Example work_end*: +17+ |
114 |
+ |
115 |
*Example timezone*: +Europe/Berlin+ |
116 |
|
117 |
+*Example workdays*: +"1,2,3,4,5"+ |
118 |
+ |
119 |
=== DDate |
120 |
|
121 |
Outputs the current discordian date in user-specified format. See +ddate(1)+ for |
b/src/print_time.c
126 |
@@ -33,14 +33,32 @@ void set_timezone(const char *tz) { |
127 |
} |
128 |
} |
129 |
|
130 |
-void print_time(yajl_gen json_gen, char *buffer, const char *format, const char *tz, time_t t) { |
131 |
+void print_time(yajl_gen json_gen, char *buffer, const char *format, bool wcolor, int wstart, int wend, const char *wdays, const char *tz, time_t t) { |
132 |
char *outwalk = buffer; |
133 |
+ char *dayday; |
134 |
struct tm tm; |
135 |
+ char tt[24]; |
136 |
+ char dd[10]; |
137 |
|
138 |
/* Convert time and format output. */ |
139 |
set_timezone(tz); |
140 |
localtime_r(&t, &tm); |
141 |
outwalk += strftime(outwalk, 4095, format, &tm); |
142 |
*outwalk = '\0'; |
143 |
+ |
144 |
+ /* Colors for working hours */ |
145 |
+ if (wcolor) { |
146 |
+ strftime(tt, 24, "%H", &tm); |
147 |
+ strftime(dd, 10, "%w", &tm); |
148 |
+ dayday = strstr(wdays, dd); |
149 |
+ int hours = atoi(tt); |
150 |
+ if (hours >= wstart && hours <= wend && dayday != NULL) { |
151 |
+ START_COLOR("color_good"); |
152 |
+ } else { |
153 |
+ START_COLOR("color_bad"); |
154 |
+ } |
155 |
+ } |
156 |
+ |
157 |
+ END_COLOR; |
158 |
OUTPUT_FULL_TEXT(buffer); |
159 |
} |