diff options
author | Luke Smith <luke@lukesmith.xyz> | 2020-05-26 07:26:42 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-26 07:26:42 -0400 |
commit | 6d75ac1b00482e842f3e600cddde3b31a1c35ede (patch) | |
tree | 14e17d12341cec0d909212d1dbdac07f5a955325 | |
parent | 0666c8a14d4c87ec7fda7d9fa146f6a292126b3b (diff) | |
parent | 373d96844fb93e4a2e5aee4d3b9f866c032190a4 (diff) | |
download | dwmblocks-6d75ac1b00482e842f3e600cddde3b31a1c35ede.tar.gz dwmblocks-6d75ac1b00482e842f3e600cddde3b31a1c35ede.tar.bz2 dwmblocks-6d75ac1b00482e842f3e600cddde3b31a1c35ede.zip |
Merge pull request #23 from danbyl/forkbefore
Update status after forking and export with setenv
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | dwmblocks.c | 16 |
2 files changed, 7 insertions, 11 deletions
@@ -42,5 +42,5 @@ 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). +[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 |