Pegar la selección X (no el contenido del portapapeles) con el teclado

84

Me gustaría poder pegar la selección X usando el teclado. Actualmente tengo que usar el botón central del mouse para hacer esto.

Entiendo que fingir presionar un botón central del mouse es bastante fácil de hacer, pero tal solución también requeriría mover el puntero del mouse a la ubicación del cursor de texto.

¿Hay una mejor manera de hacer esto?

intuido
fuente
2
Posible lo mismo para Ubuntu: askubuntu.com/questions/7769/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

93

En algunas configuraciones predeterminadas de Linux, Shift+ Insertrealizará un X-selection-paste. Como notó, esto es claramente diferente del X-clipboard-pastecomando, cuyo enlace a menudo varía según la aplicación. Si eso no funciona, hay otras claves para probar:

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

¿No vayas? Su entorno de escritorio o administrador de ventanas probablemente no los tiene configurados, y es complicado porque, incluso bajo el banner de un DE o WM, cada kit de herramientas (por ejemplo, GTK, Qt, Etc.) puede tener enlaces predeterminados diferentes. Algunos programas (por ejemplo gvim) incluso tienen sus propios registros internos de copia que no están necesariamente sincronizados con el entorno gráfico en el que se ejecutan. Para colmo, incluso cuando un programa usa el sistema X-portapapeles, X tiene múltiples sistemas para elegir. Los dos más básicos son el búfer de selección, que siempre tiene lo que sea lo último que se seleccionó (execpt cuando no lo tiene), y el búfer de copia, en el que generalmente deben copiarse las cosas. Para hacer una copia explícita en el último sistema, puede probar cualquiera de estos por tamaño:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


Si nada de eso funciona mágicamente para usted, hay dos maneras de hacerlo.

  1. ¡Hay una aplicación para eso! ™ Use uno de los diversos programas de administrador de portapapeles para manejar esto por usted. Los más populares parecen ser Parcellite y Glippy , pero puede consultar otras alternativas aquí . Consulte también esta pregunta sobre administradores avanzados de portapapeles

  2. Hackéalo tú mismo.

Entonces, digamos que quieres hackearlo.

A falta de escribir su propio código y aprovechar la API X, las herramientas de hackers para el trabajo son un par de pequeñas utilidades de línea de comando que le dan una ventana a la mente de X. Solo una pequeña ventana, la vista completa da demasiado miedo .

La primera herramienta es xsel. Este pequeño trabajador escupirá lo que sea que esté en el búfer de selección de X en cualquier momento dado.

Ahora necesita incluir eso en su programa. Hay dos opciones para esto. Una es la xdotoolque le permite imitar el envío de eventos al sistema de entrada Xorg. Se puede utilizar de tipo método como xdotool type foo_bara la tipificación mímica 'foo_bar' en el cursor. Combinado, obtienes algo como esto:

$ xdotool type $(xsel)

El otro es el xvkbdque envía eventos de teclado desde un subsistema inferior. Puede canalizar pulsaciones de teclas en STDIN. Combinado con xsel, obtienes algo como esto:

$ xsel | xvkbd -xsendevent -file -

Excelente. Ahora para que la combinación de teclas ejecute estas cosas. Si ejecuta Gnome-2, puede agregar un atajo personalizado en Sistema -> Preferencias -> Atajos de teclado . Si utiliza un DE o WM diferente, este ejercicio se deja al lector.

La última nota es que cuando se vinculan comandos a métodos abreviados de teclado, a menudo es necesario tener solo un comando, no dos comandos conectados con una tubería como usamos anteriormente. Puede lograr esto invocando su comando canalizado como una cadena de comando argumetn a un nuevo shell como este:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'
Caleb
fuente
1
Definitivamente califica como "mejor". ¡Gracias!
intuido
¿En que aplicacion? Ninguna de las aplicaciones que uso a menudo se comporta así.
Gilles
Estoy usando Ubuntu, y realmente me gustaría Shift-Inserttener un uso práctico, pero simplemente no lo es (en Ubuntu). La única "consistencia (+/-)" que he encontrado es que una X- La selección en las aplicaciones GTK se puede insertar con mayúsculas en una gnome-terminal, pero es bastante impredecible para cualquier otra combinación de pegado cruzado de estas mismas aplicaciones ... Las pocas aplicaciones KDE que uso (incluida Konsole), simplemente no pegar en forma cruzada ... e incluso en las aplicaciones GTK, hacer clic con el botón central puede funcionar, pero Mayús + Insertar puede no funcionar (para la misma aplicación) ... Así que uso el mouse :(
Peter.O
No existe tal cosa como un "enlace de nivel X". Podría ser algo que hacen las aplicaciones que usa, o algo que hace su administrador de ventanas o entorno de escritorio. Dudo que sea específico de una distribución.
Gilles
1
Creo que un enfoque fácil es vincular el atajo de teclado para enviar un evento de clic medio. Para mí, eso es xdotool click 2.
Carga inductiva
10

Aparentemente, Shift+ Insertpuede no funcionar correctamente en algunas instalaciones de GTK 3, al menos en FreeBSD. El problema se describe como:

Shift-Insert no está pegando la selección primaria. En cambio, está obligado a pegar el portapapeles (para el cual Control-V ya está en uso). Por lo tanto, no hay una forma solo de teclado para insertar la selección primaria. Hay que arrastrar el mouse hasta allí y hacer clic con el botón central. Esto hace que la interacción entre terminales y GTK sea incómoda.

Un informe reciente (a partir de este escrito) y un parche están disponibles:

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

Michael Danilov
fuente
8
xdotool click 2

Esto simula el clic del botón del mouse directamente y no requiere usar xsel/ xdotool type ....

azulado
fuente
1
Esto requiere posicionar el mouse correctamente, por lo que bien podría usar el botón del mouse. Sin embargo, si hubiera alguna forma de ajustar el mouse al cursor, esto podría ser parte de una respuesta (dudo que la haya)
jberryman
2

Estoy usando Ubuntu 12 y estaba teniendo problemas para pegar texto de xterm en gedit (y cualquier otra aplicación). Además, utilizo una computadora portátil sin botón central del mouse como muchas personas (realmente no hay piedad del portapapeles para usuarios de Linux sin botones centrales, y no: hacer clic con el botón derecho + left_click no funciona como un sustituto).

Si bien creo que el método "xsel | xvkbd -xsendevent -file -" es bastante bueno. Encontré que la solución más simple era ejecutar el "gnome-terminal" preinstalado en lugar de "xterminal". "gnome-terminal" admite un comando de copiar con el botón derecho al portapapeles. Entonces podría "Editar menú-> Pegar" en gedit o usar shift-insert. "gnome-terminal" vino preinstalado con Ubuntu 12. Otras instalaciones debian / gnome deberían poder instalarlo a través de:

sudo apt-get install gnome-terminal

En Ubuntu, agréguelo al iniciador izquierdo haciendo clic en el botón "Inicio del tablero" en la parte superior de la barra del iniciador. En el cuadro de búsqueda resultante, escriba terminal. Puedes arrastrar el ícono "Terminal" a la barra de inicio.

Ryan Woodard
fuente
2
Esta es una solución muy pobre. Realmente no puede sugerir a las personas que cambien a un terminal diferente, especialmente uno que extraiga 100 MB + de gnome-shell como dependencia. Esto tampoco hace que funcione con ninguna otra aplicación, y lo peor de todo esto aún requiere el uso de un mouse para funcionar.
pfrenssen