bugaevc / wl-clipboard

Command-line copy/paste utilities for Wayland
GNU General Public License v3.0
1.62k stars 59 forks source link

wl-copy: ignore SIGINT when backgrounded #220

Open krobelus opened 7 months ago

krobelus commented 7 months ago

Given a command like

echo foo | wl-copy

Unlike bash, the fish shell puts wl-copy in the shell's process group 1, which can be observed with "ps -o pid,pgid,comm,args". On VSCode's integrated terminal, this causes the issue that Control+C will kill wl-copy, clearing the clipboard. fish has worked around this2 but still we should fix the command described above. I'll try to look into changing the fish behavior but chances are it's complicated.

Let's block SIGINT and SIGQUIT in the background process. This will make wl-copy behave as if launched as

bash -c "wl-copy &"

because according to Bash documentation3 that's how background commands in noninteractive shells should behave:

When job control is not in effect, asynchronous commands ignore SIGINT and SIGQUIT in addition to these inherited handlers.

fish implements this too, but the bug happens on interactive shells.

krobelus commented 7 months ago

alternatively we could call setsid in the forked child, and perhaps double-fork additionally (for some added safety)