Added support for i3status to display file contents
Patch status: superseded
Patch by EscapedNull
To apply this patch, use:
curl http://cr.i3wm.org/patch/392/raw.patch | git am
b/i3status.c
| 15 |
@@ -302,6 +302,15 @@ int main(int argc, char *argv[]) {
|
| 16 |
CFG_END() |
| 17 |
}; |
| 18 |
|
| 19 |
+ cfg_opt_t file_opts[] = {
|
| 20 |
+ CFG_STR("format", "%contents (%mtime_diff)", CFGF_NONE),
|
| 21 |
+ CFG_INT("line", 1, CFGF_NONE),
|
| 22 |
+ CFG_INT("skip", 0, CFGF_NONE),
|
| 23 |
+ CFG_INT("limit", 4096, CFGF_NONE),
|
| 24 |
+ CFG_STR("mtime_format", "%H:%M:%S", CFGF_NONE),
|
| 25 |
+ CFG_END() |
| 26 |
+ }; |
| 27 |
+ |
| 28 |
cfg_opt_t opts[] = {
|
| 29 |
CFG_STR_LIST("order", "{}", CFGF_NONE),
|
| 30 |
CFG_SEC("general", general_opts, CFGF_NONE),
|
| 31 |
@@ -319,6 +328,7 @@ int main(int argc, char *argv[]) {
|
| 32 |
CFG_SEC("ddate", ddate_opts, CFGF_NONE),
|
| 33 |
CFG_SEC("load", load_opts, CFGF_NONE),
|
| 34 |
CFG_SEC("cpu_usage", usage_opts, CFGF_NONE),
|
| 35 |
+ CFG_SEC("file", file_opts, CFGF_TITLE | CFGF_MULTI),
|
| 36 |
CFG_CUSTOM_COLOR_OPTS, |
| 37 |
CFG_END() |
| 38 |
}; |
| 39 |
@@ -547,6 +557,12 @@ int main(int argc, char *argv[]) {
|
| 40 |
print_cpu_usage(json_gen, buffer, cfg_getstr(sec, "format")); |
| 41 |
SEC_CLOSE_MAP; |
| 42 |
} |
| 43 |
+ |
| 44 |
+ CASE_SEC_TITLE("file") {
|
| 45 |
+ SEC_OPEN_MAP("file");
|
| 46 |
+ print_file(json_gen, buffer, title, cfg_getstr(sec, "format"), cfg_getint(sec, "line"), cfg_getint(sec, "skip"), cfg_getint(sec, "limit"), cfg_getstr(sec, "mtime_format")); |
| 47 |
+ SEC_CLOSE_MAP; |
| 48 |
+ } |
| 49 |
} |
| 50 |
if (output_format == O_I3BAR) {
|
| 51 |
yajl_gen_array_close(json_gen); |
b/include/i3status.h
| 56 |
@@ -158,6 +158,7 @@ void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format); |
| 57 |
void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down); |
| 58 |
void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold); |
| 59 |
void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *fmt_muted, const char *device, const char *mixer, int mixer_idx); |
| 60 |
+void print_file(yajl_gen json_gen, char *buffer, const char *title, const char *format, const int line, const int skip, const int limit, const char *mtime_format); |
| 61 |
bool process_runs(const char *path); |
| 62 |
|
| 63 |
/* socket file descriptor for general purposes */ |
b/man/i3status.man
| 68 |
@@ -376,6 +376,49 @@ volume master {
|
| 69 |
} |
| 70 |
------------------------------------------------------------- |
| 71 |
|
| 72 |
+=== File |
| 73 |
+ |
| 74 |
+Prints a file's contents at the specified line, and/or its modification time. |
| 75 |
+ |
| 76 |
++format+ specifies how the file should be displayed. It has the following variables: |
| 77 |
+ |
| 78 |
++%contents+ displays the file's contents according to +line+, +skip+, and +limit+. |
| 79 |
+ |
| 80 |
++%mtime+ shows the file's modification time according to +mtime_format+. By default, |
| 81 |
+"%H:%M:%S" is used. |
| 82 |
+ |
| 83 |
++%mtime_diff+ expands to the file's age in a coarse, concise, human-readable format. |
| 84 |
+For example, "1y" or "28m". Only the largest unit of time is displayed. |
| 85 |
+ |
| 86 |
++mtime_format+ defines which units of time should be displayed as specified by |
| 87 |
+strftime(3). |
| 88 |
+ |
| 89 |
++line+ specifies which line (delimited by "\r", "\n", or "\r\n") should be displayed. |
| 90 |
+Negative values for +line+ will be counted from the bottom. For example, +line = -1+ |
| 91 |
+behaves similarly to tail(1). If the line does not exist, +%contents+ will be blank. |
| 92 |
+Note that many plain text files contain a trailing newline, in which case you should |
| 93 |
+subtract one from the desired +line+ when using a negative value. |
| 94 |
+ |
| 95 |
+i3status removes +skip+ bytes from the beginning of the specified line before |
| 96 |
+displaying it. Similarly, i3status will not display more than +limit+ bytes |
| 97 |
+after +skip+. |
| 98 |
+ |
| 99 |
+*Example order*: +file /var/log/Xorg.0.log+ |
| 100 |
+ |
| 101 |
+*Example format*: +(%mtime_diff) %contents+ |
| 102 |
+*Example format_mtime*: +%a %Y/%m/%d %H:%M:%S+ |
| 103 |
+ |
| 104 |
+*Example configuration*: |
| 105 |
+------------------------------------------------------------- |
| 106 |
+file /var/log/Xorg.0.log {
|
| 107 |
+ format = "[%mtime] %contents (%mtime_diff ago)" |
| 108 |
+ mtime_format = "%a %H:%M:%S" |
| 109 |
+ line = -2 |
| 110 |
+ skip = 10 |
| 111 |
+ limit = 20 |
| 112 |
+} |
| 113 |
+------------------------------------------------------------- |
| 114 |
+ |
| 115 |
== Using i3status with dzen2 |
| 116 |
|
| 117 |
After installing dzen2, you can directly use it with i3status. Just ensure that |