Método abreviado de teclado para pegar la selección principal

40

¿Existe un método abreviado de teclado estándar o convencional para pegar la selección principal?

Me gustaría seleccionar un texto e ir a otra aplicación para pegar sin tirar el contenido del portapapeles. Prefiero mantener mis dedos en el teclado que moverme hacia el mouse, buscar el puntero, colocarlo donde quiero y hacer clic con el botón central.

Si no hay nada convencional, o si es específico de la aplicación y no es compatible con muchos, ¿hay alguna solución para que esto funcione a nivel mundial? (O al menos en más aplicaciones).

Stefano Palazzo
fuente
2
Posible lo mismo cualquier distribución: unix.stackexchange.com/questions/11889/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
FWIW, puede pegar la selección principal desde el teclado (es decir, sin usar los botones del mouse) usando shift-insert, y copiar / pegar la selección del portapapeles usando ctrl-insert / ctrl-shift-insert
Jonathan Hartley
@ JonathanHartley para mí pastas de inserción de turno desde el portapapeles, no selección principal
jberryman

Respuestas:

32

Enviar teclas virtuales no funciona para mí (ver comentarios ), pero esa respuesta me inspiró a buscar soluciones similares. El envío de un evento de "texto" xvkbdignora el estado actual de su teclado físico:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textutiliza algunas secuencias de barra invertida, por lo que, en lugar de bailar con escape, -filefunciona. xvkbdtambién genera texto de advertencia sobre modificadores, pero parece ser irrelevante para este uso (pero no quería verlo ~/.xsession-errors).

Lo vinculé a un atajo usando Sistema> Preferencias> Atajos de teclado .

Tenga en cuenta que necesita tener instalados los paquetes xsel y xvkbd:

sudo apt-get install xsel xvkbd
Comunidad
fuente
3
¡Plátanos santos! ¡Funciona! Eso es genial. Ubuntu debería configurar esto por defecto.
Eric Johnson
8
Para mí, sh -c 'xsel | xvkbd -file - 2>/dev/null'funciona, -xsendevent tuvo que salir para que funcionara.
Sup
Por cierto, una vez más, tuve que asignar este comando a un atajo de tecla único (afortunadamente, el botón ThinkVantage no hace nada en mi Thinkpad: ctrl + alt + v se comportó de manera extraña y pegó solo una parte de lo que había xsel).
Sup
2
Esto funciona muy bien, excepto por dos problemas. (1) Uso un terminal desplegable (Guake) que configuré para ocultar el foco perdido. La ejecución de este script elimina el foco temporalmente del terminal, lo que hace que se oculte. (2) No funciona bien con caracteres UTF-8 caracteres de doble byte. por ejemplo, si selecciono "éòü", usando el script imprime "à © òü".
Sparhawk
2
Parece que el segundo error está adentro xvkbd. xselfunciona bien con "éòü" en la selección primaria, pero xvkbdfalla como el script anterior. (Y también falla xvkbd -text "éòü", aunque aquí no imprime nada.)
Sparhawk
7

Puede obtener esto con el uso combinado de los programas xdotool ( haga clic para instalar ) y xsel ( haga clic para instalar ).

xdotoolpuede simular escribir en una ventana; xselgenera el contenido de la selección PRIMARIA (por defecto); El siguiente revestimiento de Shell One hará el truco:

 xdotool type `xsel`

Para vincular esto a cualquier tecla usando el elemento del menú Sistema-> Preferencias-> Accesos directos del teclado , es necesario envolverlo en una invocación de shell:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

Escribir xdotoolno funcionará con algunos programas; vea las notas en la documentación de xdotool .

Riccardo Murri
fuente
Eso no funcionará a menos que el cuadro de texto activo y la posición del cursor estén en esa posición exacta, y ciertamente no lo están. De hecho, si esto cuenta el borde del administrador de ventanas, eso hará mi acción de "hacer clic con el botón central en el título de la ventana", que es completamente diferente.
@Roger Gracias, corrigió el texto. Tengo curiosidad por saber si hay una mejor manera de hacer esto: yo mismo he estado buscando una tecla "pegar" durante bastante tiempo ...
Riccardo Murri
Bueno, aprecio el esfuerzo, pero esto todavía no funcionará. Si quisiera preocuparme por la posición del mouse, simplemente usaría el mouse en primer lugar. :)
@Roger: Lo hice bien la segunda vez: xdotool + xsel lo hace. (Bueno, al menos funciona para mí.)
Riccardo Murri
2
Necesidades: opción clearmodifiers, de lo contrario, existe una condición de carrera entre la liberación del atajo de teclado y la ejecución de xdotool. El xdotool en los repositorios de 10.04 no está actualizado para esta opción, tuve que descargarlo y construirlo yo mismo. Sin embargo, --modmodifiers parece afectar de manera extraña a los modificadores, y no veo cómo, al final, hacer que xdotool funcione para mi atajo de teclado (aunque funciona muy bien para escribir texto virtualmente).
2

Llamar xdotool click --clearmodifiers 2simula hacer clic en el botón central del mouse. Esto funciona mucho mejor que usar xsel (al menos para mí). Aunque debe colocar el mouse antes de escribir ...

Robert Jakob
fuente
2

Otra sugerencia de xdotool, trabajando en Debian Jessie 8.7 (enero de 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool maneja cadenas de múltiples bytes (pe UTF-8), a diferencia de xvkbd.
  • xdotool clicksimula un clic real, por lo que no tiene que hacer clic para pegar en la posición del mouse, como lo hubiera hecho si usara xdotool type, o xvkbd.

El único problema es que --clearmodifiers"presionará" cualquier modificador (Ctrl / Alt / Shift / Meta) que use después de simular el clic. Incluso con --delay 0(en lugar de 12 ms), el comando tarda un poco en ejecutarse. Si suelta las teclas antes de que finalice, sus modificadores serán "presionados" nuevamente y se quedarán allí hasta que presione y suelte la tecla real una vez más.

Entonces, con esto, debes ser un poco "lento" (¿50 ms?) Para liberar tus modificadores, si estás usando alguno.

Puede probar esto configurando el atajo de teclado, usándolo en un editor de texto y luego presionando una tecla (como a, o una flecha). La letra debe aparecer en minúsculas. Si sucede algo más, eres demasiado rápido y un modificador está atascado (pe Shift si está en mayúsculas, Ctrl si seleccionaste todo el texto, Alt si abriste un menú). Presione y suelte sus modificadores nuevamente para restablecerlos.

Si eres demasiado rápido, puedes usar la sugerencia de ilkerk:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

Luego debe liberarlos en menos de 300 ms y esperar medio segundo para que aparezca el texto.

Además, usar xdotool typesignifica que inserta el texto como si estuviera escribiendo, en la posición del cursor de texto, y no con el puntero del mouse. Puede cambiarlo clicksi prefiere el comportamiento habitual de hacer clic con el botón central.

(hizo esta publicación para que los recién llegados no tengan que reconstruir las piezas del rompecabezas que se extendieron en los comentarios nuevamente)

Chema
fuente
funciona para mí en Arch Linux ahora
MountainX
1

Tuve problemas con las soluciones que simulan pegar la PRIMARYselección, por lo que agregué un acceso directo que copia la PRIMARYselección alCLIPBOARD . Después de usar mi método abreviado me pega la CLIPBOARDde la forma habitual, con Ctrl+V, Ctrl+Shift+Vo Shift+Insert, dependiendo de la aplicación.

El comando para copiar la PRIMARYselección al CLIPBOARDes

sh -c 'xsel --output --primary | xsel --input --cliboard'

a la que me ato Ctrl+Insert(elección arbitraria) en la configuración de acceso directo de Gnome enSystem Settings -> Devices -> Keyboard

Resumen de problemas con otras soluciones: probé las soluciones xsel | xvkbd ...y xsel | xdotool ..., pero descubrí que no funcionaban muy bien porque simulan escribir la PRIMARYselección carácter por carácter, lo que no es lo mismo que pegarlo con un clic central. Los problemas incluyen: hay un largo retraso mientras se inserta una gran selección de un carácter a la vez; si desea deshacer el "pegar", debe deshacerlo carácter por carácter, que es lento; si está usando "claves muertas", entonces todo se estropea, por ejemplo, "pegar" "eproduce ë; el xvkdbno maneja los caracteres unicode correctamente.

Advertencia: Esta solución sobrescribe los CLIPBOARDcontenidos existentes , pero el OP solicitó soluciones que preserven los CLIPBOARDcontenidos existentes .

ntc2
fuente
¿Esto guarda el contenido original del portapapeles y lo vuelve a configurar después? ¿O descarta el contenido original del portapapeles, por lo que no se puede " pegar sin destrozar el contenido de mi portapapeles " de la pregunta?
Xen2050
@ Xen2050 sí, esto destruye el CLIPBOARD. Agregaré una nota a la respuesta.
ntc2
0

Tuve el mismo problema y la búsqueda en Internet no me ayudó mucho. El problema que simula el clic 2 es molesto como OP mencionado.

El problema con lo propuesto anteriormente xdotooly xsel es que cuando xdotoolcomienza a "escribir" todavía está presionando otra tecla. Eso no siempre resulta con ninguna salida. Por ejemplo, si lo vincula a la tecla "insertar", entonces xdotoolestá enviando teclas mientras su dedo está presionando la tecla "insertar", lo que no causa nada.

A continuación hay una solución alternativa, para vincularlo a una tecla presionada:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

No es perfecto pero funciona. ahora tiene 0.3 segundos para finalizar su selección de pulsación de tecla (y tecla arriba).

ilkerk
fuente