
É possível acessar o texto destacado através de um script de shell?
Quero criar um atalho de teclado para usar 'espeak' para ler o texto destacado.
Responder1
Sim, isso é relativamente fácil, existem muitas ferramentas para manipulação da área de transferência, eu as usei para preencher o registro de dispositivos Apple e verificação de e-mail junto com xdotool
… muito mais fácil do que preencher o formulário 1000 vezes…
Então, configure um atalho para ser/home/bob/bin/speak.sh
speak.sh
:
#!/bin/bash
xclip -o | xclip -selection clipboard -i
xclip -o | espeak
Responder2
resumindo: normalmente você não pode fazer isso (a menos que a seleção tenha sido copiada para a área de transferência)
longo: existem alguns casos especiais, por exemplo, o xterm possui um recurso que (normalmente está desabilitado) permite que uma aplicação leia o texto selecionado através de uma sequência de escape. Isso está descrito emSequências de controle XTerm:
Ps = 5 2 -> Manipulate Selection Data. These controls may
be disabled using the allowWindowOps resource. The parameter
Pt is parsed as
Pc; Pd
The first, Pc, may contain zero or more characters from the
set c p s 0 1 2 3 4 5 6 7 . It is used to construct
a list of selection parameters for clipboard, primary, select,
or cut buffers 0 through 7 respectively, in the order given.
If the parameter is empty, xterm uses s 0 , to specify the
configurable primary/clipboard selection and cut buffer 0.
The second parameter, Pd, gives the selection data. Normally
this is a string encoded in base64. The data becomes the new
selection, which is then available for pasting by other appli-
cations.
If the second parameter is a ? , xterm replies to the host
with the selection data encoded using the same protocol.
If the second parameter is neither a base64 string nor ? ,
then the selection is cleared.
Isto é, se opermitirWindowOpsrecurso está ativado, um aplicativo pode fazer algo como
printf '\033]52;s;?\007'
e leia os dados de seleção como uma string base64. Mas esse é um caso especial.
É claro que alguns aplicativos são copiados para a área de transferência (consulte FAQ), mas não todos. Por exemplo, rxvt, etc., use a seleção primária. Não existe uma solução que funcione em qualquer lugar.
Leitura adicional:
- Por que não consigo selecionar/colar de/para outros programas?(FAQ xterm)
- Copiando e colando com URxvt
- Ticket #3229 colando linha embrulhada adiciona EOL(Comandante da Meia-Noite)
- Re: Acesso à seleção X no xterm (OSC 52)(emacs-devel)
- Debian #384593 xterm: permitirWindowOps deve ser desabilitado por padrão