buscar o texto da área de transferência e remover hífens

3

Estou executando o Mac OS 10.9 e uso o recurso Text to Speech , que permite usar uma tecla de atalho que lê o texto selecionado em qualquer aplicativo. Eu uso esse recurso para ler documentos PDF em voz alta na pré-visualização (visualizador de PDF da Apple).

O problema é que o texto selecionado geralmente tem hífens de quebra de palavras. O resultado é que o recurso Text to Speech não lê o texto corretamente.

Exemplo:

Pergunta:

Vocêpodemeescreverumpequenoscriptdeshellbashqueremovehífensdotextonaáreadetransferência?UsareitambémoautomatorparapoderatribuirumatecladeatalhoeenviarasaídadoscriptparaorecursoSpeakText.

Edit:(emrespostaaocomentáriodegoldilocks)OAutomatormepermitecopiarotextoselecionadoparaaáreadetransferênciaseguidoporumshellscriptseguidopelorecursoSpeakText.Vejaaimagemabaixo.

2a Edição: na verdade, pode haver uma maneira mais concisa de realizar isso:

naopção'Passarentrada'existeumaopção'comoargumento'.Nãotenhocertezaseissosignificaquepossoignoraraação"copiar para a área de transferência" na primeira imagem, mas pensei em mencioná-la apenas no caso.

    
por Far Zin 31.03.2014 / 00:02

1 resposta

2

No Linux, o seguinte funcionaria:

xsel | sed ':rep /-$/ {N; s/-\n//; b rep}' | xsel -i

No OSX, estou adivinhando (embora o script sed funcione bem). pbcopy parece ser o comando a ser usado. Supondo que haja um buffer de seleção no OSX e pbcopy funcione por padrão, isso pode funcionar:

pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}' | pbcopy

Olhando para a página man online , parece que há um número de 'pastas' com as quais ele pode trabalhar:

-pboard {general | ruler | find | font}
       specifies which pasteboard to copy to or paste from.  If no pasteboard is
       given,  the  general pasteboard will be used by default.

Eu não tenho idéia de qual (se houver) é a que você quer e não consigo ver nenhuma documentação adicional (embora eu não tenha olhado muito fundo). Você pode experimentar com pbpaste -pboard xxx e ver o que sai. Existe uma boa chance de um para texto realçado enquanto o outro é para texto copiado com Cmd-C. Com uma opção de trabalho, basta adicioná-la aos dois pbpaste e pbcopy .

A outra coisa que pode dar errado é que pbcopy tem problemas para ler e gravar na mesma área de trabalho ao mesmo tempo. A solução mais simples seria usar um utilitário Unix não padrão chamado sponge . Faz parte de moreutils . Novamente Linux-centricamente:

pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}' | sponge | pbcopy

Caso contrário, use uma variável:

selection=$(pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}')
echo "$selection" | pbcopy

Atualizar

Supondo que o Automator use o stdout do shell script, basta selecionar a opção to stdin (é onde os dados chegam se forem canalizados para o script). O script de shell seria simplesmente:

#!/bin/sh
sed ':rep /-$/ {N; s/-\n//; b rep}'
    
por 31.03.2014 / 01:29