Por que Shift + Insert cola de CLIPBOARD em algumas aplicações e PRIMARY em outras?

20

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

Antecedentes:

Ctrl+C copia o texto selecionado para CLIPBOARD enquanto as cópias de seleção de mouse são feitas para PRIMARY. Cole de CLIPBOARD com Ctrl+V e cole de PRIMARY com mouse-middle-click .

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

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

Estou executando o Ubuntu 14.04 com xmonad e Firefox 34.0

    
por reasgt 08.01.2015 / 03:53

1 resposta

24

Todos os aplicativos que você mencionou são gtk+ apps, por isso é muito fácil responder Por que ... Porque todos gtk+ apps ( exceto um ), Shift + Inserir pastas de CLIPBOARD - ie é 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);

Ele também está documentado no Manual de Referência do 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.

Até onde eu sei, isso foi feito por consistência com outros DE's (veja KDE ' Qt ' em QTextEdit Class ) e sistema operacional Windows 1 .
A única exceção é gnome-terminal . Após longos debates, os devs decidiram (por coerência com outros terminais) que, em gnome-terminal , Shift + Inserir deve colar de PRIMARY e Ctrl + Shift + V deve ser colado no 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 executa xdotool click 2 (simula o clique no botão do meio do mouse). Enquanto isso funciona (e deve funcionar com todos ou a maioria dos DEs e toolkits), ele só funciona se o cursor do mouse estiver realmente sobre a caixa de entrada de texto, caso contrário ele falhará.

Outra maneira relativamente fácil é através da Acessibilidade do Gnome, se estiver disponível no seu sistema. Também requer a presença de um numpad. Vá para Universal Access > > Pointing & Clicking e ativar Mouse Keys . Certifique-se de que NumLock esteja desativado. Você pode então usar as teclas numpad 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 guide ). Esta solução parece funcionar sempre em um ambiente gtk+ . A desvantagem é que requer Gnome Accessibility e um numpad. Além disso, você não pode personalizar o atalho.

Uma solução interessante foi proposta no gnome-bugzilla (bug 643391) . Isso requer a correção de alguns arquivos de origem e a configuração de opções de configuração em ~/.config/gtk-3.0/gtk.css (ou ~/.gtkrc-2.0 para gtk+ 2 apps). Eu não tentei pessoalmente, mas o feedback é positivo.

O ideal seria que você remendasse os arquivos fonte e definisse um sinal "paste-selection" e então ligasse Shift + Inserir para "paste-selection" ao invés de "paste-clipboard" . O código de Andy (anexado no relatório de bug vinculado acima) poderia servir como um guia sobre como fazer isso. Mesmo assim, isso afetaria apenas gtk+ apps (eu não sou um cara KDE/Qt , então não tenho idéia de como alterar o comportamento de Qt apps).

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

    
por 09.01.2015 / 22:42

Tags