From 7f510aef75e9c524fb7858f62e33838ab4f54932 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Tue, 14 Mar 2017 22:36:07 -0400 Subject: Add bri brightness control script This is probably terrible. --- .bin/bri.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .tmux.conf | 3 +++ install.sh | 1 + 3 files changed, 80 insertions(+) create mode 100755 .bin/bri.c diff --git a/.bin/bri.c b/.bin/bri.c new file mode 100755 index 00000000..88a11994 --- /dev/null +++ b/.bin/bri.c @@ -0,0 +1,76 @@ +#if 0 +sudo rm $(dirname $0)/bri && \ +cc -Wall -Wextra -pedantic $@ -o $(dirname $0)/bri $0 && \ +sudo chown root:root $(dirname $0)/bri && \ +exec sudo chmod u+s $(dirname $0)/bri +#endif + +// Backlight brightness control. + +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int error; + + if (argc < 2) errx(EX_USAGE, "usage: bri N | +... | -..."); + + error = chdir("/sys/class/backlight"); + if (error) err(EX_IOERR, "/sys/class/backlight"); + + DIR *dir = opendir("."); + if (!dir) err(EX_IOERR, "opendir"); + + struct dirent *entry; + while (NULL != (errno = 0, entry = readdir(dir))) { + if (entry->d_name[0] == '.') continue; + + error = chdir(entry->d_name); + if (error) err(EX_IOERR, entry->d_name); + break; + } + if (!entry) { + if (errno) err(EX_IOERR, "readdir"); + errx(EX_CONFIG, "empty /sys/class/backlight"); + } + + char *bright = argv[1]; + + if (bright[0] == '+' || bright[0] == '-') { + FILE *actual = fopen("actual_brightness", "r"); + if (!actual) err(EX_IOERR, "actual_brightness"); + + unsigned int current; + int match = fscanf(actual, "%u", ¤t); + if (match == EOF) err(EX_IOERR, "fscanf"); + if (match < 1) err(EX_DATAERR, "fscanf"); + + size_t count = strnlen(bright, 15); + if (bright[0] == '+') { + current += 16 * count; + } else { + current -= 16 * count; + } + + char buf[15]; + snprintf(buf, sizeof(buf), "%u", current); + + bright = buf; + } + + error = setuid(0); + if (error) err(EX_NOPERM, "setuid"); + + FILE *brightness = fopen("brightness", "w"); + if (!brightness) err(EX_IOERR, "brightness"); + + int count = fprintf(brightness, "%s", bright); + if (count < 0) err(EX_IOERR, "fprintf"); + + return EX_OK; +} diff --git a/.tmux.conf b/.tmux.conf index f3cb4525..c0343d31 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -40,3 +40,6 @@ set -g window-status-format ' #{=20:pane_title} ' set -g window-status-current-format '#[reverse] #{pane_title} ' set -g status-left '|' set -g status-right '[#h:#S] #(clock)' + +bind -r F6 run-shell 'bri -' +bind -r F7 run-shell 'bri +' diff --git a/install.sh b/install.sh index 4012daec..09d1f8a2 100755 --- a/install.sh +++ b/install.sh @@ -25,6 +25,7 @@ if [ -d '~/Library' ]; then link 'Library/Application Support/Karabiner/private.xml' fi +link '.bin/bri.c' link '.bin/clock.c' link '.bin/jrp.c' link '.bin/manpager' -- cgit 1.4.1