mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2026-06-11 10:23:19 +00:00
env: rename to envcfg
This commit is contained in:
@@ -0,0 +1,302 @@
|
||||
From a822ac65306ca331b95b17ffe08147110c03c60d Mon Sep 17 00:00:00 2001
|
||||
From: Dima Krasner <dima@dimakrasner.com>
|
||||
Date: Sat, 30 Dec 2023 10:49:48 +0200
|
||||
Subject: [PATCH] allow environment variables to override config.h
|
||||
|
||||
---
|
||||
Makefile | 1 +
|
||||
config.def.h | 10 +--
|
||||
dwl.c | 5 ++
|
||||
env.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 228 insertions(+), 5 deletions(-)
|
||||
create mode 100644 env.c
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 0822ddc..fbdfdca 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -17,6 +17,7 @@ all: dwl
|
||||
dwl: dwl.o util.o
|
||||
$(CC) dwl.o util.o $(LDLIBS) $(LDFLAGS) $(DWLCFLAGS) -o $@
|
||||
dwl.o: dwl.c config.mk config.h client.h cursor-shape-v1-protocol.h xdg-shell-protocol.h wlr-layer-shell-unstable-v1-protocol.h
|
||||
+dwl.o: env.c
|
||||
util.o: util.c util.h
|
||||
|
||||
# wayland-scanner is a tool which generates C headers and rigging for Wayland
|
||||
diff --git a/config.def.h b/config.def.h
|
||||
index 9009517..c6b9ae0 100644
|
||||
--- a/config.def.h
|
||||
+++ b/config.def.h
|
||||
@@ -6,11 +6,11 @@
|
||||
/* appearance */
|
||||
static const int sloppyfocus = 1; /* focus follows mouse */
|
||||
static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
|
||||
-static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||
-static const float rootcolor[] = COLOR(0x222222ff);
|
||||
-static const float bordercolor[] = COLOR(0x444444ff);
|
||||
-static const float focuscolor[] = COLOR(0x005577ff);
|
||||
-static const float urgentcolor[] = COLOR(0xff0000ff);
|
||||
+static unsigned int borderpx = 1; /* border pixel of windows */
|
||||
+static float rootcolor[] = COLOR(0x222222ff);
|
||||
+static float bordercolor[] = COLOR(0x444444ff);
|
||||
+static float focuscolor[] = COLOR(0x005577ff);
|
||||
+static float urgentcolor[] = COLOR(0xff0000ff);
|
||||
/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */
|
||||
static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You can also use glsl colors */
|
||||
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index fa76db2..6dd4524 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -407,6 +407,8 @@ static xcb_atom_t netatom[NetLast];
|
||||
/* attempt to encapsulate suck into one file */
|
||||
#include "client.h"
|
||||
|
||||
+#include "env.c"
|
||||
+
|
||||
/* function implementations */
|
||||
void
|
||||
applybounds(Client *c, struct wlr_box *bbox)
|
||||
@@ -1010,6 +1012,8 @@ createpointer(struct wlr_pointer *pointer)
|
||||
libinput_device_config_accel_set_profile(device, accel_profile);
|
||||
libinput_device_config_accel_set_speed(device, accel_speed);
|
||||
}
|
||||
+
|
||||
+ inputconfig(device);
|
||||
}
|
||||
|
||||
wlr_cursor_attach_input_device(cursor, &pointer->base);
|
||||
@@ -2974,6 +2978,7 @@ main(int argc, char *argv[])
|
||||
/* Wayland requires XDG_RUNTIME_DIR for creating its communications socket */
|
||||
if (!getenv("XDG_RUNTIME_DIR"))
|
||||
die("XDG_RUNTIME_DIR must be set");
|
||||
+ loadtheme();
|
||||
setup();
|
||||
run(startup_cmd);
|
||||
cleanup();
|
||||
diff --git a/env.c b/env.c
|
||||
new file mode 100644
|
||||
index 0000000..618f81e
|
||||
--- /dev/null
|
||||
+++ b/env.c
|
||||
@@ -0,0 +1,217 @@
|
||||
+static int
|
||||
+isenabled(const char *val, int def)
|
||||
+{
|
||||
+ return ((def && (!val || !val[0] || (val[0] != '0'))) || (!def && (val && val[0] && (val[0] != '0'))));
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setclickmethod(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ long l;
|
||||
+ char *end = NULL;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_CLICK_METHOD");
|
||||
+ if (!val || !val[0])
|
||||
+ return;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ l = strtol(val, &end, 10);
|
||||
+ if (errno || (end && *end))
|
||||
+ return;
|
||||
+
|
||||
+ libinput_device_config_click_set_method(libinput_device,
|
||||
+ (enum libinput_config_click_method)l);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+settap(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_TAP");
|
||||
+ if (val) {
|
||||
+ if (!val[0])
|
||||
+ return;
|
||||
+
|
||||
+ libinput_device_config_tap_set_enabled(libinput_device,
|
||||
+ isenabled(val, 1) ? LIBINPUT_CONFIG_TAP_ENABLED :
|
||||
+ LIBINPUT_CONFIG_TAP_DISABLED);
|
||||
+ } else if (tap_to_click && libinput_device_config_tap_get_finger_count(libinput_device))
|
||||
+ libinput_device_config_tap_set_enabled(libinput_device,
|
||||
+ LIBINPUT_CONFIG_TAP_ENABLED);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+settapanddrag(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_DRAG");
|
||||
+ if (val && val[0])
|
||||
+ libinput_device_config_tap_set_drag_enabled(libinput_device,
|
||||
+ isenabled(val, 1) ? LIBINPUT_CONFIG_DRAG_ENABLED :
|
||||
+ LIBINPUT_CONFIG_DRAG_DISABLED);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setnaturalscroll(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_NATURAL_SCROLL");
|
||||
+ if (val && val[0])
|
||||
+ libinput_device_config_scroll_set_natural_scroll_enabled(
|
||||
+ libinput_device, isenabled(val, 0));
|
||||
+ else if (!val && libinput_device_config_scroll_has_natural_scroll(libinput_device))
|
||||
+ libinput_device_config_scroll_set_natural_scroll_enabled(
|
||||
+ libinput_device, natural_scrolling);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setaccelprofile(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ double profile;
|
||||
+ char *end = NULL;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_ACCELERATION_PROFILE");
|
||||
+ if (!val || !val[0])
|
||||
+ return;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ profile = strtod(val, &end);
|
||||
+ if (errno || (end && *end))
|
||||
+ return;
|
||||
+
|
||||
+ libinput_device_config_accel_set_profile(libinput_device,
|
||||
+ (enum libinput_config_accel_profile)profile);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setaccelspeed(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ double accel = 0;
|
||||
+ char *end = NULL;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_ACCELERATION");
|
||||
+ if (!val || !val[0])
|
||||
+ return;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ accel = strtod(val, &end);
|
||||
+ if (errno || (end && *end) || (accel < -1) || (accel > 1))
|
||||
+ return;
|
||||
+
|
||||
+ libinput_device_config_accel_set_speed(libinput_device, accel);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setscrollmethod(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ long l;
|
||||
+ char *end = NULL;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_SCROLL_METHOD");
|
||||
+ if (!val || !val[0])
|
||||
+ return;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ l = strtol(val, &end, 10);
|
||||
+ if (errno || (end && *end))
|
||||
+ return;
|
||||
+
|
||||
+ libinput_device_config_scroll_set_method(libinput_device,
|
||||
+ (enum libinput_config_scroll_method)l);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setdwt(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_DISABLE_WHILE_TYPING");
|
||||
+ if (val && val[0])
|
||||
+ libinput_device_config_dwt_set_enabled(libinput_device,
|
||||
+ isenabled(val, false) ? LIBINPUT_CONFIG_DWT_ENABLED :
|
||||
+ LIBINPUT_CONFIG_DWT_DISABLED);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setmiddleemul(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_MIDDLE_EMULATION");
|
||||
+ if (val && val[0])
|
||||
+ libinput_device_config_middle_emulation_set_enabled(libinput_device,
|
||||
+ isenabled(val, false) ? LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED :
|
||||
+ LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+setlefthanded(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ val = getenv("LIBINPUT_DEFAULT_LEFT_HANDED");
|
||||
+ if (val && val[0])
|
||||
+ libinput_device_config_left_handed_set(libinput_device,
|
||||
+ isenabled(val, 0));
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+inputconfig(struct libinput_device *libinput_device)
|
||||
+{
|
||||
+ setclickmethod(libinput_device);
|
||||
+ settap(libinput_device);
|
||||
+ settapanddrag(libinput_device);
|
||||
+ setnaturalscroll(libinput_device);
|
||||
+ setaccelprofile(libinput_device);
|
||||
+ setaccelspeed(libinput_device);
|
||||
+ setscrollmethod(libinput_device);
|
||||
+ setdwt(libinput_device);
|
||||
+ setmiddleemul(libinput_device);
|
||||
+ setlefthanded(libinput_device);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+parsecolor(const char *val, float color[4])
|
||||
+{
|
||||
+ uint8_t r, g, b;
|
||||
+ if (sscanf(val, "#%02hhx%02hhx%02hhx", &r, &g, &b) == 3) {
|
||||
+ color[0] = (float)r / 0xFF;
|
||||
+ color[1] = (float)g / 0xFF;
|
||||
+ color[2] = (float)b / 0xFF;
|
||||
+ color[3] = 1.0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+loadtheme(void)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ unsigned int tmp;
|
||||
+
|
||||
+ val = getenv("DWL_ROOT_COLOR");
|
||||
+ if (val)
|
||||
+ parsecolor(val, rootcolor);
|
||||
+
|
||||
+ val = getenv("DWL_BORDER_COLOR");
|
||||
+ if (val)
|
||||
+ parsecolor(val, bordercolor);
|
||||
+
|
||||
+ val = getenv("DWL_FOCUS_COLOR");
|
||||
+ if (val)
|
||||
+ parsecolor(val, focuscolor);
|
||||
+
|
||||
+ val = getenv("DWL_URGENT_COLOR");
|
||||
+ if (val)
|
||||
+ parsecolor(val, urgentcolor);
|
||||
+
|
||||
+ val = getenv("DWL_BORDER");
|
||||
+ if (val && sscanf(val, "%u", &tmp) == 1)
|
||||
+ borderpx = tmp;
|
||||
+}
|
||||
--
|
||||
2.43.0
|
||||
|
||||
Reference in New Issue
Block a user