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

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

Como colar a partir da seleção PRIMÁRIA (por exemplo, texto selecionado com o mouse) com um atalho de teclado? Shift+Insertcola inconsistentemente de PRIMARY ou CLIPBOARD, dependendo do aplicativo.

Fundo:

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

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

Quero colar do PRIMARY com um atalho de teclado. No gnome-terminal, é Shift+Insert, mas no gedit e no Firefox, Shift+Insertcola 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

Responder1

Todos os aplicativos que você mencionou são gtk+aplicativos, então é muito fácil responderPor que... Porque emtodos gtk+aplicativos (excepto um), Shift+ Insertcola do CLIPBOARD - ou seja, é equivalente a Ctrl+ V. O atalho está codificado emgtkentry.c(linha 2022) egtktextview.c(linha 1819):

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

Também está documentado noManual de Referência GTK + 3sobGtkEntry:

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.

Pelo que eu sei, isso foi feito para consistência com outros DEs (veja KDEas Qtcombinações de teclas emQTextEdit Class) e sistema operacional Windows 1 .
Oúnica exceçãoé gnome-terminal. Após longos debates, os desenvolvedores decidiram (para consistência com outros terminais) que, em gnome-terminal, Shift+ Insertdeveria colar de PRIMARY e Ctrl+ Shift+ Vdeveria colar de CLIPBOARD (embora você tenha a opção de personalizar alguns atalhos).


Quanto aComovocê 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 executado xdotool click 2(simula um clique com o botão do meio do mouse). Embora isso funcione (e deve funcionar com todos ou a maioria dos DEs e kits de ferramentas), só funciona se o cursor do mouse estiver realmente sobre a caixa de entrada de texto, caso contrário, falhará.

Outra maneira relativamente fácil é através do Gnome Accessibility, se estiver disponível em seu sistema. Também requer a presença de um teclado numérico. Vá para Universal Access>> Pointing & Clickinge habilite Mouse Keys. Certifique-se NumLockde que esteja desligado. Você pode então 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 depois pressione 5(aqui está um breveguia). Esta solução parece sempre funcionar em um gtk+ambiente. A desvantagem é que requer Gnome Accessibilityum teclado numérico. Além disso, você não pode personalizar o atalho.

Uma solução interessante foi proposta emgnome-bugzilla (bug 643391). (Atualização 2018: o problema foi movidoaqui.) Requer corrigir alguns arquivos de origem e definir opções de configuração em ~/.config/gtk-3.0/gtk.css(ou ~/.gtkrc-2.0para gtk+2 aplicativos). Não experimentei pessoalmente, mas o feedback é positivo.

Idealmente, você corrigiria os arquivos de origem e definiria um "paste-selection"sinal e, em seguida, vincularia Shift+ Inserta "paste-selection"em vez de "paste-clipboard". O código de Andy (anexado no relatório de bug acima) pode servir como um guia sobre como fazer isso. Mesmo assim, isso afetaria apenas gtk+os aplicativos (não sou um KDE/Qtcara, então não tenho ideia de como alterar Qto comportamento dos aplicativos).


1: (sem mencionar o CUA da IBM)

Responder2

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

Você pode usar uma 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 atalhos de teclado gtk 3.0 em css do tema.

  3. Exemplo de substituição de atalhos de teclado gtk e desvinculação.

  4. Exemplo de modificação de atalho de teclado para gnome-terminal

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

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

Então, apenas seleciono o tema gtk e modifico o CSS do tema para os atalhos de teclado necessários para os sinais copiar-área de transferência (Ctrl+Insert) e colar-área de transferência (Shift+Insert).

informação relacionada