Fix clipboard watcher lifecycle
This commit is contained in:
Executable
+39
@@ -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
|
||||
Reference in New Issue
Block a user