newterm: dwm swallow compatibility

There is a compatibility issue between the dwm swallow patch and the
newterm patch for st.

The swallow patch identifies the terminal client to substitute by
traversing the process tree checking if the new window is a descendant
of a terminal client.

The newterm patch for st spawns a new terminal that is a descendant of
the parent st process.

This can lead to situations where the swallow patch ends up replacing
the wrong terminal window.

Changed the forking mechanism to do a double fork and letting the
first one die. This is a technique commonly used by daemons to spawn
new orphan processes.
This commit is contained in:
bakkeby 2021-07-12 09:25:52 +02:00
parent ee4cdc8d6e
commit 04a194c013
1 changed files with 13 additions and 3 deletions

View File

@ -7,9 +7,19 @@ newterm(const Arg* a)
die("fork failed: %s\n", strerror(errno)); die("fork failed: %s\n", strerror(errno));
break; break;
case 0: case 0:
res = chdir(getcwd_by_pid(pid)); switch (fork()) {
execlp("st", "./st", NULL); case -1:
break; die("fork failed: %s\n", strerror(errno));
break;
case 0:
res = chdir(getcwd_by_pid(pid));
execlp("st", "./st", NULL);
break;
default:
exit(0);
}
default:
wait(NULL);
} }
} }