clip (1043B)
1 #!/bin/sh 2 3 HIST="${XDG_CACHE_HOME:-$HOME/.cache}/clipboard-history" 4 5 _daemon() { 6 mkdir -p "$(dirname "$HIST")" 7 touch "$HIST" 8 last="" 9 while true; do 10 current=$(xclip -o -selection clipboard 2>/dev/null) 11 if [ -n "$current" ] && [ "$current" != "$last" ]; then 12 last="$current" 13 tmp=$(mktemp) 14 printf '%s\n---\n' "$current" | cat - "$HIST" > "$tmp" 15 mv "$tmp" "$HIST" 16 fi 17 sleep 1 18 done 19 } 20 21 _pick() { 22 [ -f "$HIST" ] || { echo "Histórico vazio."; exit 1; } 23 24 chosen=$(awk ' 25 /^---$/ { if (entry != "") print entry; entry=""; next } 26 { entry = (entry == "") ? $0 : entry " · " $0 } 27 END { if (entry != "") print entry } 28 ' "$HIST" | dmenu -l 15 -p "Clipboard:") 29 30 [ -z "$chosen" ] && exit 0 31 32 printf '%s' "$chosen" | sed 's/ · /\n/g' | xclip -selection clipboard 33 } 34 35 case "${1:-pick}" in 36 daemon) _daemon ;; 37 pick) _pick ;; 38 *) printf 'Uso: %s [daemon|pick]\n' "$(basename "$0")" >&2; exit 1 ;; 39 esac