summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGereon Kremer <gereon.kremer@rwth-aachen.de>2013-11-15 00:41:33 +0100
committerMichael Stapelberg <michael@stapelberg.de>2013-11-18 22:31:42 +0100
commit4bd0ba88c896d1ad9beba2eaadc01f1f2d172b5b (patch)
treec1fd550856fe50bc64ed2db853459101c7f2a506
parent09330976e5b08079014087ce0ac490b5b824c8f8 (diff)
Added different format string for volume in case it is muted.
If the volume is muted, the volume level would simply be displayed as zero and the color changed to color_degraded. This patch lets the user define a custom format string for when the volume is muted. The default value is "♪: 0%" ("♪: %volume" being the usual format).
-rw-r--r--i3status.c2
-rw-r--r--include/i3status.h2
-rw-r--r--src/print_volume.c12
3 files changed, 13 insertions, 3 deletions
diff --git a/i3status.c b/i3status.c
index e99e627..1b9c595 100644
--- a/i3status.c
+++ b/i3status.c
@@ -286,6 +286,7 @@ int main(int argc, char *argv[]) {
cfg_opt_t volume_opts[] = {
CFG_STR("format", "♪: %volume", CFGF_NONE),
+ CFG_STR("format_muted", "♪: 0%%", CFGF_NONE),
CFG_STR("device", "default", CFGF_NONE),
CFG_STR("mixer", "Master", CFGF_NONE),
CFG_INT("mixer_idx", 0, CFGF_NONE),
@@ -513,6 +514,7 @@ int main(int argc, char *argv[]) {
CASE_SEC_TITLE("volume") {
SEC_OPEN_MAP("volume");
print_volume(json_gen, buffer, cfg_getstr(sec, "format"),
+ cfg_getstr(sec, "format_muted"),
cfg_getstr(sec, "device"),
cfg_getstr(sec, "mixer"),
cfg_getint(sec, "mixer_idx"));
diff --git a/include/i3status.h b/include/i3status.h
index d0361d1..64cd660 100644
--- a/include/i3status.h
+++ b/include/i3status.h
@@ -156,7 +156,7 @@ void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const
void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format);
void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down);
void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold);
-void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *device, const char *mixer, int mixer_idx);
+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);
bool process_runs(const char *path);
/* socket file descriptor for general purposes */
diff --git a/src/print_volume.c b/src/print_volume.c
index d84b3ec..493167a 100644
--- a/src/print_volume.c
+++ b/src/print_volume.c
@@ -26,7 +26,7 @@
#include "i3status.h"
#include "queue.h"
-void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *device, const char *mixer, int mixer_idx) {
+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) {
char *outwalk = buffer;
int pbval = 1;
@@ -104,7 +104,7 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
fprintf (stderr, "i3status: ALSA: playback_switch: %s\n", snd_strerror(err));
if (!pbval) {
START_COLOR("color_degraded");
- avg = 0;
+ fmt = fmt_muted;
}
}
@@ -117,6 +117,10 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
*(outwalk++) = *walk;
continue;
}
+ if (BEGINS_WITH(walk+1, "%")) {
+ outwalk += sprintf(outwalk, "%%");
+ walk += strlen("%");
+ }
if (BEGINS_WITH(walk+1, "volume")) {
outwalk += sprintf(outwalk, "%d%%", avg);
walk += strlen("volume");
@@ -156,6 +160,10 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
*(outwalk++) = *walk;
continue;
}
+ if (BEGINS_WITH(walk+1, "%")) {
+ outwalk += sprintf(outwalk, "%%");
+ walk += strlen("%");
+ }
if (BEGINS_WITH(walk+1, "volume")) {
outwalk += sprintf(outwalk, "%d%%", vol & 0x7f);
walk += strlen("volume");