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.
This commit is contained in:
parent
ff026b9dd4
commit
aaeebc4b36
2 changed files with 7 additions and 11 deletions
|
@ -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).
|
||||
|
|
16
dwmblocks.c
16
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
|
||||
|
|
Loading…
Reference in a new issue