¿Por qué Shift + Insert pegar desde CLIPBOARD en algunas aplicaciones y PRIMARY en otras?

29

¿Cómo pego desde la selección PRIMARIA (por ejemplo, texto seleccionado con el mouse) con un atajo de teclado? Shift+Insertpega inconsistentemente desde PRIMARY o CLIPBOARD, dependiendo de la aplicación.

Fondo:

Ctrl+Ccopia el texto seleccionado a CLIPBOARD mientras que la selección del mouse copia a PRIMARY. Pegue de CLIPBOARD con Ctrl+Vy pegue de PRIMARY con mouse-middle-click.

En un emulador de terminal (gnome-terminal), pegue desde CLIPBOARD con Ctrl+Shift+V. (Pegar desde PRIMARIO con mouse-middle-clickalambique).

Quiero pegar desde PRIMARY con un atajo de teclado. En gnome-terminal, esto es Shift+Insert, pero en gedit y Firefox, se Shift+Insertpega desde CLIPBOARD. Quiero un atajo que pegue constantemente desde CLIPBOARD y un atajo diferente que pegue consistentemente desde PRIMARY.

Estoy ejecutando Ubuntu 14.04 con xmonad y Firefox 34.0

reajustar
fuente

Respuestas:

30

Todas las aplicaciones que ha mencionado son gtk+aplicaciones, por lo que es bastante fácil responder Por qué ... Porque en todas las gtk+ aplicaciones ( excepto una ), Shift+ Insertpega desde CLIPBOARD, es decir, es equivalente a Ctrl+ V. El acceso directo está codificado en gtkentry.c(línea 2022) y gtktextview.c(línea 1506):

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

También está documentado en el Manual de referencia de GTK + 3 en 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.

Hasta donde yo sé, esto se hizo para mantener la coherencia con otros DE (consulte KDElos Qtenlaces de teclas en QTextEdit Class) y Windows OS 1 .
La única excepción es gnome-terminal. Después de largos debates, los desarrolladores han decidido (por coherencia con otros terminales) que, en gnome-terminal, Shift+ Insertdebería pegar desde PRIMARY y Ctrl+ Shift+ Vdebería pegar desde CLIPBOARD (aunque tiene las opciones para personalizar algunos accesos directos).


En cuanto a cómo pegar la selección con un atajo de teclado ... no hay una forma sencilla.

La forma más fácil es asignar un acceso directo a un script que se ejecuta xdotool click 2(simula hacer clic en el botón central del mouse). Si bien esto funciona (y debería funcionar con todos o la mayoría de los DE y kits de herramientas), solo funciona si el cursor del mouse está realmente sobre el cuadro de entrada de texto, de lo contrario falla.

Otra forma relativamente fácil es a través de Accesibilidad Gnome, si está disponible en su sistema. También requiere la presencia de un teclado numérico. Ve a Universal Access>> Pointing & Clickingy habilita Mouse Keys. Asegúrate de que NumLockesté apagado. Luego puede usar las teclas del teclado numérico para mover el cursor y hacer clic. Para simular un clic en el botón central del mouse, presione (y suelte) *(asterisco) y luego presione 5(aquí hay una guía breve ). Esta solución parece funcionar siempre en un gtk+entorno. La desventaja es que requiere Gnome Accessibilityy un teclado numérico. Además, no puede personalizar el acceso directo.

Se propuso una solución interesante en gnome-bugzilla (bug 643391) . (Actualización 2018: el problema ahora se ha movido aquí .) Requiere parchear algunos archivos fuente y configurar las opciones de configuración en ~/.config/gtk-3.0/gtk.css(o ~/.gtkrc-2.0para gtk+2 aplicaciones). No lo he probado personalmente, pero los comentarios son positivos.

Idealmente, debería parchear los archivos fuente y definir una "paste-selection"señal y luego vincular Shift+ Inserta en "paste-selection"lugar de "paste-clipboard". El código de Andy (adjunto en el informe de error vinculado anteriormente) podría servir como guía sobre cómo hacerlo. Incluso entonces, solo afectaría a las gtk+aplicaciones (no soy un KDE/Qtchico, así que no tengo idea de cómo alterar el Qtcomportamiento de las aplicaciones).


1: (sin mencionar el CUA de IBM)

don_crissti
fuente
2
Gracias por esa explicación Es una pena que no exista una mejor solución, echo mucho de menos un atajo de teclado constante para PRIMARY. La solución alternativa de emulación del mouse no ayuda mucho, ya que el objetivo del atajo es evitar tener que lidiar con el mouse.
didi_X8
1

Lo siento: no puedo escribir comentarios debido a la reputación, así que escribo como respuesta. No es una solución directa, pero me ayuda ...

Puede usar la combinación de información:

  1. Edite el tema gtk y permita la combinación de teclas como desee .

  2. Ejemplo de creación de atajos de teclado gtk 3.0 en CSS del tema .

  3. Ejemplo de anulación de combinaciones de teclas gtk y unbind .

  4. Ejemplo de modificación de la combinación de teclas para gnome-terminal

  5. Inicio automático de autocutsel con opciones predeterminadas para sincronizar CLIPBOARD a CUTBUFFER (esto es opcional). Este enlace es solo para información sobre el problema.

  6. Utilice clipman para acceder a múltiples memorias intermedias (PRIMARY y CLIPBOARD), sin selecciones de sincronización automática (la sincronización automática bidireccional es incorrecta).

Así que solo selecciono el tema gtk y modifico el CSS del tema a las combinaciones de teclas necesarias para las señales de copiar-portapapeles (Ctrl + Insertar) y pegar-portapapeles (Shift + Insertar).

usuario1742529
fuente
1
Este podría ser el comienzo de una buena respuesta, si toma el contenido de esos enlaces y combina la información. Tal como está, es solo una colección de enlaces, y eso lo pone en riesgo de ser eliminado. Complete la información para que esté directamente en la respuesta, y estoy seguro de que obtendrá votos a favor (lo que le dará suficiente reputación para comentar). ¡Gracias!
Toby Speight