#!/bin/zsh
setopt no_unset warn_create_global
typeset -gA clipboards
typeset -g map=/run/display-container-map
#set -x
get-clip() {
local sel out name=$1
local -a env=( env )
[[ -f /run/Xauthority.${DISPLAY#:} ]] && \
env+=( XAUTHORITY=/run/Xauthority.${DISPLAY#:} )
for sel in CLIPBOARD PRIMARY; do
out=$( $env xclip -o -sel $sel ) && \
[[ -n $out ]] &&
clipboards[${sel:l}@$name]=$out
done
}
scan() {
local sock
local -a found
for sock in /tmp/.X11-unix/X*; do
found=( $map/${${sock:t}#X}=*(N) )
DISPLAY=:${sock##*/X} get-clip ${${found[1]:-${sock:t}}##*=}
done
}
#typeset -f -t scan
print-clip() {
local name content
for name content in "${(kv@)clipboards}"; do
printf '>> %s <<\n%s\n\n' $name $content
done
}
print-clip-0() {
local name content
for name content in "${(kv@)clipboards}"; do
printf '%s\0' $name $content
done
}
main() {
scan
if (($#)) && [[ $1 == -0 ]]; then
print-clip-0
else
print-clip
fi
}
main "$@"