aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Bylinka <daniel.bylinka@gmail.com>2020-05-18 00:52:18 +0200
committerDaniel Bylinka <daniel.bylinka@gmail.com>2020-05-18 00:52:18 +0200
commitaaeebc4b367f4482ddc983e30a8d97e87b6c701a (patch)
treefc64956a679803a31e2de9aab5f0fe04c295f142
parentff026b9dd4d05eac027af0debb06637483d68b3b (diff)
downloaddwmblocks-aaeebc4b367f4482ddc983e30a8d97e87b6c701a.tar.gz
dwmblocks-aaeebc4b367f4482ddc983e30a8d97e87b6c701a.tar.bz2
dwmblocks-aaeebc4b367f4482ddc983e30a8d97e87b6c701a.zip
Update status after forking and export with setenv
Forking after updating the status can feel unresponsive depending on how long it takes for the command to run. Also link to the statuscmd page on suckless.org instead of the gist.
-rw-r--r--README.md2
-rw-r--r--dwmblocks.c16
2 files changed, 7 insertions, 11 deletions
diff --git a/README.md b/README.md
index a57f95a..2c4a7b3 100644
--- a/README.md
+++ b/README.md
@@ -14,5 +14,5 @@ Thus, running `pkill -RTMIN+10 dwmblocks` will update it.
Like i3blocks, this build allows you to build in additional actions into your scripts in response to click events.
See the above linked scripts for examples of this using the `$BLOCK_BUTTON` variable.
-For this feature to work, you need the appropriate patch in dwm as well. See [here](https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea).
+For this feature to work, you need the appropriate patch in dwm as well. See [here](https://dwm.suckless.org/patches/statuscmd/).
Credit for those patches goes to Daniel Bylinka (daniel.bylinka@gmail.com).
diff --git a/dwmblocks.c b/dwmblocks.c
index 64c2da2..bf648c2 100644
--- a/dwmblocks.c
+++ b/dwmblocks.c
@@ -184,29 +184,25 @@ void sighandler(int signum)
void buttonhandler(int sig, siginfo_t *si, void *ucontext)
{
- int button = si->si_value.sival_int & 0xff;
+ char button[2] = {'0' + si->si_value.sival_int & 0xff, '\0'};
sig = si->si_value.sival_int >> 8;
- getsigcmds(sig);
- writestatus();
if (fork() == 0)
{
- static char exportstring[CMDLENGTH + 22] = "export BLOCK_BUTTON=-;";
const Block *current;
- int i;
- for (i = 0; i < LENGTH(blocks); i++)
+ for (int i = 0; i < LENGTH(blocks); i++)
{
current = blocks + i;
if (current->signal == sig)
break;
}
- char *cmd = strcat(exportstring, blocks[i].command);
- cmd[20] = '0' + button;
- char *command[] = { "/bin/sh", "-c", cmd, NULL };
+ char *command[] = { "/bin/sh", "-c", current->command, NULL };
+ setenv("BLOCK_BUTTON", button, 1);
setsid();
execvp(command[0], command);
exit(EXIT_SUCCESS);
- cmd[22] = '\0';
}
+ getsigcmds(sig);
+ writestatus();
}
#endif