Compare commits

...

5 Commits

Author SHA1 Message Date
mintycube
64162db4b9 synced repo and resolved readme merge conflicts 2024-07-13 12:33:47 +05:00
mintycube
1b6b81781f fixes 2024-07-13 11:53:58 +05:00
bakkeby
f67b8be209 status2d: make sure to terminate the copied text with a NULL character 2024-07-12 19:22:24 +02:00
bakkeby
df75e113a9 launcher + status2d: correct spacing to be the same as when not using status2d 2024-07-12 16:28:46 +02:00
bakkeby
b4b19e3a4c Adding launcher patch 2024-07-11 22:38:58 +02:00
12 changed files with 137 additions and 11 deletions

View File

@ -1,5 +1,9 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
/* Helper macros for spawning commands */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
#define CMD(...) { .v = (const char*[]){ __VA_ARGS__, NULL } }
/* appearance */ /* appearance */
#if ROUNDED_CORNERS_PATCH #if ROUNDED_CORNERS_PATCH
static const unsigned int borderpx = 0; /* border pixel of windows */ static const unsigned int borderpx = 0; /* border pixel of windows */
@ -399,6 +403,13 @@ static char *statuscolors[][ColCount] = {
static const char *layoutmenu_cmd = "layoutmenu.sh"; static const char *layoutmenu_cmd = "layoutmenu.sh";
#endif #endif
#if BAR_LAUNCHER_PATCH
static const Launcher launchers[] = {
/* icon to display command */
{ "surf", CMD("surf", "duckduckgo.com") },
};
#endif // BAR_LAUNCHER_PATCH
#if COOL_AUTOSTART_PATCH #if COOL_AUTOSTART_PATCH
static const char *const autostart[] = { static const char *const autostart[] = {
"st", NULL, "st", NULL,
@ -548,6 +559,9 @@ static const BarRule barrules[] = {
#if BAR_STATUSBUTTON_PATCH #if BAR_STATUSBUTTON_PATCH
{ -1, 0, BAR_ALIGN_LEFT, width_stbutton, draw_stbutton, click_stbutton, NULL, "statusbutton" }, { -1, 0, BAR_ALIGN_LEFT, width_stbutton, draw_stbutton, click_stbutton, NULL, "statusbutton" },
#endif // BAR_STATUSBUTTON_PATCH #endif // BAR_STATUSBUTTON_PATCH
#if BAR_LAUNCHER_PATCH
{ -1, 0, BAR_ALIGN_LEFT, width_launcher, draw_launcher, click_launcher, NULL, "launcher" },
#endif // BAR_LAUNCHER_PATCH
#if BAR_POWERLINE_TAGS_PATCH #if BAR_POWERLINE_TAGS_PATCH
{ 0, 0, BAR_ALIGN_LEFT, width_pwrl_tags, draw_pwrl_tags, click_pwrl_tags, hover_pwrl_tags, "powerline_tags" }, { 0, 0, BAR_ALIGN_LEFT, width_pwrl_tags, draw_pwrl_tags, click_pwrl_tags, hover_pwrl_tags, "powerline_tags" },
#endif // BAR_POWERLINE_TAGS_PATCH #endif // BAR_POWERLINE_TAGS_PATCH
@ -847,9 +861,6 @@ static const char *xkb_layouts[] = {
#define HOLDKEY 0 // replace 0 with the keysym to activate holdbar #define HOLDKEY 0 // replace 0 with the keysym to activate holdbar
#endif // BAR_HOLDBAR_PATCH #endif // BAR_HOLDBAR_PATCH
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */ /* commands */
#if !NODMENU_PATCH #if !NODMENU_PATCH
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */

View File

@ -1,6 +1,10 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
#include <X11/XF86keysym.h> #include <X11/XF86keysym.h>
/* Helper macros for spawning commands */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
#define CMD(...) { .v = (const char*[]){ __VA_ARGS__, NULL } }
/* appearance */ /* appearance */
#if ROUNDED_CORNERS_PATCH #if ROUNDED_CORNERS_PATCH
static const unsigned int borderpx = 0; /* border pixel of windows */ static const unsigned int borderpx = 0; /* border pixel of windows */
@ -400,6 +404,13 @@ static char *statuscolors[][ColCount] = {
static const char *layoutmenu_cmd = "layoutmenu.sh"; static const char *layoutmenu_cmd = "layoutmenu.sh";
#endif #endif
#if BAR_LAUNCHER_PATCH
static const Launcher launchers[] = {
/* icon to display command */
{ "firefox", CMD("firefox", "duckduckgo.com") },
};
#endif // BAR_LAUNCHER_PATCH
#if COOL_AUTOSTART_PATCH #if COOL_AUTOSTART_PATCH
static const char *const autostart[] = { static const char *const autostart[] = {
"dwmblocks", NULL, "dwmblocks", NULL,
@ -522,7 +533,6 @@ static const Rule rules[] = {
RULE(.class = "Qalculate-gtk", .tags = SPTAG(2), .isfloating = 1) RULE(.class = "Qalculate-gtk", .tags = SPTAG(2), .isfloating = 1)
RULE(.instance = "spmusic", .tags = SPTAG(3), .isfloating = 1) RULE(.instance = "spmusic", .tags = SPTAG(3), .isfloating = 1)
RULE(.instance = "spnotes", .tags = SPTAG(4), .isfloating = 1) RULE(.instance = "spnotes", .tags = SPTAG(4), .isfloating = 1)
RULE(.instance = "spterm", .tags = SPTAG(0), .isfloating = 1)
RULE(.instance = "dictionary", .isfloating = 1) RULE(.instance = "dictionary", .isfloating = 1)
RULE(.class = "volume-ui", .isfloating = 1) RULE(.class = "volume-ui", .isfloating = 1)
@ -578,6 +588,9 @@ static const BarRule barrules[] = {
#if BAR_STATUSBUTTON_PATCH #if BAR_STATUSBUTTON_PATCH
{ -1, 0, BAR_ALIGN_LEFT, width_stbutton, draw_stbutton, click_stbutton, NULL, "statusbutton" }, { -1, 0, BAR_ALIGN_LEFT, width_stbutton, draw_stbutton, click_stbutton, NULL, "statusbutton" },
#endif // BAR_STATUSBUTTON_PATCH #endif // BAR_STATUSBUTTON_PATCH
#if BAR_LAUNCHER_PATCH
{ -1, 0, BAR_ALIGN_LEFT, width_launcher, draw_launcher, click_launcher, NULL, "launcher" },
#endif // BAR_LAUNCHER_PATCH
#if BAR_POWERLINE_TAGS_PATCH #if BAR_POWERLINE_TAGS_PATCH
{ 0, 0, BAR_ALIGN_LEFT, width_pwrl_tags, draw_pwrl_tags, click_pwrl_tags, hover_pwrl_tags, "powerline_tags" }, { 0, 0, BAR_ALIGN_LEFT, width_pwrl_tags, draw_pwrl_tags, click_pwrl_tags, hover_pwrl_tags, "powerline_tags" },
#endif // BAR_POWERLINE_TAGS_PATCH #endif // BAR_POWERLINE_TAGS_PATCH
@ -878,9 +891,6 @@ static const char *xkb_layouts[] = {
#define HOLDKEY 0 // replace 0 with the keysym to activate holdbar #define HOLDKEY 0 // replace 0 with the keysym to activate holdbar
#endif // BAR_HOLDBAR_PATCH #endif // BAR_HOLDBAR_PATCH
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */ /* commands */
#if !NODMENU_PATCH #if !NODMENU_PATCH
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
@ -975,7 +985,8 @@ static const Key keys[] = {
{ ALTKEY, XK_h, spawn, {.v = (const char*[]){ "dmenuhandler" , NULL} } }, { ALTKEY, XK_h, spawn, {.v = (const char*[]){ "dmenuhandler" , NULL} } },
{ ALTKEY, XK_l, spawn, {.v = (const char*[]){"dictionary", NULL } } }, { ALTKEY, XK_l, spawn, {.v = (const char*[]){"dictionary", NULL } } },
{ MODKEY, XK_Return, spawn, {.v = (const char *[]){"st", NULL}}}, { MODKEY, XK_Return, spawn, {.v = (const char *[]){"st", NULL}}},
{ ALTKEY, XK_Return, spawn, {.v = (const char *[]){"kitty", "-d", "~/projects/videos/fzf", NULL}}}, // { ALTKEY, XK_Return, spawn, {.v = (const char *[]){"kitty", "-d", "~/projects/videos/fzf", NULL}}},
{ ALTKEY, XK_Return, spawn, {.v = (const char*[]){"kitty", NULL}}},
{ MODKEY, XK_v, spawn, {.v = (const char*[]){"st", "men", NULL } } }, { MODKEY, XK_v, spawn, {.v = (const char*[]){"st", "men", NULL } } },
{ MODKEY|ShiftMask, XK_b, spawn, {.v = (const char*[]){ "dmenu_web", "--add" , NULL } } }, { MODKEY|ShiftMask, XK_b, spawn, {.v = (const char*[]){ "dmenu_web", "--add" , NULL } } },
{ MODKEY, XK_n, spawn, {.v = (const char*[]){ "st", "-e", "nvim", NULL } } }, { MODKEY, XK_n, spawn, {.v = (const char*[]){ "st", "-e", "nvim", NULL } } },
@ -1418,7 +1429,6 @@ static const Command commands[] = {
#else #else
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
#endif // #endif //
static const Button buttons[] = { static const Button buttons[] = {
/* click event mask button function argument */ /* click event mask button function argument */
{ ClkRootWin, 0, Button1, spawn, SHCMD("dunstctl close-all; killall dmenu") }, { ClkRootWin, 0, Button1, spawn, SHCMD("dunstctl close-all; killall dmenu") },

1
dwm.c
View File

@ -4102,6 +4102,7 @@ spawn(const Arg *arg)
if (arg->v == dmenucmd) if (arg->v == dmenucmd)
dmenumon[0] = '0' + selmon->num; dmenumon[0] = '0' + selmon->num;
#endif // NODMENU_PATCH #endif // NODMENU_PATCH
fprintf(stderr, "spawn running cmd:\n");
#if RIODRAW_PATCH #if RIODRAW_PATCH
if ((pid = fork()) == 0) if ((pid = fork()) == 0)

81
patch/bar_launcher.c Normal file
View File

@ -0,0 +1,81 @@
#if BAR_STATUS2D_PATCH
int
width_launcher(Bar *bar, BarArg *a)
{
int i, x = 0;
for (i = 0; i < LENGTH(launchers); i++) {
x += status2dtextlength(launchers[i].name) + lrpad;
}
return x;
}
int
draw_launcher(Bar *bar, BarArg *a)
{
int i, w = 0;;
for (i = 0; i < LENGTH(launchers); i++) {
w = status2dtextlength(launchers[i].name);
drawstatusbar(a, launchers[i].name);
a->x += w + lrpad;
}
return a->x ;
}
int
click_launcher(Bar *bar, Arg *arg, BarArg *a)
{
int i, x = 0;
for (i = 0; i < LENGTH(launchers); i++) {
x += status2dtextlength(launchers[i].name) + lrpad;
if (a->x < x) {
spawn(&launchers[i].command);
break;
}
}
return -1;
}
#else
int
width_launcher(Bar *bar, BarArg *a)
{
int i, x = 0;
for (i = 0; i < LENGTH(launchers); i++) {
x += TEXTW(launchers[i].name);
}
return x;
}
int
draw_launcher(Bar *bar, BarArg *a)
{
int i, x = 0, w = 0;;
for (i = 0; i < LENGTH(launchers); i++) {
w = TEXTW(launchers[i].name);
drw_text(drw, x, 0, w, bh, lrpad / 2, launchers[i].name, 0, True);
x += w;
}
return x;
}
int
click_launcher(Bar *bar, Arg *arg, BarArg *a)
{
int i, x = 0;
for (i = 0; i < LENGTH(launchers); i++) {
x += TEXTW(launchers[i].name);
if (a->x < x) {
spawn(&launchers[i].command);
break;
}
}
return -1;
}
#endif // BAR_STATUS2D_PATCH

8
patch/bar_launcher.h Normal file
View File

@ -0,0 +1,8 @@
typedef struct {
char* name;
const Arg command;
} Launcher;
static int width_launcher(Bar *bar, BarArg *a);
static int draw_launcher(Bar *bar, BarArg *a);
static int click_launcher(Bar *bar, Arg *arg, BarArg *a);

View File

@ -15,4 +15,3 @@ click_ltsymbol(Bar *bar, Arg *arg, BarArg *a)
{ {
return ClkLtSymbol; return ClkLtSymbol;
} }

View File

@ -1,4 +1,3 @@
static int width_ltsymbol(Bar *bar, BarArg *a); static int width_ltsymbol(Bar *bar, BarArg *a);
static int draw_ltsymbol(Bar *bar, BarArg *a); static int draw_ltsymbol(Bar *bar, BarArg *a);
static int click_ltsymbol(Bar *bar, Arg *arg, BarArg *a); static int click_ltsymbol(Bar *bar, Arg *arg, BarArg *a);

View File

@ -96,6 +96,7 @@ drawstatusbar(BarArg *a, char* stext)
#else #else
memcpy(text, stext, len); memcpy(text, stext, len);
#endif // BAR_STATUSCMD_PATCH #endif // BAR_STATUSCMD_PATCH
text[len] = '\0';
x += lrpad / 2; x += lrpad / 2;
drw_setscheme(drw, scheme[LENGTH(colors)]); drw_setscheme(drw, scheme[LENGTH(colors)]);

View File

@ -21,6 +21,9 @@
#if COMBO_PATCH #if COMBO_PATCH
#include "combo.c" #include "combo.c"
#endif #endif
#if BAR_LAUNCHER_PATCH
#include "bar_launcher.c"
#endif
#if BAR_LTSYMBOL_PATCH #if BAR_LTSYMBOL_PATCH
#include "bar_ltsymbol.c" #include "bar_ltsymbol.c"
#endif #endif

View File

@ -24,6 +24,9 @@
#if BAR_HOLDBAR_PATCH #if BAR_HOLDBAR_PATCH
#include "bar_holdbar.h" #include "bar_holdbar.h"
#endif #endif
#if BAR_LAUNCHER_PATCH
#include "bar_launcher.h"
#endif
#if BAR_LTSYMBOL_PATCH #if BAR_LTSYMBOL_PATCH
#include "bar_ltsymbol.h" #include "bar_ltsymbol.h"
#endif #endif

View File

@ -67,6 +67,11 @@
*/ */
#define BAR_FLEXWINTITLE_PATCH 0 #define BAR_FLEXWINTITLE_PATCH 0
/* Adds buttons to the bar that can be used to launch applications.
* https://dwm.suckless.org/patches/launcher/
*/
#define BAR_LAUNCHER_PATCH 0
/* This patch adds a context menu for layout switching. /* This patch adds a context menu for layout switching.
* - xmenu needs to be installed. * - xmenu needs to be installed.
* - Edit layoutmenu.sh with the installed layouts and with correct indexes. * - Edit layoutmenu.sh with the installed layouts and with correct indexes.

View File

@ -67,6 +67,11 @@
*/ */
#define BAR_FLEXWINTITLE_PATCH 0 #define BAR_FLEXWINTITLE_PATCH 0
/* Adds buttons to the bar that can be used to launch applications.
* https://dwm.suckless.org/patches/launcher/
*/
#define BAR_LAUNCHER_PATCH 0
/* This patch adds a context menu for layout switching. /* This patch adds a context menu for layout switching.
* - xmenu needs to be installed. * - xmenu needs to be installed.
* - Edit layoutmenu.sh with the installed layouts and with correct indexes. * - Edit layoutmenu.sh with the installed layouts and with correct indexes.