mirror of
https://github.com/bakkeby/dwm-flexipatch
synced 2024-11-10 19:10:48 +00:00
Upgraded the dwmblocks patch for statuscmd which changes the signalling
mechanism from SIGUSR1 to SIGRTMIN which is likely to cause issues for those that already have a working setup. A compatibility option has been added which changes this back to SIGUSR1. Note that configuration was also changed. This was ref. reported issue #114.
This commit is contained in:
parent
bd5f5608a3
commit
7efb64d685
@ -15,6 +15,8 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
|||||||
|
|
||||||
### Changelog:
|
### Changelog:
|
||||||
|
|
||||||
|
2021-04-14 - Upgraded the dwmblocks patch for statuscmd which changes the signalling mechanism from SIGUSR1 to SIGRTMIN which is likely to cause issues for those that already have a working setup. A compatibility option has been added which changes this back to SIGUSR1. Note that configuration was also changed.
|
||||||
|
|
||||||
2021-04-07 - Added xkb patch
|
2021-04-07 - Added xkb patch
|
||||||
|
|
||||||
2021-04-06 - Added the distributetags patch
|
2021-04-06 - Added the distributetags patch
|
||||||
|
17
config.def.h
17
config.def.h
@ -774,11 +774,16 @@ static const char *dmenucmd[] = {
|
|||||||
};
|
};
|
||||||
static const char *termcmd[] = { "st", NULL };
|
static const char *termcmd[] = { "st", NULL };
|
||||||
|
|
||||||
#if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH
|
#if BAR_STATUSCMD_PATCH
|
||||||
|
#if BAR_DWMBLOCKS_PATCH
|
||||||
|
/* This defines the name of the executable that handles the bar (used for signalling purposes) */
|
||||||
|
#define STATUSBAR "dwmblocks"
|
||||||
|
#else
|
||||||
/* commands spawned when clicking statusbar, the mouse button pressed is exported as BUTTON */
|
/* commands spawned when clicking statusbar, the mouse button pressed is exported as BUTTON */
|
||||||
static const char *statuscmds[] = { "notify-send Mouse$BUTTON" };
|
static const char *statuscmds[] = { "notify-send Mouse$BUTTON", "notify-send Cat$BUTTON", "notify-send Dog$BUTTON" };
|
||||||
static char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
|
static char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
|
||||||
#endif // BAR_STATUSCMD_PATCH | DWMBLOCKS_PATCH
|
#endif // BAR_DWMBLOCKS_PATCH
|
||||||
|
#endif // BAR_STATUSCMD_PATCH
|
||||||
|
|
||||||
#if ON_EMPTY_KEYS_PATCH
|
#if ON_EMPTY_KEYS_PATCH
|
||||||
static const char* firefoxcmd[] = {"firefox", NULL};
|
static const char* firefoxcmd[] = {"firefox", NULL};
|
||||||
@ -1209,9 +1214,9 @@ static Button buttons[] = {
|
|||||||
#endif // BAR_WINTITLEACTIONS_PATCH
|
#endif // BAR_WINTITLEACTIONS_PATCH
|
||||||
{ ClkWinTitle, 0, Button2, zoom, {0} },
|
{ ClkWinTitle, 0, Button2, zoom, {0} },
|
||||||
#if BAR_STATUSCMD_PATCH && BAR_DWMBLOCKS_PATCH
|
#if BAR_STATUSCMD_PATCH && BAR_DWMBLOCKS_PATCH
|
||||||
{ ClkStatusText, 0, Button1, sigdwmblocks, {.i = 1 } },
|
{ ClkStatusText, 0, Button1, sigstatusbar, {.i = 1 } },
|
||||||
{ ClkStatusText, 0, Button2, sigdwmblocks, {.i = 2 } },
|
{ ClkStatusText, 0, Button2, sigstatusbar, {.i = 2 } },
|
||||||
{ ClkStatusText, 0, Button3, sigdwmblocks, {.i = 3 } },
|
{ ClkStatusText, 0, Button3, sigstatusbar, {.i = 3 } },
|
||||||
#elif BAR_STATUSCMD_PATCH
|
#elif BAR_STATUSCMD_PATCH
|
||||||
{ ClkStatusText, 0, Button1, spawn, {.v = statuscmd } },
|
{ ClkStatusText, 0, Button1, spawn, {.v = statuscmd } },
|
||||||
{ ClkStatusText, 0, Button2, spawn, {.v = statuscmd } },
|
{ ClkStatusText, 0, Button2, spawn, {.v = statuscmd } },
|
||||||
|
@ -1,31 +1,50 @@
|
|||||||
static int dwmblockssig;
|
static int statussig;
|
||||||
pid_t dwmblockspid = 0;
|
pid_t statuspid = -1;
|
||||||
|
|
||||||
int
|
pid_t
|
||||||
getdwmblockspid()
|
getstatusbarpid()
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[32], *str = buf, *c;
|
||||||
FILE *fp = popen("pidof -s dwmblocks", "r");
|
FILE *fp;
|
||||||
if (fgets(buf, sizeof(buf), fp));
|
|
||||||
pid_t pid = strtoul(buf, NULL, 10);
|
if (statuspid > 0) {
|
||||||
|
snprintf(buf, sizeof(buf), "/proc/%u/cmdline", statuspid);
|
||||||
|
if ((fp = fopen(buf, "r"))) {
|
||||||
|
fgets(buf, sizeof(buf), fp);
|
||||||
|
while ((c = strchr(str, '/')))
|
||||||
|
str = c + 1;
|
||||||
|
fclose(fp);
|
||||||
|
if (!strcmp(str, STATUSBAR))
|
||||||
|
return statuspid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(fp = popen("pidof -s "STATUSBAR, "r")))
|
||||||
|
return -1;
|
||||||
|
fgets(buf, sizeof(buf), fp);
|
||||||
pclose(fp);
|
pclose(fp);
|
||||||
dwmblockspid = pid;
|
return strtol(buf, NULL, 10);
|
||||||
return pid != 0 ? 0 : -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sigdwmblocks(const Arg *arg)
|
sigstatusbar(const Arg *arg)
|
||||||
{
|
{
|
||||||
union sigval sv;
|
union sigval sv;
|
||||||
sv.sival_int = (dwmblockssig << 8) | arg->i;
|
|
||||||
if (!dwmblockspid)
|
|
||||||
if (getdwmblockspid() == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (sigqueue(dwmblockspid, SIGUSR1, sv) == -1) {
|
if (!statussig)
|
||||||
|
return;
|
||||||
|
if ((statuspid = getstatusbarpid()) <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#if BAR_DWMBLOCKS_SIGUSR1_PATCH
|
||||||
|
sv.sival_int = (statussig << 8) | arg->i;
|
||||||
|
if (sigqueue(statuspid, SIGUSR1, sv) == -1) {
|
||||||
if (errno == ESRCH) {
|
if (errno == ESRCH) {
|
||||||
if (!getdwmblockspid())
|
if (!getstatusbarpid())
|
||||||
sigqueue(dwmblockspid, SIGUSR1, sv);
|
sigqueue(statuspid, SIGUSR1, sv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
sv.sival_int = arg->i;
|
||||||
|
sigqueue(statuspid, SIGRTMIN+statussig, sv);
|
||||||
|
#endif // BAR_DWMBLOCKS_SIGUSR1_PATCH
|
||||||
}
|
}
|
@ -1,2 +1,2 @@
|
|||||||
static int getdwmblockspid();
|
static int getstatusbarpid();
|
||||||
static void sigdwmblocks(const Arg *arg);
|
static void sigstatusbar(const Arg *arg);
|
@ -25,7 +25,7 @@ click_statuscmd_text(Arg *arg, int rel_x, char *text)
|
|||||||
int x = 0;
|
int x = 0;
|
||||||
char ch;
|
char ch;
|
||||||
#if BAR_DWMBLOCKS_PATCH
|
#if BAR_DWMBLOCKS_PATCH
|
||||||
dwmblockssig = -1;
|
statussig = -1;
|
||||||
#else
|
#else
|
||||||
statuscmdn = 0;
|
statuscmdn = 0;
|
||||||
#endif // BAR_DWMBLOCKS_PATCH
|
#endif // BAR_DWMBLOCKS_PATCH
|
||||||
@ -42,9 +42,9 @@ click_statuscmd_text(Arg *arg, int rel_x, char *text)
|
|||||||
text += i+1;
|
text += i+1;
|
||||||
i = -1;
|
i = -1;
|
||||||
#if BAR_DWMBLOCKS_PATCH
|
#if BAR_DWMBLOCKS_PATCH
|
||||||
if (x >= rel_x && dwmblockssig != -1)
|
if (x >= rel_x && statussig != -1)
|
||||||
break;
|
break;
|
||||||
dwmblockssig = ch;
|
statussig = ch;
|
||||||
#else
|
#else
|
||||||
if (x >= rel_x)
|
if (x >= rel_x)
|
||||||
break;
|
break;
|
||||||
@ -54,8 +54,8 @@ click_statuscmd_text(Arg *arg, int rel_x, char *text)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if BAR_DWMBLOCKS_PATCH
|
#if BAR_DWMBLOCKS_PATCH
|
||||||
if (dwmblockssig == -1)
|
if (statussig == -1)
|
||||||
dwmblockssig = 0;
|
statussig = 0;
|
||||||
#endif // BAR_DWMBLOCKS_PATCH
|
#endif // BAR_DWMBLOCKS_PATCH
|
||||||
return ClkStatusText;
|
return ClkStatusText;
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,38 @@
|
|||||||
*/
|
*/
|
||||||
#define BAR_AWESOMEBAR_PATCH 0
|
#define BAR_AWESOMEBAR_PATCH 0
|
||||||
|
|
||||||
/* This patch depends on statuscmd patch and adds integration with a (patched) dwmblocks
|
/* This patch depends on statuscmd patch and adds integration with a (patched)
|
||||||
* instance to give a clickable status bar.
|
* dwmblocks instance to give a clickable status bar. One must not necessarily
|
||||||
* Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea
|
* have to use dwmblocks for this feature, any status updater that has support
|
||||||
|
* for real-time signals (SIGRTMIN) can be used.
|
||||||
|
*
|
||||||
* dwmblocks: https://github.com/torrinfail/dwmblocks
|
* dwmblocks: https://github.com/torrinfail/dwmblocks
|
||||||
|
* https://dwm.suckless.org/patches/statuscmd/
|
||||||
*/
|
*/
|
||||||
#define BAR_DWMBLOCKS_PATCH 0
|
#define BAR_DWMBLOCKS_PATCH 0
|
||||||
|
|
||||||
|
/* Originally the dwmblocks + statuscmd patch used a user defined signal (SIGUSR1)
|
||||||
|
* for communicating with dwmblocks to indicate update signal and what button was
|
||||||
|
* pressed. The signalling was later changed to SIGRTMIN instead.
|
||||||
|
*
|
||||||
|
* Ultimately this makes dwmblocks instances that were patched with the old patch
|
||||||
|
* are incompatible with the new dwm patch and vice versa.
|
||||||
|
*
|
||||||
|
* This is a compatibility patch that makes dwm use SIGUSR1 instead of SIGRTMIN so
|
||||||
|
* if button clicks are not working then you may want to try enabling this.
|
||||||
|
*
|
||||||
|
* If dwmblocks happen to die like this when clicking on a status
|
||||||
|
*
|
||||||
|
* [1] 54355 user-defined signal 1 dwmblocks
|
||||||
|
*
|
||||||
|
* then it suggests that dwmblocks does not support user defined signals and this
|
||||||
|
* patch should be left disabled.
|
||||||
|
*
|
||||||
|
* Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea
|
||||||
|
* https://dwm.suckless.org/patches/statuscmd/
|
||||||
|
*/
|
||||||
|
#define BAR_DWMBLOCKS_SIGUSR1_PATCH 0
|
||||||
|
|
||||||
/* This patch shows the titles of all visible windows in the status bar
|
/* This patch shows the titles of all visible windows in the status bar
|
||||||
* (as opposed to showing only the selected one).
|
* (as opposed to showing only the selected one).
|
||||||
* Awesomebar takes precedence over fancybar. Fancybar takes precedence over
|
* Awesomebar takes precedence over fancybar. Fancybar takes precedence over
|
||||||
|
Loading…
Reference in New Issue
Block a user