web-dev-qa-db-fra.com

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

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

Je suppose que simuler une pression 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 à l'emplacement du curseur de texte.

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

86
intuited

Sur certaines configurations Linux par défaut, Shift+Insert effectuera un X-selection-paste. Comme vous l'avez noté, ceci est distinctement différent du X-clipboard-paste, dont la liaison varie souvent selon l'application. 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 a probablement pas configurés, et c'est compliqué parce que - même sous la bannière d'un DE ou WM - chaque boîte à outils (par exemple GTK, Qt, Etc.) peut bien 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 plusieurs systèmes à choisir. Les deux plus basiques 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 choses doivent généralement être spécifiquement copiées. Pour faire une copie explicite dans ce dernier système, vous pouvez essayer l'une de ces options pour la taille:

  • Ctrl+C

  • Shift+Ctrl+C

  • Ctrl+Insert


Si rien de tout cela ne fonctionne comme par magie pour vous, il y a deux façons de procéder.

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

  2. Hack it yourself.

Disons donc que vous voulez le pirater.

À moins 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. .

Le premier outil est xsel. Ce petit jobber crachera tout ce qui se trouve dans le tampon de sélection de X à tout moment.

Vous devez maintenant intégrer cela à votre programme. Il y a deux options pour cela. L'un est xdotool qui vous permet d'imiter l'envoi d'événements au système d'entrée Xorg. Vous pouvez utiliser sa méthode de type comme xdotool type foo_bar pour imiter la saisie de 'foo_bar' au niveau du curseur. Combiné, vous obtenez quelque chose comme ceci:

$ xdotool type $(xsel)

L'autre est xvkbd qui envoie les événements clavier à partir d'un sous-système inférieur. Vous pouvez y injecter des touches sur STDIN. Combiné avec xsel, vous obtenez quelque chose comme ceci:

$ xsel | xvkbd -xsendevent -file -

Génial. Maintenant, pour que le raccourci clavier exécute ce genre de choses. Si vous exécutez Gnome-2, vous pouvez ajouter un raccourci personnalisé dans Système -> Préférences -> Raccourcis clavier . Si vous utilisez un autre DE ou WM, cette excersize est laissée au lecteur.

La dernière remarque est que lors de la liaison de commandes à des raccourcis clavier, il est souvent nécessaire de n'avoir qu'une seule commande, pas deux commandes connectées avec un canal comme nous utilisons ci-dessus. Vous pouvez accomplir cela en appelant votre commande canalisée en tant que chaîne de commande argumetn à un nouveau shell comme ceci:

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

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

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

Un rapport de bogue et un correctif récents (à ce jour) sont disponibles:

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

10
Michael Danilov
xdotool click 2

Cela simule le clic du bouton de la souris directement et ne nécessite pas d'utiliser xsel/xdotool type ....

7
blueyed

J'utilise Ubuntu 12 et j'avais un problème pour coller du texte de xterm dans gedit (et toute autre application). En outre, j'utilise un ordinateur portable sans bouton central de la souris comme beaucoup de gens (il n'y a vraiment pas de merci pour les utilisateurs de Linux sans boutons du milieu, et non: le clic droit + le 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 était d'exécuter le "gnome-terminal" préinstallé au lieu de "xterminal". "gnome-terminal" prend en charge une commande de copie avec clic droit sur le presse-papiers. Je pourrais alors "Edit Menu-> Paste" dans gedit ou utiliser shift-insert. "gnome-terminal" était préinstallé avec Ubuntu 12. D'autres installations debian/gnome devraient pouvoir l'installer via:

Sudo apt-get install gnome-terminal

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

2
Ryan Woodard