21 lines
1006 B
Bash
Executable File
21 lines
1006 B
Bash
Executable File
#!/bin/sh
|
|
# xsel as clipmenud sees it, written by the mesh (module clipmenu). Replaced at every push.
|
|
#
|
|
# clipmenud records text, and reads a selection with `timeout 1 xsel -o`. A selection holding an
|
|
# image (a screenshot copied as image/png) is sent in pieces; one second is too short for megabytes,
|
|
# timeout kills xsel half way, and the program owning the image waits for ever for a reader that is
|
|
# gone. From then on nothing can ask the clipboard anything: pastes hang, and an Electron app that
|
|
# asks on its main thread freezes. So a read goes ahead only when the selection offers text.
|
|
case " $* " in
|
|
*" -o "* | *" --output "*)
|
|
selection=clipboard
|
|
case " $* " in
|
|
*" --primary "* | *" -p "*) selection=primary ;;
|
|
*" --secondary "* | *" -s "*) selection=secondary ;;
|
|
esac
|
|
targets=$(timeout 1 xclip -selection "$selection" -t TARGETS -o 2>/dev/null) || exit 1
|
|
printf '%s\n' "$targets" | grep -qxE 'UTF8_STRING|STRING|TEXT|text/plain(;charset=utf-8)?' || exit 1
|
|
;;
|
|
esac
|
|
exec /usr/bin/xsel "$@"
|