Por que Shift + Insert cola do CLIPBOARD em alguns aplicativos e PRIMARY em outros?

29

Como colo da seleção PRIMARY (por exemplo, texto selecionado pelo mouse) com um atalho de teclado? Shift+Insertcola inconsistentemente de PRIMARY ou CLIPBOARD, dependendo do aplicativo.

Fundo:

Ctrl+Ccopia o texto selecionado para o CLIPBOARD enquanto a seleção do mouse copia para PRIMARY. Cole do CLIPBOARD com Ctrl+Ve cole do PRIMARY with mouse-middle-click.

Em um emulador de terminal (gnome-terminal), cole do CLIPBOARD com Ctrl+Shift+V. (Cole de PRIMARY com mouse-middle-clickstill.)

Quero colar do PRIMARY com um atalho de teclado. No gnome-terminal, isso é Shift+Insert, mas no gedit e no Firefox, Shift+Insertpastas do CLIPBOARD. Quero um atalho que cole consistentemente do CLIPBOARD e um atalho diferente que cole consistentemente do PRIMARY.

Estou executando o Ubuntu 14.04 com xmonad e Firefox 34.0

reasgt
fonte

Respostas:

30

Todos os aplicativos que você mencionou são gtk+aplicativos, por isso é muito fácil responder Por que ... Porque em todos os gtk+ aplicativos ( exceto um ), Shift+ Insertcola da CLIPBOARD - ou seja, é equivalente a Ctrl+ V. O atalho é codificado em gtkentry.c(linha 2022) e gtktextview.c(linha 1506):

gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK,
                "paste-clipboard", 0);

Também está documentado no Manual de Referência GTK + 3 em GtkEntry:

The “paste-clipboard” signal
void
user_function (GtkEntry *entry,
               gpointer  user_data)
The ::paste-clipboard signal is a keybinding signal which gets emitted
to paste the contents of the clipboard into the text view.
The default bindings for this signal are Ctrl-v and Shift-Insert.

Tanto quanto eu sei, isso foi feito para manter a consistência com outros DEs (consulte KDEas Qtprincipais combinações de teclas QTextEdit Class) e o Windows OS 1 .
A única exceção é gnome-terminal. Após longos debates, os desenvolvedores decidiram (por consistência com outros terminais) que, em gnome-terminal, Shift+ Insertdeve colar do PRIMARY e Ctrl+ Shift+ Vdo CLIPBOARD (embora você tenha as opções para personalizar alguns atalhos).


Quanto a como você cola a seleção com um atalho de teclado ... não há uma maneira direta.

A maneira mais fácil é atribuir um atalho a um script que é executado xdotool click 2(simula clicar no botão do meio do mouse). Enquanto isso funciona (e deve funcionar com todos ou com a maioria dos DEs e kits de ferramentas), só funciona se o cursor do mouse estiver sobre a caixa de entrada de texto; caso contrário, falhará.

Outra maneira relativamente fácil é via Gnome Accessibility, se estiver disponível no seu sistema. Também requer a presença de um teclado numérico. Vá para Universal Access>> Pointing & Clickinge ative Mouse Keys. Verifique se NumLockestá desligado. Você pode usar as teclas do teclado numérico para mover o cursor e clicar. Para simular um clique do botão do meio do mouse, pressione (e solte) *(asterisco) e pressione 5(aqui está um pequeno guia ). Essa solução parece sempre funcionar em um gtk+ambiente. A desvantagem é que ele requer Gnome Accessibilitye um numpad. Além disso, você não pode personalizar o atalho.

Uma solução interessante foi proposta no gnome-bugzilla (bug 643391) . (Atualização 2018: o problema agora foi movido para .) Requer a correção de alguns arquivos de origem e a definição de opções de configuração ~/.config/gtk-3.0/gtk.css(ou ~/.gtkrc-2.0para gtk+2 aplicativos). Eu não tentei pessoalmente, mas o feedback é positivo.

Idealmente, você remendaria os arquivos de origem e definiria um "paste-selection"sinal e depois ligaria Shift+ Insertao em "paste-selection"vez de "paste-clipboard". O código de Andy (anexado no relatório de bug vinculado acima) pode servir como um guia sobre como fazer isso. Mesmo assim, isso afetaria apenas os gtk+aplicativos (eu não sou um KDE/Qtcara, então não tenho idéia de como alterar o Qtcomportamento dos aplicativos).


1: (para não mencionar o CUA da IBM)

don_crissti
fonte
2
Obrigado por essa explicação. É uma pena que não exista solução melhor, sinto muita falta de um atalho de teclado consistente para o PRIMARY. A solução alternativa da emulação do mouse não ajuda muito, pois o objetivo do atalho é evitar a necessidade de lidar com o mouse.
Didi_X8 14/05
1

Sinto muito: não posso escrever comentários por causa da reputação, por isso escrevo como resposta. Não é uma solução direta, mas me ajuda ...

Você pode usar a combinação de informações:

  1. Edite o tema gtk e permita a ligação de teclas como desejar .

  2. Exemplo de criação de keybinding do gtk 3.0 em css do tema .

  3. Exemplo de substituição de ligações de teclas gtk e de desatamento .

  4. Exemplo de modificação da ligação de teclas para o terminal gnome

  5. Início automático do corte automático com opções padrão para sincronizar o CLIPBOARD com o CUTBUFFER (isso é opcional). Este link é apenas para informações sobre o problema.

  6. Use o clipman para gui acessar vários buffers (PRIMARY e CLIPBOARD), sem seleções de sincronização automática (sincronização automática bidirecional comete erros).

Então, basta selecionar o tema gtk e modificar o CSS do tema para as combinações de teclas necessárias para os sinais de cópia de transferência (Ctrl + Insert) e pasta de transferência (Shift + Insert).

user1742529
fonte
11
Esse pode ser o começo de uma boa resposta, se você pegar o conteúdo desses links e combinar as informações. Tal como está, é apenas uma coleção de links, e isso coloca o risco de ser excluído. Por favor, preencha as informações para que elas estejam diretamente na resposta e tenho certeza de que você receberá votos positivos (assim, dando a você reputação suficiente para comentar). Obrigado!
Toby Speight