Fix clipboard watcher lifecycle

This commit is contained in:
David Heinemeier Hansson
2026-07-02 11:09:42 -07:00
parent 76e0b718b2
commit 738821c3ab
4 changed files with 216 additions and 9 deletions
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
current_script=${1:-}
[[ -n $current_script ]] || exit 0
is_clipboard_capture() {
local path=$1
[[ $path == */shell/plugins/clipboard/capture.sh ]]
}
watched_script_for_pid() {
local pid=$1
local -a args=()
local i
[[ -r /proc/$pid/cmdline ]] || return 1
mapfile -d '' -t args <"/proc/$pid/cmdline" || return 1
((${#args[@]} > 0)) || return 1
for ((i = 0; i < ${#args[@]}; i++)); do
if [[ ${args[i]} == "--watch" ]]; then
printf '%s\n' "${args[i + 1]:-}"
return 0
fi
done
return 1
}
for pid in $(pgrep -x wl-paste 2>/dev/null || true); do
watched_script=$(watched_script_for_pid "$pid" || true)
[[ -n $watched_script ]] || continue
is_clipboard_capture "$watched_script" || continue
if [[ $watched_script == $current_script || ! -e $watched_script ]]; then
kill "$pid" 2>/dev/null || true
fi
done