commit fa3f6e32f389268178138e651d0bc729ece367dc
parent 274f0e5f276186e5f24ca213f1bd451949d2a798
Author: drkhsh <me@drkhsh.at>
Date: Wed, 23 Nov 2022 22:55:33 +0100
[slstatus] Add backlight patch from mailing list
This patch adds a backlight component to slstatus.
It was previously denied, because the backlight percentage can be
literally "seen" when looking at a screen, and porting it is not
possible without dirty hacks.
Credits to:
Tobias Tschinkowitz <he4d@posteo.de>
David Demelier <markand@malikania.fr>
Diffstat:
2 files changed, 127 insertions(+), 0 deletions(-)
diff --git a/tools.suckless.org/slstatus/patches/backlight/index.md b/tools.suckless.org/slstatus/patches/backlight/index.md
@@ -0,0 +1,23 @@
+backlight
+=========
+
+Description
+-----------
+This diff adds a backlight component to slstatus. It displays
+backlight percentages. On OpenBSD device permissions have to be
+adapted or slstatus has to be run as root (strongly discouraged!).
+FreeBSD is currently not supported, anyone may add it here.
+
+It was previously denied, because the backlight percentage can be
+literally "seen" when looking at a screen, and porting it is not
+possible without dirty hacks.
+
+Download
+--------
+* [slstatus-backlight-4bd78c9.diff](slstatus-backlight-4bd78c9.diff)
+
+Authors
+-------
+* Tobias Tschinkowitz <he4d@posteo.de>
+* David Demelier <markand@malikania.fr>
+* drkhsh <me@drkhsh.at>
diff --git a/tools.suckless.org/slstatus/patches/backlight/slstatus-backlight-4bd78c9.diff b/tools.suckless.org/slstatus/patches/backlight/slstatus-backlight-4bd78c9.diff
@@ -0,0 +1,104 @@
+diff --git a/Makefile b/Makefile
+index 3be46cc..93dc2c5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -6,6 +6,7 @@ include config.mk
+
+ REQ = util
+ COM =\
++ components/backlight\
+ components/battery\
+ components/cpu\
+ components/datetime\
+diff --git a/components/backlight.c b/components/backlight.c
+new file mode 100644
+index 0000000..74f4c08
+--- /dev/null
++++ b/components/backlight.c
+@@ -0,0 +1,59 @@
++/* See LICENSE file for copyright and license details. */
++
++#include <stddef.h>
++
++#include "../util.h"
++
++#if defined(__linux__)
++ #include <limits.h>
++
++ #define BRIGHTNESS_MAX "/sys/class/backlight/%s/max_brightness"
++ #define BRIGHTNESS_CUR "/sys/class/backlight/%s/brightness"
++
++ const char *
++ backlight_perc(const char *card)
++ {
++ char path[PATH_MAX];
++ int max, cur;
++
++ if (esnprintf(path, sizeof (path), BRIGHTNESS_MAX, card) < 0 ||
++ pscanf(path, "%d", &max) != 1) {
++ return NULL;
++ }
++
++ if (esnprintf(path, sizeof (path), BRIGHTNESS_CUR, card) < 0 ||
++ pscanf(path, "%d", &cur) != 1) {
++ return NULL;
++ }
++
++ if (max == 0) {
++ return NULL;
++ }
++
++ return bprintf("%d%%", cur * 100 / max);
++ }
++#elif defined(__OpenBSD__)
++ #include <fcntl.h>
++ #include <sys/ioctl.h>
++ #include <sys/time.h>
++ #include <dev/wscons/wsconsio.h>
++
++ const char *
++ backlight_perc(const char *unused)
++ {
++ int fd, err;
++ struct wsdisplay_param wsd_param = {
++ .param = WSDISPLAYIO_PARAM_BRIGHTNESS
++ };
++
++ if ((fd = open("/dev/ttyC0", O_RDONLY)) < 0) {
++ warn("could not open /dev/ttyC0");
++ return NULL;
++ }
++ if ((err = ioctl(fd, WSDISPLAYIO_GETPARAM, &wsd_param)) < 0) {
++ warn("ioctl 'WSDISPLAYIO_GETPARAM' failed");
++ return NULL;
++ }
++ return bprintf("%d", wsd_param.curval * 100 / wsd_param.max);
++ }
++#endif
+diff --git a/config.def.h b/config.def.h
+index 5f6c114..69c5d50 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -12,6 +12,9 @@ static const char unknown_str[] = "n/a";
+ /*
+ * function description argument (example)
+ *
++ * backlight_perc backlight percentage device name
++ * (intel_backlight)
++ * NULL on OpenBSD
+ * battery_perc battery percentage battery name (BAT0)
+ * NULL on OpenBSD/FreeBSD
+ * battery_state battery charging state battery name (BAT0)
+diff --git a/slstatus.h b/slstatus.h
+index f3b4979..e1759a0 100644
+--- a/slstatus.h
++++ b/slstatus.h
+@@ -1,5 +1,8 @@
+ /* See LICENSE file for copyright and license details. */
+
++/* backlight */
++const char *backlight_perc(const char *);
++
+ /* battery */
+ const char *battery_perc(const char *);
+ const char *battery_state(const char *);