mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-09-06 19:24:51 +00:00
104 lines
3.3 KiB
Diff
104 lines
3.3 KiB
Diff
From 340cc5ef90dfcc495bdad045f3f76ae07405cffd Mon Sep 17 00:00:00 2001
|
|
From: Guido Cella <guido@guidocella.xyz>
|
|
Date: Tue, 6 Feb 2024 09:20:48 +0100
|
|
Subject: [PATCH] add a keybinding to center the terminal
|
|
|
|
Add a keybinding that toggles centering the terminally horizontally when
|
|
it's the only window, while still tiling multiple windows.
|
|
|
|
This limits the width of long text making it easier to read, and avoids
|
|
covering the wallpaper more than necessary.
|
|
---
|
|
config.def.h | 1 +
|
|
dwl.c | 20 ++++++++++++++++++++
|
|
2 files changed, 21 insertions(+)
|
|
|
|
diff --git a/config.def.h b/config.def.h
|
|
index 22d2171..8229fcc 100644
|
|
--- a/config.def.h
|
|
+++ b/config.def.h
|
|
@@ -142,6 +142,7 @@ static const Key keys[] = {
|
|
{ MODKEY, XKB_KEY_space, setlayout, {0} },
|
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} },
|
|
{ MODKEY, XKB_KEY_e, togglefullscreen, {0} },
|
|
+ { MODKEY, XKB_KEY_v, togglecenter, {0} },
|
|
{ MODKEY, XKB_KEY_0, view, {.ui = ~0} },
|
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} },
|
|
{ MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} },
|
|
diff --git a/dwl.c b/dwl.c
|
|
index 12f441e..3b15748 100644
|
|
--- a/dwl.c
|
|
+++ b/dwl.c
|
|
@@ -8,6 +8,7 @@
|
|
#include <signal.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
+#include <strings.h>
|
|
#include <sys/wait.h>
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
@@ -138,6 +139,7 @@ typedef struct {
|
|
unsigned int bw;
|
|
uint32_t tags;
|
|
int isfloating, isurgent, isfullscreen;
|
|
+ bool centered;
|
|
uint32_t resize; /* configure serial of a pending resize */
|
|
} Client;
|
|
|
|
@@ -334,6 +336,7 @@ static void startdrag(struct wl_listener *listener, void *data);
|
|
static void tag(const Arg *arg);
|
|
static void tagmon(const Arg *arg);
|
|
static void tile(Monitor *m);
|
|
+static void togglecenter(const Arg *arg);
|
|
static void togglefloating(const Arg *arg);
|
|
static void togglefullscreen(const Arg *arg);
|
|
static void toggletag(const Arg *arg);
|
|
@@ -436,6 +439,8 @@ static struct wl_listener request_start_drag = {.notify = requeststartdrag};
|
|
static struct wl_listener start_drag = {.notify = startdrag};
|
|
static struct wl_listener new_session_lock = {.notify = locksession};
|
|
|
|
+static bool center;
|
|
+
|
|
#ifdef XWAYLAND
|
|
static void activatex11(struct wl_listener *listener, void *data);
|
|
static void associatex11(struct wl_listener *listener, void *data);
|
|
@@ -499,6 +504,9 @@ applyrules(Client *c)
|
|
}
|
|
}
|
|
|
|
+ if (!strcasecmp(appid, termcmd[0]))
|
|
+ c->centered = true;
|
|
+
|
|
c->isfloating |= client_is_float_type(c);
|
|
setmon(c, mon, newtags);
|
|
}
|
|
@@ -2730,6 +2738,11 @@ tile(Monitor *m)
|
|
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen)
|
|
continue;
|
|
if (i < m->nmaster) {
|
|
+ if (n == 1 && center && c->centered) {
|
|
+ resize(c, (struct wlr_box){.x = m->w.width / 4, .y = m->w.y,
|
|
+ .width = m->w.width / 2, .height = m->w.height - 2 * c->bw}, 0);
|
|
+ return;
|
|
+ }
|
|
resize(c, (struct wlr_box){.x = m->w.x, .y = m->w.y + my, .width = mw,
|
|
.height = (m->w.height - my) / (MIN(n, m->nmaster) - i)}, 0);
|
|
my += c->geom.height;
|
|
@@ -2742,6 +2755,13 @@ tile(Monitor *m)
|
|
}
|
|
}
|
|
|
|
+void
|
|
+togglecenter(const Arg *arg)
|
|
+{
|
|
+ center = !center;
|
|
+ tile(selmon);
|
|
+}
|
|
+
|
|
void
|
|
togglefloating(const Arg *arg)
|
|
{
|
|
--
|
|
2.49.0
|
|
|