Clipboard & Linux, gestion de plusieurs presse-papier

| Aucun Commentaire | Aucun Trackback

Hier, je vous ai parlé de Clipboard, un module permettant d'accéder au presse-papier de votre système d'exploitation. Aujourd'hui, je vais compléter ces informations avec quelques subtilités concernant l'utilisation de Clipboard sous Linux.

Alors que Clipboard utilise les outils natifs sous Windows et Mac OS X, il s'appuie sur un petit utilitaire sous Linux. Cet utilitaire, xclip, permet de manipuler le contenu des presse-papier sous X11, et oui, vous avez bien lu, j'ai bien écrit le contenu des presse-papier. Car sous X11, nous en avons plusieurs à disposition, et ceci ne va pas sans poser quelques problèmes à l'occasion.

Dans la page de documentation d'xclip, on nous explique qu'il y a trois presse-papier disponibles :

  1. primary, utilisé par défaut, donc, quand vous sélectionnez du texte sous X11, il est automatiquement copié dans ce presse-papier, et vous pouvez y accéder via un clic du troisième bouton de votre souris (et si votre souris n'a pas de troisième bouton, vous pouvez l'émuler ; par exemple, par le clic simultané du clic gauche et du clic droit) ;
  2. secondary, ce qui est cohérent avec l'existence d'un primary ;
  3. clipboard, qui est employé par votre window manager, et donc, par exemple sous Gnome, ce qui est copié via Ctrl-c et collé via Ctrl-v.

Dans un des outils développés accédant au presse-papier pour trouver les informations à traiter, je préférais utiliser le clipboard plutôt que le primary (j'utilise ce script quotidiennement, et sur des machines n'ayant pas toujours une souris externe, et la combinaison clic gauche/clic droit est parfois irritante sur certains trackpads). J'ai donc été lire le module et j'ai constaté qu'une gestion des différents presse-papier avait été mise en place :

  • une méthode paste_from_selection() permettant de prendre l'information à partir d'un des presse-papier à disposition ;
  • une méthode copy_to_selection() permettant de copier de l'information vers un presse-papier particulier.

Je pouvais donc travailler de la manière suivante :

  #!/usr/bin/env perl
  
  use strict;
  use warnings;
  
  use Clipboard;
  
  my $text = Clipboard::Xclip->paste_from_selection('clipboard'); # pour récupérer le texte du presse-papier
  
  Clipboard::Xclip->copy_to_selection('clipboard', 'Balh blah blah'); # pour coller du texte dans le presse-papier

Malheureusement, j'utilise ces scripts également avec Windows et Mac OS X, il était donc hors de question d'avoir des appels directs à paste_from_selection() ou copy_to_selection(). Il me restait donc la solution de tester $^O pour connaître mon environnement d'exécution et adapter le comportement de mon programme en fonction, ou alors utiliser le hack suivant.

Dans Clipboard::Xclip, une autre méthode est définie pour définir le presse-papier favori, cette méthode s'appelle favorite_selection(), dont voici la définition :

  sub favorite_selection { ($self->all_selections)[0] } # retourne le premier presse-papier disponible, donc primary
  
  sub all_selections { qw(primary buffer clipboard secondary) } # liste les presse-papier disponibles

Il me suffit donc de redéfinir la fonction favorite_selection() pour lui faire sélectionner mon presse-papier favori. Voici donc le code :

  undef &Clipboard::Xclip::favorite_selection; # on « supprime » la définition de la méthode favorite_selection
  *Clipboard::Xclip::favorite_selection = sub { 'clipboard' }; # on redéfinit l'action de la méthode

Et maintenant, je peux continuer à utiliser Clipboard->paste() et Clipboard->copy() sans me soucier du reste !

Aucun Trackback

URL de Trackback : http://blog.bjornoya.be/mt-tb.cgi/34

Laisser un commentaire

À propos de cette note

Cette page contient une unique note de manu publiée le 6 septembre 2010 23h59.

Prendre les informations là où elles sont est la note précédente de ce blog.

Analyse naïve de traffic réseau est la note suivante de ce blog.

Retrouvez le contenu récent sur l'index principal ou allez dans les archives pour retrouver tout le contenu.

Pages

Powered by Movable Type 4.261