tentando limpar a área de transferência

1

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
    
por Bart 12.07.2018 / 18:08

0 respostas

Tags