Colar a seleção X (não o conteúdo da área de transferência) com o teclado

84

Eu gostaria de poder colar a seleção X usando o teclado. Atualmente eu tenho que usar o botão do meio do mouse para fazer isso.

Entendo que fingir pressionar o botão do meio do mouse é bastante fácil, mas essa solução também exigiria mover o ponteiro do mouse para o local do cursor de texto.

Existe uma maneira melhor de fazer isso?

intuído
fonte
2
Possível mesmo para o Ubuntu: askubuntu.com/questions/7769/…
Ciro Santilli escreveu:

Respostas:

93

Em algumas configurações padrão do linux, o Shift+ Insertexecutará um X-selection-paste. Como você observou, isso é distintamente diferente do X-clipboard-pastecomando, cuja ligação geralmente varia de acordo com o aplicativo. Se isso não funcionar, aqui estão algumas outras chaves para tentar:

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

Não vá? Seu ambiente de área de trabalho ou o Gerenciador de janelas provavelmente não os tem configurado, e é complicado porque - mesmo sob a bandeira de um DE ou WM - cada kit de ferramentas (por exemplo, GTK, Qt, Etc.) pode ter diferentes ligações padrão. Alguns programas (por exemplo gvim) têm até seus próprios registros de cópia internos que não são necessariamente sincronizados com o ambiente gráfico em que são executados. Para completar, mesmo quando um programa usa o sistema da área de transferência X, o X tem vários sistemas para escolher. Os dois mais básicos são o buffer de seleção - que sempre tem a última coisa selecionada (executada quando não existe) - e o buffer de cópia - no qual as coisas geralmente precisam ser especificamente copiadas. Para fazer uma cópia explícita no último sistema, você pode tentar qualquer uma dessas opções para obter o tamanho:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


Se nada disso estiver funcionando magicamente para você, existem duas maneiras de seguir.

  1. Há um aplicativo para isso! ™ Use um dos vários programas do gerenciador de transferência para lidar com isso para você. Os mais populares parecem ser Parcellite e Glippy , mas você pode conferir outras alternativas aqui . Consulte também esta pergunta sobre gerenciadores de área de transferência avançados

  2. Corte você mesmo.

Então, digamos que você queira hackear.

Além de escrever seu próprio código e acessar a API do X, as ferramentas de hacker para o trabalho são alguns pequenos utilitários de linha de comando que oferecem uma janela para a mente do X. Apenas uma pequena janela para você, a visão toda muito assustadora .

A primeira ferramenta é xsel. Este pequeno jobber cuspirá o que estiver no buffer de seleção de X a qualquer momento.

Agora você precisa colocar isso em seu programa. Existem duas opções para isso. Um é o xdotoolque permite simular o envio de eventos para o sistema de entrada do Xorg. Você pode usar o método typexdotool type foo_bar para imitar a digitação 'foo_bar' no cursor. Combinado, você obtém algo parecido com isto:

$ xdotool type $(xsel)

O outro é o xvkbdque envia eventos de teclado de um subsistema inferior. Você pode inserir as teclas pressionadas nele no STDIN. Combinado com xsel, você obtém algo parecido com isto:

$ xsel | xvkbd -xsendevent -file -

Ótimo. Agora, para que essa combinação de teclas execute essas coisas. Se você executar o Gnome-2, poderá adicionar um atalho personalizado em Sistema -> Preferências -> Atalhos do teclado . Se você usar um DE ou WM diferente, esse tamanho excedente é deixado para o leitor.

A última observação é que, ao vincular comandos a atalhos de teclado, geralmente é necessário ter apenas um comando, não dois comandos conectados a um canal, como usamos acima. Você pode fazer isso chamando seu comando canalizado como uma sequência de comandos argumetn para um novo shell como este:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'
Caleb
fonte
11
Definitivamente, qualifica-se como "melhor". Obrigado!
intuited 23/04
Em qual aplicativo? Nenhum dos aplicativos que eu uso geralmente se comporta assim.
Gilles
Estou usando o Ubuntu e gostaria realmente Shift-Insertde ter alguma utilidade prática, mas simplesmente não é (no Ubuntu). A única "consistência (+/-)" que encontrei é que um X- a seleção nos aplicativos GTK pode ser inserida com a tecla Shift inserida em um arquivo gnome-terminal, mas é bastante difícil para qualquer outra combinação de cruzamento desses mesmos aplicativos ... Os poucos aplicativos do KDE que eu uso (incluindo o Konsole) simplesmente não colar entre todos ... e mesmo nos aplicativos GTK, o clique no centro pode funcionar, mas Shift + Insert pode não (para o mesmo aplicativo) ... Então, eu uso o mouse :(
Peter.O
Não existe uma ligação de nível X. Pode ser algo que os aplicativos que você usa fazem, ou algo que seu gerenciador de janelas ou ambiente de área de trabalho faz. Duvido que seja específico para uma distribuição.
Gilles
11
Acho que uma abordagem fácil é vincular o atalho do teclado ao envio de um evento de clique do meio. Para mim é isso xdotool click 2.
Inductiveload
10

Aparentemente, o Shift+ Insertpode não funcionar corretamente em algumas instalações do GTK 3, pelo menos no FreeBSD. O problema é descrito como:

Shift-Insert não está colando a seleção principal. Em vez disso, ele deve colar a área de transferência (para a qual o Control-V já está sendo usado). Portanto, não existe uma maneira apenas de teclado para inserir a seleção primária. É preciso arrastar o mouse para lá e clicar no meio. Isso torna a interação entre os terminais e o GTK desconfortável.

Estão disponíveis um relatório de correção e patch recentes (até a data em que este documento foi escrito):

http://www.freebsd.org/cgi/query-pr.cgi?pr=188264

Michael Danilov
fonte
8
xdotool click 2

Isso simula o clique do botão do mouse diretamente e não requer o uso de xsel/ xdotool type ....

azulado
fonte
11
Isso requer o posicionamento correto do mouse, para que você possa usar o botão do mouse. Se houvesse alguma maneira de tirar o mouse para o cursor isso pode ser parte de uma resposta embora (Duvido que haja)
jberryman
2

Estou usando o Ubuntu 12 e estava tendo um problema ao colar texto do xterm no gedit (e em qualquer outro aplicativo). Além disso, eu uso um laptop sem o botão do meio do mouse, como muitas pessoas (realmente não há piedade da área de transferência para usuários do linux sem os botões do meio, e não: clique com o botão direito do mouse + left_click não funciona como substituto).

Enquanto eu acho que o método "xsel | xvkbd -xsendevent -file -" é bem legal. Eu achei que a solução mais simples era executar o "gnome-terminal" pré-instalado, em vez do "xterminal". O "gnome-terminal" suporta um comando de copiar com o botão direito do mouse na área de transferência. Eu poderia então "Editar Menu-> Colar" no gedit ou usar shift-insert. O "gnome-terminal" veio pré-instalado com o Ubuntu 12. Outras instalações debian / gnome devem poder instalá-lo via:

sudo apt-get install gnome-terminal

No Ubuntu, adicione-o ao iniciador esquerdo clicando no botão "Dash Home" na parte superior da barra do iniciador. Na caixa de pesquisa resultante, digite terminal. Você pode arrastar o ícone "Terminal" para a barra do iniciador.

Ryan Woodard
fonte
2
Esta é uma solução muito ruim. Você não pode realmente sugerir que as pessoas mudem para um terminal diferente, especialmente um que consiga 100 MB + de gnome-shell como uma dependência. Isso também não funciona com nenhum outro aplicativo, e o pior de tudo ainda exige o uso de um mouse para funcionar.
Pfrenssen