Raccourci clavier pour coller la sélection principale

40

Existe-t-il un raccourci clavier standard ou conventionnel pour coller la sélection principale?

Je voudrais sélectionner du texte et aller dans une autre application à coller sans supprimer le contenu du presse-papiers. Je préfère garder les doigts sur le clavier que de passer à la souris, de rechercher le pointeur, de le placer où je veux et de cliquer avec le bouton du milieu.

S'il n'y a rien de conventionnel, ou si cela dépend de l'application et n'est pas pris en charge par beaucoup, existe-t-il une solution de contournement pour que cela fonctionne dans le monde entier? (Ou du moins dans plusieurs applications.)

Stefano Palazzo
la source
2
Possible meme n'importe quelle distribution: unix.stackexchange.com/questions/11889/…
Ciro Santilli a écrit
FWIW, vous pouvez coller la sélection principale à partir du clavier (c.-à-d. Sans utiliser les boutons de la souris) en utilisant Maj-Inser, puis copier / coller la sélection dans le Presse-papiers en utilisant ctrl-insert / ctrl-Maj-insert
Jonathan Hartley
@JonathanHartley pour moi shift-insert pâtes dans le presse-papiers n'est pas la sélection primaire
jberryman

Réponses:

32

L'envoi de pressions de touche virtuelles ne fonctionne pas pour moi (voir commentaires ), mais cette réponse m'a incité à rechercher des solutions similaires. L'envoi d'un événement "texte" avec xvkbdignore l'état actuel de votre clavier physique:

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

xvkbd -textutilise quelques séquences de barres obliques inverses, donc plutôt que de danser avec échapper, -filefonctionne. xvkbdaffiche également un texte d'avertissement sur les modificateurs, mais il semble ne pas être pertinent pour cette utilisation (mais je ne voulais pas le voir dans ~/.xsession-errors).

J'ai lié cela à un raccourci en utilisant Système> Préférences> Raccourcis clavier .

Notez que vous devez installer les packages xsel et xvkbd:

sudo apt-get install xsel xvkbd
Communauté
la source
3
Bananes sacrées! Ça marche! C'est génial. Ubuntu devrait configurer ceci par défaut.
Eric Johnson
8
Pour moi, ça sh -c 'xsel | xvkbd -file - 2>/dev/null'marche, -xsendevent a dû sortir pour que ça fonctionne.
Sup
En passant, encore une fois, j'ai dû attribuer cette commande à un raccourci clavier unique (heureusement, j'ai le bouton ThinkVantage qui ne fait rien sur mon Thinkpad - ctrl + alt + v se comporte étrangement et n'a collé qu'une partie de son contenu xsel).
Sup
2
Cela fonctionne très bien sauf pour deux problèmes. (1) J'utilise un terminal à menu déroulant (Guake) que je souhaite masquer en cas de perte de focus. L'exécution de ce script supprime temporairement le focus du terminal, ce qui le cache. (2) Cela ne traite pas bien les caractères codés sur deux octets des caractères UTF-8. Par exemple, si je sélectionne "éòü", le script affiche "à © üÃ".
Sparhawk
2
Il semble que le deuxième bogue soit en jeu xvkbd. xselfonctionne bien avec "éòü" dans la sélection primaire, mais xvkbdéchoue comme le script ci-dessus. (Et échoue également avec xvkbd -text "éòü", bien qu'ici, il n'imprime rien.)
Sparhawk
7

Vous pouvez obtenir ceci en combinant les programmes xdotool ( cliquez pour installer ) et xsel ( cliquez pour installer ).

xdotool peut simuler la frappe dans une fenêtre; xselaffiche le contenu de la sélection PRIMARY (par défaut); la coquille suivante une doublure fera l'affaire:

 xdotool type `xsel`

Pour lier ceci à n’importe quelle clé en utilisant le élément de menu Système-> Préférences-> Raccourcis clavier , il est nécessaire de l'envelopper dans un appel de shell:

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

Taper dans xdotoolne fonctionnera pas avec certains programmes; voir les notes dans la documentation de xdotool .

Riccardo Murri
la source
Cela ne fonctionnera que si la zone de texte active et la position du curseur se trouvent exactement à cette position, ce qui n'est certainement pas le cas. En fait, si cela compte le bord du gestionnaire de fenêtres, cela fera mon "clic du milieu sur le titre de la fenêtre", ce qui est complètement différent.
@ Roger Merci, corrigé le texte. Je suis curieux de savoir s'il existe un meilleur moyen de procéder: je cherche moi-même une clé "coller" depuis un certain temps ...
Riccardo Murri
Bien, j'apprécie l'effort, mais cela ne fonctionnera toujours pas. Si je voulais m'inquiéter de la position de la souris, j'utiliserais simplement la souris en premier lieu. :)
@Roger: Je l'ai corrigé pour la deuxième fois: xdotool + xsel le fait. (Enfin, ça marche au moins pour moi.)
Riccardo Murri
2
Nécessite l'option --clearmodifiers, sinon il existe une condition de concurrence critique entre la libération du raccourci clavier et l'exécution de xdotool. Le xdotool dans le dépôt de 10.04 n'est pas mis à jour pour cette option, j'ai dû le télécharger et le construire moi-même. Cependant, --clearmodifiers semble étrangement affecter les modificateurs, et je ne vois pas comment faire en sorte que xdotool fonctionne pour mon raccourci clavier (bien que cela fonctionne très bien pour taper du texte virtuellement).
2

L'appel xdotool click --clearmodifiers 2simule un clic sur le bouton central de la souris. Cela fonctionne beaucoup mieux que d'utiliser xsel (du moins pour moi). Bien que vous deviez positionner votre souris avant de taper ...

Robert Jakob
la source
2

Une autre suggestion de xdotool, travaillant dans Debian Jessie 8.7 (Jan 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool gère les chaînes multi-octets (pe UTF-8), contrairement à xvkbd.
  • xdotool clicksimule un clic réel, de sorte que vous ne devez pas cliquer vous-même pour coller à la position de la souris, comme vous le feriez si vous xdotool typeutilisiez, ou xvkbd.

Le seul problème est que vous --clearmodifiers"appuyez" sur tout modificateur (Ctrl / Alt / Maj / Meta) que vous utilisez après avoir simulé le clic. Même avec--delay 0 (au lieu de 12ms), la commande prend un peu à exécuter. Si vous relâchez les touches avant la fin, vos modificateurs seront à nouveau "pressés" et collés jusqu'à ce que vous appuyiez et relâchiez la touche une fois de plus.

Donc, avec cela, vous devez être un peu "lent" (50ms?) Pour libérer vos modificateurs, si vous en utilisez.

Vous pouvez le tester en configurant votre raccourci clavier, en l’utilisant dans un éditeur de texte, puis en appuyant sur une touche (comme a ou une flèche). La lettre doit apparaître en minuscule. Si quelque chose d'autre se produit, vous êtes trop rapide et un modificateur est bloqué (pe Shift s'il est en majuscule, Ctrl si vous avez sélectionné tout le texte, Alt si vous avez ouvert un menu). Appuyez et relâchez à nouveau vos modificateurs pour les réinitialiser.

Si vous êtes trop rapide, vous pouvez utiliser la suggestion de ilkerk:

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

Ensuite, vous devez les libérer en moins de 300 ms et attendre une demi-seconde que le texte apparaisse.

De plus, utiliser xdotool typesignifie que vous insérez le texte comme si vous tapiez, à la position du curseur de texte et non au pointeur de la souris. Vous pouvez le changer clicksi vous préférez le comportement habituel du clic central.

(fait cet article pour que les nouveaux arrivants n'aient pas à reconstituer les pièces du puzzle dispersées dans les commentaires)

Chema
la source
fonctionne pour moi dans Arch Linux maintenant
MountainX
1

J'ai eu des problèmes avec les solutions qui simulent le collage de la PRIMARYsélection. J'ai donc ajouté un raccourci qui permet de copier la PRIMARYsélection dans le fichierCLIPBOARD . Après avoir utilisé mon raccourci je colle la CLIPBOARDde la manière habituelle, avec Ctrl+V, Ctrl+Shift+Vou Shift+Insert, selon l'application.

La commande pour copier la PRIMARYsélection dans le fichier CLIPBOARDis

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

que je lie à Ctrl+Insert(choix arbitraire) dans les paramètres de raccourci Gnome sousSystem Settings -> Devices -> Keyboard

Résumé des problèmes avec d' autres solutions: J'ai essayé les xsel | xvkbd ...et xsel | xdotool ...solutions, mais a constaté qu'ils ne fonctionnaient pas très bien parce qu'ils simulent en tapant le PRIMARYcaractère de sélection par caractère, ce qui est le même que coller avec milieu clic. Les problèmes incluent: il y a un long délai pendant lequel une sélection importante est insérée un caractère à la fois; si vous voulez annuler le "coller", vous devez l'annuler caractère par caractère, ce qui est lent; si vous utilisez des "clés mortes", tout est brouillé, par exemple le "collage" "eproduit ë; le xvkdbne gère pas les caractères unicode correctement.

Avertissement: cette solution écrase le CLIPBOARDcontenu existant , mais l'OP a demandé des solutions préservant le CLIPBOARDcontenu existant .

ntc2
la source
Est-ce que cela enregistre le contenu d'origine du presse-papiers et le redéfinit par la suite? Ou est-ce qu'il supprime le contenu d'origine du presse-papiers, empêchant ainsi la partie " de coller sans supprimer le contenu de mon presse-papiers " de la question?
Xen2050
@ Xen2050 oui, cela détruit le CLIPBOARD. Je vais ajouter une note à la réponse.
ntc2
0

J'ai eu le même problème et la recherche sur Internet ne m'a pas beaucoup aidé. Le problème simulant le clic 2 est gênant comme l'OP mentionné.

Le problème avec ce qui est proposé ci-dessus xdotoolet xsel, c’est quand vous xdotoolcommencez à "taper" que vous appuyez toujours sur une autre touche. Cela ne résulte pas toujours avec une sortie. Par exemple, si vous le liez à la touche "Insérer", il xdotoolenvoie des clés pendant que votre doigt appuie sur la touche "Insérer", ce qui ne cause rien.

Vous trouverez ci-dessous une solution de contournement pour la relier à une touche:

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

ce n'est pas parfait mais ça marche. vous avez maintenant 0,3 seconde pour terminer votre sélection de touche (et touche suivante).

ilkerk
la source