Atalho do teclado para colar a seleção principal


40

Existe um atalho de teclado padrão ou convencional para colar a seleção primária?

Gostaria de selecionar um texto e ir para outro aplicativo para colar sem descartar o conteúdo da área de transferência. Prefiro manter meus dedos no teclado do que ir para o mouse, encontrar o ponteiro, posicioná-lo onde quiser e clicar com o botão do meio.

Se não há nada convencional, ou se é específico de aplicativo e não é suportado por muitos, existe uma solução alternativa para fazer isso funcionar globalmente? (Ou pelo menos em mais aplicativos.)


2
Possível mesmo em qualquer distro: unix.stackexchange.com/questions/11889/…
Ciro Santilli

FWIW, você pode colar a seleção principal do teclado (ou seja, sem o uso de botões do mouse.) Usando shift-inserção, e copiar / colar a seleção área de transferência usando ctrl-insert / Ctrl-Shift-insert
Jonathan Hartley

@JonathanHartley para mim shift-insert
paste

Respostas:


32

O envio de teclas virtuais não funciona para mim (consulte os comentários ), mas essa resposta me inspirou a procurar soluções semelhantes. O envio de um evento "texto" xvkbdignora o estado atual do seu teclado físico:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textusa algumas seqüências de barra invertida, então, em vez de dançar com escape, -filefunciona. xvkbdtambém gera algum texto de aviso sobre modificadores, mas parece irrelevante para esse uso (mas eu não queria vê-lo ~/.xsession-errors).

Liguei isso a um atalho usando Sistema> Preferências> Atalhos do teclado .

Observe que você precisa ter os pacotes xsel e xvkbd instalados:

sudo apt-get install xsel xvkbd

3
Bananas sagradas! Funciona! Fantástico. O Ubuntu deve configurar isso por padrão.
Eric Johnson

8
Para mim, sh -c 'xsel | xvkbd -file - 2>/dev/null'trabalhos, -xsendevent precisavam sair para fazê-lo funcionar.
sup

A propósito, mais uma vez, tive que atribuir esse comando a um único atalho de tecla (felizmente, tenho o botão ThinkVantage não fazendo nada no meu Thinkpad - ctrl + alt + v se comportou de maneira estranha e colou apenas parte do que estava dentro xsel).
sup

2
Isso funciona muito bem, exceto por dois problemas. (1) Uso um terminal suspenso (Guake) que configurei para ocultar a perda de foco. A execução desse script remove o foco temporariamente do terminal, fazendo com que ele oculte. (2) Ele não lida bem com caracteres UTF-8, caracteres de byte duplo. por exemplo, se eu selecionar "éòü", usar o script imprimirá "à © òü".
Sparhawk

2
Parece que o segundo bug é no xvkbd. xselfunciona bem com "éòü" na seleção principal, mas xvkbdfalha como o script acima. (E também falha com xvkbd -text "éòü", embora aqui ele imprime nada.)
Sparhawk

7

Você pode obter isso com o uso combinado dos programas xdotool ( clique para instalar ) e xsel ( clique para instalar ).

xdotoolpode simular digitação em uma janela; xselgera o conteúdo da seleção PRIMARY (por padrão); o seguinte shell liner fará o truque:

 xdotool type `xsel`

Para vincular isso a qualquer tecla usando o item de menu Sistema-> Preferências-> Atalhos do teclado , é necessário envolvê-lo em uma chamada de shell:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

Digitar xdotoolnão funcionará com alguns programas; veja as notas na documentação do xdotool .


Isso não funcionará, a menos que a caixa de texto ativa e a posição do cursor estejam nessa posição exata, e certamente não. De fato, se isso conta a borda do gerenciador de janelas, isso fará minha ação de "clique do meio no título da janela", que é completamente diferente.

@ Roger Obrigado, corrigiu o texto. Estou curioso para saber se há uma maneira melhor de fazer isso: Eu mesmo fui à procura de um "colar" tecla por algum tempo ...
Riccardo Murri

Bem, agradeço o esforço, mas isso ainda não funcionará. Se eu quisesse me preocupar com a posição do mouse, usaria o mouse em primeiro lugar. :)

@ Roger: Entendi a segunda vez correta: xdotool + xsel faz isso. (Bem, pelo menos funciona para mim.)
Riccardo Murri

2
Precisa da opção --clearmodifiers, caso contrário, existe uma condição de corrida entre liberar o atalho de teclado e executar o xdotool. O xdotool nos repositórios do 10.04 não é atualizado para esta opção, eu tive que fazer o download e compilar eu mesmo. No entanto, --clearmodifiers parece afetar estranhamente os modificadores, e não vejo como, no final, fazer o xdotool funcionar com o atalho do meu teclado (embora funcione muito bem para digitar virtualmente o texto).


2

A chamada xdotool click --clearmodifiers 2simula clicar no botão do meio do mouse. Isso funciona muito melhor do que usar o xsel (pelo menos para mim). Embora você tenha que posicionar o mouse antes de digitar ...


2

Outra sugestão do xdotool, trabalhando no Debian Jessie 8.7 (janeiro de 2017):

xdotool click --delay 0 --clearmodifiers 2
  • O xdotool lida com seqüências de vários bytes (pe UTF-8), diferentemente do xvkbd.
  • xdotool clicksimula um clique real, para que você não precise clicar em si mesmo para colar na posição do mouse, como faria se usasse o xdotool typexvkbd.

O único problema é que --clearmodifiers"pressionará" qualquer modificador (Ctrl / Alt / Shift / Meta) usado depois de simular o clique. Mesmo com --delay 0(em vez de 12ms), o comando demora um pouco para ser executado. Se você soltar as teclas antes que elas terminem, seus modificadores serão "pressionados" novamente e ficarão presos até você pressionar e soltar a tecla real mais uma vez.

Então, com isso, você precisa ser um pouco "lento" (50ms?) Para liberar seus modificadores, se estiver usando algum.

Você pode testar isso configurando o atalho do teclado, usando-o em um editor de texto e pressionando uma tecla (como auma seta ou uma seta). A letra deve aparecer em minúsculas. Se algo mais acontecer, você é rápido demais e um modificador está bloqueado (pe Shift, se estiver em maiúsculas, Ctrl, se você selecionou todo o texto, Alt, se você abriu um menu). Pressione e solte seus modificadores novamente para redefini-los.

Se você for rápido demais, use a sugestão de ilkerk:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

Então você deve liberá-los em menos de 300ms e aguardar meio segundo para que o texto apareça.

Além disso, usar xdotool typesignifica que você insere o texto como se estivesse digitando, na posição do cursor do texto, e não o ponteiro do mouse. Você pode alterá-lo para clickse preferir o comportamento usual do clique do meio.

(fez este post para que os novatos não precisem mais juntar as peças dos quebra-cabeças nos comentários)


trabalha para mim no Arch Linux agora
MountainX

1

Como tive problemas com as soluções que simulam colar a PRIMARYseleção, adicionei um atalho que copia a PRIMARYseleção paraCLIPBOARD . Depois de usar o meu atalho I colar o CLIPBOARDda maneira usual, com Ctrl+V, Ctrl+Shift+Vou Shift+Insert, dependendo da aplicação.

O comando para copiar a PRIMARYseleção para o CLIPBOARDé

sh -c 'xsel --output --primary | xsel --input --cliboard'

ao qual vinculo Ctrl+Insert(escolha arbitrária) nas configurações de atalho do Gnome emSystem Settings -> Devices -> Keyboard

Resumo de problemas com outras soluções: Eu tentei os xsel | xvkbd ...e xsel | xdotool ...soluções, mas descobriu que não funcionou muito bem, porque eles simulam digitando o PRIMARYpersonagem selecção pelo caráter, o que não é o mesmo que colar com botão do meio. Os problemas incluem: há um longo atraso enquanto uma grande seleção é inserida, um caractere de cada vez; se você quiser desfazer o "colar", precisará desfazê-lo caractere por caractere, o que é lento; se você estiver usando "chaves mortas", tudo ficará confuso, por exemplo, "colar" "eproduz ë; o xvkdbnão manipula caracteres unicode corretamente.

Aviso: Esta solução substitui o CLIPBOARDconteúdo existente , mas o OP solicitou soluções que preservem o CLIPBOARDconteúdo existente .


Isso salva o conteúdo original da área de transferência e o configura novamente depois? Ou lixeira o conteúdo original da área de transferência, deixando de fazer parte da pergunta " colar sem lixeira o conteúdo da área de transferência "?
Xen2050 7/03

@ Xen2050 sim, isso destrói a CLIPBOARD. Vou adicionar uma nota à resposta.
ntc2 7/03

0

Eu tive o mesmo problema e a pesquisa na Internet não me ajudou muito. O problema de simular o clique 2 é irritante, conforme mencionado no OP.

O problema com o proposto acima xdotoole o xsel é que quando xdotoolcomeça a "digitar" você ainda está pressionando outra tecla. Isso nem sempre resulta em qualquer saída. Por exemplo, se você ligá-lo à tecla "inserir", ele xdotoolenvia as teclas enquanto seu dedo pressiona a tecla "inserir", o que não causa nada.

Abaixo está uma solução alternativa, para vinculá-lo a uma tecla pressionada:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

não é perfeito, mas está funcionando. agora você tem 0,3 segundos para concluir sua seleção de pressionamento de tecla (e tecla para cima).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.