From 3c2538f72b045eb7bd124eb3386d288d0c02dedb Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Mon, 15 Nov 2021 10:50:02 +0500 Subject: [PATCH] Allow to change border width and gap size on fly --- config.def.h | 4 ++++ dwm.c | 20 ++++++++++++++++++++ settings.c | 39 ++++++++++++++++++++++++++++++--------- 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/config.def.h b/config.def.h index 8bb18a3..e623910 100644 --- a/config.def.h +++ b/config.def.h @@ -94,6 +94,10 @@ static Key keys[] = { TAGKEYS( XK_7, 6) TAGKEYS( XK_8, 7) TAGKEYS( XK_9, 8) + { MODKEY|Mod1Mask, XK_b, configborder, {.i = -1 } }, + { MODKEY|Mod1Mask|ShiftMask, XK_b, configborder, {.i = +1 } }, + { MODKEY|Mod1Mask, XK_g, configgap, {.i = -1 } }, + { MODKEY|Mod1Mask|ShiftMask, XK_g, configgap, {.i = +1 } }, }; /* button definitions */ diff --git a/dwm.c b/dwm.c index 4e919ea..2cea438 100644 --- a/dwm.c +++ b/dwm.c @@ -172,6 +172,8 @@ static void arrangemon(Monitor *m); static void attach(Client *c); static void attachstack(Client *c); static void buttonpress(XEvent *e); +static void configborder(const Arg *arg); +static void configgap(const Arg *arg); static void centeredmaster(Monitor *m); static void checkotherwm(void); static void cleanup(void); @@ -540,6 +542,24 @@ buttonpress(XEvent *e) buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); } +void configborder(const Arg *const arg) +{ + if (arg == NULL) return; + const int old_border_width = settings_get_border_width(); + const int new_border_width = old_border_width + (arg->i >= 0 ? +1 : -1); + settings_set_border_width(new_border_width); + arrange(selmon); +} + +void configgap(const Arg *const arg) +{ + if (arg == NULL) return; + const int old_gap_size = settings_get_gap_size(); + const int new_gap_size = old_gap_size + (arg->i >= 0 ? +2 : -2); + settings_set_gap_size(new_gap_size); + arrange(selmon); +} + void centeredmaster(Monitor *m) { diff --git a/settings.c b/settings.c index 1d42145..b6b7635 100644 --- a/settings.c +++ b/settings.c @@ -1,5 +1,16 @@ #include "settings.h" +#define MIN_BORDER_WIDTH 0 +#define MAX_BORDER_WIDTH 10000 +#define MIN_DEFAULT_CLIENTS_IN_MASTER 1 +#define MAX_DEFAULT_CLIENTS_IN_MASTER 10000 +#define MIN_GAP_SIZE 0 +#define MAX_GAP_SIZE 10000 +#define MIN_MAX_CLIENTS_IN_MASTER 1 +#define MAX_MAX_CLIENTS_IN_MASTER 10000 +#define MIN_SNAP_DISTANCE 1 +#define MAX_SNAP_DISTANCE 10000 + static int border_width = 2; static int default_clients_in_master = 1; static bool enable_border_for_single_window = true; @@ -10,24 +21,28 @@ static int max_clients_in_master = 0; // 0 for no maximum static bool respect_resize_hints_in_floating_layout = false; static unsigned int snap_distance = 32; -int settings_get_border_width() +int settings_get_border_width() { return border_width; } -void settings_set_border_width(const int new_border_width) +void settings_set_border_width(int new_border_width) { + if (new_border_width < MIN_BORDER_WIDTH) new_border_width = MIN_BORDER_WIDTH; + if (new_border_width > MAX_BORDER_WIDTH) new_border_width = MAX_BORDER_WIDTH; border_width = new_border_width; // TODO: notify WM to rearrange clients } int settings_get_default_clients_in_master() { - return default_clients_in_master >= 1 ? default_clients_in_master : 1; + return default_clients_in_master; } -void settings_set_default_clients_in_master(const int new_default_clients_in_master) +void settings_set_default_clients_in_master(int new_default_clients_in_master) { + if (new_default_clients_in_master < MIN_DEFAULT_CLIENTS_IN_MASTER) new_default_clients_in_master = MIN_DEFAULT_CLIENTS_IN_MASTER; + if (new_default_clients_in_master < MAX_DEFAULT_CLIENTS_IN_MASTER) new_default_clients_in_master = MAX_DEFAULT_CLIENTS_IN_MASTER; default_clients_in_master = new_default_clients_in_master; } @@ -68,19 +83,23 @@ int settings_get_gap_size() return gap_size; } -void settings_set_gap_size(const int new_gap_size) +void settings_set_gap_size(int new_gap_size) { - gap_size = new_gap_size >= 0 ? new_gap_size : 0; + if (new_gap_size < MIN_GAP_SIZE) new_gap_size = MIN_GAP_SIZE; + if (new_gap_size > MAX_GAP_SIZE) new_gap_size = MAX_GAP_SIZE; + gap_size = new_gap_size; // TODO: notify WM to rearrange clients } int settings_get_max_clients_in_master() { - return max_clients_in_master > 0 ? max_clients_in_master : 0; + return max_clients_in_master; } -void settings_set_max_clients_in_master(const int new_max_clients_in_master) +void settings_set_max_clients_in_master(int new_max_clients_in_master) { + if (new_max_clients_in_master < MIN_MAX_CLIENTS_IN_MASTER) new_max_clients_in_master = MIN_MAX_CLIENTS_IN_MASTER; + if (new_max_clients_in_master < MAX_MAX_CLIENTS_IN_MASTER) new_max_clients_in_master = MAX_MAX_CLIENTS_IN_MASTER; max_clients_in_master = new_max_clients_in_master; // TODO: notify WM to rearrange clients } @@ -101,7 +120,9 @@ unsigned int settings_get_snap_distance() return snap_distance; } -void settings_set_snap_distance(const unsigned int new_snap_distance) +void settings_set_snap_distance(unsigned int new_snap_distance) { + if (new_snap_distance < MIN_SNAP_DISTANCE) new_snap_distance = MIN_SNAP_DISTANCE; + if (new_snap_distance < MAX_SNAP_DISTANCE) new_snap_distance = MAX_SNAP_DISTANCE; snap_distance = new_snap_distance; }