summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe <rbo@gmx.us>2025-03-02 05:36:53 +0100
committerJoe <rbo@gmx.us>2025-03-02 05:36:53 +0100
commit35c41dc12d77461d0649daf9fb22132ff4aa1991 (patch)
tree0f0b10b329863aa3f4ea6a2fb387431321f657ec
parentactually usable (diff)
downloaddwl-35c41dc12d77461d0649daf9fb22132ff4aa1991.tar.gz
dwl-35c41dc12d77461d0649daf9fb22132ff4aa1991.tar.bz2
dwl-35c41dc12d77461d0649daf9fb22132ff4aa1991.tar.xz
dwl-35c41dc12d77461d0649daf9fb22132ff4aa1991.tar.zst
dwl-35c41dc12d77461d0649daf9fb22132ff4aa1991.zip
nice nice
-rw-r--r--config.def.h32
-rw-r--r--config.mk4
-rw-r--r--dwl.c50
3 files changed, 76 insertions, 10 deletions
diff --git a/config.def.h b/config.def.h
index d69d0ff..7593441 100644
--- a/config.def.h
+++ b/config.def.h
@@ -72,6 +72,21 @@ static uint32_t tagsel[][3] = {
{ 0x7c6f64ff, 0x1d2021ff }, // empty
};
+static const char *tagselstr[][3] = {
+ /* fg bg */
+ // gruvbox dark
+ { "#cc241d", "#1d2021" }, // red
+ { "#d65d0e", "#1d2021" }, // orange
+ { "#d79921", "#1d2021" }, // yellow
+ { "#458588", "#1d2021" }, // blue
+ { "#8ec07c", "#1d2021" }, // cyan
+ { "#98971a", "#1d2021" }, // green
+ { "#b16286", "#1d2021" }, // magenta
+ { "#fe8019", "#1d2021" }, // re orange
+ { "#ebdbb2", "#1d2021" }, // white
+ { "#7c6f64", "#1d2021" }, // empty
+};
+
/* logging */
static int log_level = WLR_ERROR;
@@ -84,6 +99,7 @@ static const Rule rules[] = {
{ "Alacritty", NULL, 0, 0, 1, 1, -1, 0 },
{ "st", NULL, 0, 0, 1, 1, -1, 0 },
{ "mpv", NULL, 0, 0, 0, 0, -1, 0 },
+ { "stalonetray", NULL, 1 << 8, 1, 0, 0, -1, 0 },
{ NULL, "spterm", 0, 1, 1, 0, -1, 's' },
{ NULL, "spfm", 0, 1, 1, 0, -1, 'f' },
{ NULL, "pcmanfm", 0, 1, 0, 0, -1, 'p' },
@@ -199,7 +215,7 @@ static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TA
/* commands */
static const char *termcmd[] = { "alacritty", NULL };
-static const char *menucmd[] = { "wmenu-run", NULL };
+static const char *menucmd[] = { "dmrun", NULL };
static const char *dmlog_cmd[] = { "dmlog", NULL };
static const char *dmpass_full_cmd[] = { "dmpass", "--full", NULL };
static const char *dmpass_cmd[] = { "dmpass", NULL };
@@ -209,8 +225,8 @@ static const char *browser_cmd[] = { "firefox", NULL };
static const Key keys[] = {
/* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */
/* modifier key function argument */
- { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} },
- { MODKEY, XKB_KEY_Return, spawn, {.v = termcmd} },
+ { MODKEY, XKB_KEY_p, wmenuspawn, {.v = menucmd } },
+ { MODKEY, XKB_KEY_Return, spawn, {.v = termcmd } },
{ MODKEY, XKB_KEY_F1, togglescratch, {.v = spterm } },
{ MODKEY, XKB_KEY_F2, togglescratch, {.v = spfm } },
{ MODKEY|SHIFT, XKB_KEY_F2, togglescratch, {.v = sppcman } },
@@ -218,11 +234,11 @@ static const Key keys[] = {
{ MODKEY, XKB_KEY_F4, togglescratch, {.v = spflip } },
{ MODKEY, XKB_KEY_F5, togglescratch, {.v = spmpd } },
{ MODKEY, XKB_KEY_F6, togglescratch, {.v = spnews } },
- { MODKEY|CTRL, XKB_KEY_F12, spawn, {.v = dmlog_cmd } },
- { MODKEY|CTRL, XKB_KEY_BackSpace, spawn, {.v = dmlog_cmd } },
- { MODKEY|CTRL, XKB_KEY_p, spawn, {.v = dmpass_cmd } },
- { MODKEY|CTRL|SHIFT, XKB_KEY_p, spawn, {.v = dmpass_full_cmd } },
- { MODKEY|CTRL, XKB_KEY_o, spawn, {.v = dmotp_cmd } },
+ { MODKEY|CTRL, XKB_KEY_F12, wmenuspawn, {.v = dmlog_cmd } },
+ { MODKEY|CTRL, XKB_KEY_BackSpace, wmenuspawn, {.v = dmlog_cmd } },
+ { MODKEY|CTRL, XKB_KEY_p, wmenuspawn, {.v = dmpass_cmd } },
+ { MODKEY|CTRL|SHIFT, XKB_KEY_P, wmenuspawn, {.v = dmpass_full_cmd } },
+ { MODKEY|CTRL, XKB_KEY_o, wmenuspawn, {.v = dmotp_cmd } },
{ MODKEY, XKB_KEY_b, togglebar, {0} },
{ MODKEY, XKB_KEY_j, focusstack, {.i = +1} },
{ MODKEY, XKB_KEY_k, focusstack, {.i = -1} },
diff --git a/config.mk b/config.mk
index 1e0b810..fb99950 100644
--- a/config.mk
+++ b/config.mk
@@ -11,7 +11,7 @@ DATADIR = $(PREFIX)/share
XWAYLAND =
XLIBS =
# Uncomment to build XWayland support
-#XWAYLAND = -DXWAYLAND
-#XLIBS = xcb xcb-icccm
+XWAYLAND = -DXWAYLAND
+XLIBS = xcb xcb-icccm
CC = gcc
diff --git a/dwl.c b/dwl.c
index d284fe0..d7da6e9 100644
--- a/dwl.c
+++ b/dwl.c
@@ -414,6 +414,7 @@ static void urgent(struct wl_listener *listener, void *data);
static void view(const Arg *arg);
static void virtualkeyboard(struct wl_listener *listener, void *data);
static void virtualpointer(struct wl_listener *listener, void *data);
+static void wmenuspawn(const Arg *arg);
static Monitor *xytomon(double x, double y);
static void xytonode(double x, double y, struct wlr_surface **psurface,
Client **pc, LayerSurface **pl, double *nx, double *ny);
@@ -3707,6 +3708,55 @@ virtualpointer(struct wl_listener *listener, void *data)
wlr_cursor_map_input_to_output(cursor, device, event->suggested_output);
}
+void
+wmenuspawn(const Arg *arg)
+{
+ unsigned int focused_tag;
+ unsigned long int i, j;
+ char **cmd;
+
+ cmd = malloc(8 * sizeof(char*));
+ if (!cmd)
+ return;
+
+ for (i = 0; i < 8 && ((char**)arg->v)[i] != NULL; i++) {
+ cmd[i] = strdup(((char**)arg->v)[i]);
+ if (!cmd[i]) {
+ for (j = 0; j < i; j++) {
+ free(cmd[j]);
+ }
+ free(cmd);
+ return;
+ }
+ }
+ focused_tag = selmon->tagset[selmon->seltags];
+ for (j = 0; j < LENGTH(tags); j++) {
+ if (focused_tag & (1 << (j - 1))) {
+ break;
+ }
+ }
+ cmd[i] = strdup(tagselstr[j - 1][0]);
+ if (!cmd[i]) {
+ for (j = 0; j < i; j++) {
+ free(cmd[j]);
+ }
+ free(cmd);
+ return;
+ }
+ cmd[i + 1] = NULL;
+ if (fork() == 0) {
+ close(STDIN_FILENO);
+ dup2(STDERR_FILENO, STDOUT_FILENO);
+ setsid();
+ execvp(((char **)cmd)[0], (char **)cmd);
+ die("dwl: execvp %s failed:", ((char **)cmd)[0]);
+ }
+ for (i = 0; cmd[i] != NULL; i++) {
+ free(cmd[i]);
+ }
+ free(cmd);
+}
+
Monitor *
xytomon(double x, double y)
{