Coller la sélection X (pas le contenu du presse-papiers) avec le clavier


84

J'aimerais pouvoir coller la sélection X à l'aide du clavier. Actuellement, je dois utiliser le bouton central de la souris pour le faire.

Je suppose que faire semblant d'appuyer sur le bouton central de la souris est assez facile à faire, mais une telle solution nécessiterait également de déplacer le pointeur de la souris sur l'emplacement du curseur d'insertion.

Y a-t-il une meilleure manière de faire cela?


Réponses:


93

Sur certaines configurations linux par défaut, Shift+ Inserteffectuera un X-selection-paste. Comme vous l'avez noté, il s'agit d'une commande distincte X-clipboard-paste, dont la liaison varie souvent d'une application à l'autre. Si cela ne fonctionne pas, voici quelques autres clés à essayer:

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

Ne pas aller? Votre environnement de bureau ou votre gestionnaire de fenêtres ne les ont probablement pas configurés, ce qui est compliqué parce que, même sous la bannière d'un DE ou WM, chaque boîte à outils (GTK, Qt, etc., par exemple) peut avoir des liaisons par défaut différentes. Certains programmes (par exemple gvim) ont même leurs propres registres de copie internes qui ne sont pas nécessairement synchronisés avec l'environnement graphique dans lequel ils s'exécutent. Pour couronner le tout, même lorsqu'un programme utilise le système X-clipboard, X a le choix entre plusieurs systèmes. Les deux éléments les plus élémentaires sont le tampon de sélection (qui contient toujours la dernière chose sélectionnée (sauf si ce n'est pas le cas)) et le tampon de copie, dans lequel les éléments doivent généralement être copiés. Pour faire une copie explicite dans ce dernier système, vous pouvez essayer n’importe lequel d’entre eux:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


Si rien de tout cela ne fonctionne comme par magie pour vous, vous pouvez y aller de deux manières.

  1. Il y a une application pour ça! ™ Utilisez l’un des différents programmes de gestion du Presse-papiers pour gérer cela à votre place. Les plus populaires semblent être Parcellite et Glippy , mais vous pouvez consulter d' autres alternatives ici . Voir aussi cette question sur les gestionnaires de presse-papiers avancés

  2. Hack-le vous-même.

Alors disons que vous voulez le pirater.

En plus d'écrire votre propre code et de puiser dans l'API X, les outils de piratage pour le travail sont quelques petits utilitaires de ligne de commande qui vous donnent une fenêtre sur l'esprit de X. Juste une petite fenêtre à votre attention, la vue d'ensemble est trop effrayante. .

Le premier outil est xsel. Ce petit revendeur crache tout ce qui se trouve dans la mémoire tampon de sélection de X à un moment donné.

Maintenant, vous devez intégrer cela dans votre programme. Il y a deux options pour cela. L'une consiste xdotoolà vous permettre d'imiter l'envoi d'événements au système de saisie Xorg. Vous pouvez l' utiliser de Type méthode comme xdotool type foo_barde taper mimique « de foo_bar » au niveau du curseur. Combiné, vous obtenez quelque chose comme ceci:

$ xdotool type $(xsel)

L'autre est celui xvkbdqui envoie les événements de clavier à partir d'un sous-système inférieur. Vous pouvez y insérer des frappes sur STDIN. Combiné avec xsel, vous obtenez quelque chose comme ceci:

$ xsel | xvkbd -xsendevent -file -

Génial. Maintenant, pour que le raccourci clavier fonctionne. Si vous exécutez Gnome-2, vous pouvez ajouter un raccourci personnalisé dans Système -> Préférences -> Raccourcis clavier . Si vous utilisez un DE ou WM différent, cette taille est laissée au lecteur.

La dernière remarque est que lorsque vous liez des commandes à des raccourcis clavier, il est souvent nécessaire d’avoir une seule commande, pas deux commandes reliées par un tuyau comme nous l’avons utilisé ci-dessus. Vous pouvez accomplir cela en appelant votre commande piped en tant que chaîne de commande argumetn dans un nouveau shell comme celui-ci:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'

1
Qualifie certainement comme "meilleur". Merci!
Intuition le

Dans quelle application? Aucune des applications que j'utilise ne se comporte souvent de la sorte.
Gilles

J'utilise Ubuntu et j'aimerais vraiment Shift-Insertavoir une quelconque utilité pratique, mais ce n'est tout simplement pas le cas (sous Ubuntu). La seule "cohérence (+/-)" que j'ai trouvée est qu'un X- La sélection dans les applications GTK peut être insérée de manière décalée dans un fichier gnome-terminal, mais elle est plutôt aléatoire pour toute autre combinaison de collage de ces mêmes applications ... Les quelques applications KDE que j'utilise (y compris Konsole) ne le font tout simplement pas. Croix-coller du tout .... et même dans les applications GTK, centre-clic peut fonctionner, mais Maj + Inser peut ne pas (pour la même application) ... Donc, j'utilise la souris :(
Peter.O

Il n’existe pas de «liaison de niveau X». Cela peut être quelque chose que les applications que vous utilisez font, ou quelque chose que votre gestionnaire de fenêtres ou votre environnement de bureau fait. Je doute que cela soit spécifique à une distribution.
Gilles

1
Je trouve une approche facile consiste à lier le raccourci clavier à l'envoi d'un événement de clic intermédiaire. Pour moi, c'est xdotool click 2.
Inductiveload

10

Apparemment, Shift+ Insertpourrait ne pas fonctionner correctement sur certaines installations de GTK 3, du moins sur FreeBSD. Le problème est décrit comme suit:

Shift-Insert ne colle pas la sélection primaire. Au lieu de cela, il est tenu de coller le presse-papiers (pour lequel Control-V est déjà utilisé). Par conséquent, il n'y a pas de moyen uniquement clavier pour insérer une sélection primaire. Il faut y glisser la souris et cliquer au milieu. Cela rend l’interaction entre les terminaux et GTK inconfortable.

Un rapport de bogue et un correctif récents (au moment de la rédaction de cet article) sont disponibles:

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


8
xdotool click 2

Ceci simule directement le clic du bouton de la souris et ne nécessite pas l’utilisation de xsel/ xdotool type ....


1
Cela nécessite de positionner correctement la souris, vous pouvez donc également utiliser le bouton de la souris. S'il y avait un moyen de faire glisser la souris sur le curseur, cela pourrait faire partie de la réponse (je doute qu'il en soit ainsi)
jberryman

2

J'utilise Ubuntu 12 et je rencontrais un problème pour coller du texte de xterm dans gedit (et dans toute autre application). En outre, j'utilise un ordinateur portable sans bouton central comme beaucoup de gens (il n'y a vraiment aucune pitié dans le presse-papiers pour les utilisateurs de Linux sans boutons du milieu, et non: un clic droit + un clic gauche ne fonctionne pas comme substitut).

Bien que je pense que la méthode "xsel | xvkbd -xsendevent -file -" est plutôt cool. J'ai trouvé que la solution la plus simple consistait à exécuter le "gnome-terminal" préinstallé au lieu de "xterminal". "gnome-terminal" prend en charge une commande de copie dans le presse-papier par clic droit. Je pourrais alors "Éditer Menu-> Coller" dans gedit ou utiliser shift-insert. "gnome-terminal" est préinstallé avec Ubuntu 12. Les autres installations Debian / gnome devraient pouvoir l'installer via:

sudo apt-get install gnome-terminal

Dans Ubuntu, ajoutez-le au lanceur de gauche en cliquant sur le bouton "Dash Home" en haut de la barre de lancement. Dans la zone de recherche résultante, tapez terminal. Vous pouvez faire glisser l'icône "Terminal" dans la barre de lancement.


2
C'est une très mauvaise solution. Vous ne pouvez pas vraiment suggérer aux gens de passer à un autre terminal, en particulier celui qui utilisera plus de 100 Mo de gnome-shell comme dépendance. Cela ne le fait pas non plus fonctionner avec une autre application, et le pire de tout cela nécessite toujours l'utilisation d'une souris pour fonctionner.
pfrenssen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.