Gostaria de limpar automaticamente a área de transferência alguns segundos após o uso.
#!/usr/bin/env bash
LOCKFILE=/tmp/.clearclip-lock
if [ -e ${LOCKFILE} ] && kill -0 'cat ${LOCKFILE}'; then
exit 1
fi
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
touch ${LOCKFILE}
echo $$ > ${LOCKFILE}
if xclip -o -selection clipboard 1>&2 2>/dev/null; then
if watch -n 0.5 -t --chgexit xclip -o -selection clipboard @>/dev/null; then
sleep 10
xsel -bc
fi
fi
rm -f ${LOCKFILE}
Eu apenas comecei a brincar com esse arquivo executável simples chamado ~/mypath/clearclip
, que gostaria de acionar com um timer do sistema local do usuário. De qualquer forma, o serviço lança um erro Error opening terminal: unknown.
# ~/.local/share/systemd/user/clearclip.service
[Unit]
Description=clear the clipboard
ConditionFileIsExecutable=%h/_path/clearclip.sh
[Service]
Environment=DISPLAY=:0
ExecStart=%h/_path/clearclip.sh
Type=oneshot
Minha principal questão é:
Existe uma ferramenta para executar a mesma funcionalidade, mas não interativa, de watch -g
? Qual a sua abordagem? Você escreveria a saída para arquivos tmp em um loop while para compará-los, reverter para esperar ou algo mais?
Outra pergunta é: como seria uma configuração de timer duplo?
por exemplo. O temporizador verificaria quando a área de transferência muda e dispara (ou reinicia) outro temporizador que limpa a seleção da área de transferência
Editar 25/07:
Eu desisti de usar esse script com um timer de usuário esta semana. Eu estava brincando com o zpty para emular um terminal para me livrar do erro opening terminal
, mas acabei colocando um clearclip &
em ~/.config/zsh/.zlogin
.
#!/usr/bin/env zsh
# zmodload zsh/zpty
oclip=""
let count='-1'
let timeout=70
clipchanged() {
if ! xclip -o -selection clipboard 2>/dev/null 1>&2; then
count='-1'
return 1
fi
clip="$(xclip -o -selection clipboard)"
if [[ -z "$clip" ]] || [[ "$oclip" == "$clip" ]]; then
return 1
elif [[ -z "$oclip" ]]; then
oclip="$clip"
return 1
else
(( count=timeout ))
oclip="$clip"
return 0
fi
}
while true; do
if (( count > 0 )); then
((count--))
# echo -n "\r3[K$count"
fi
if (( count == 0 )); then
xsel -bc
fi
if clipchanged; then
(( count=timeout ))
fi
sleep .5
done