Oui merci beaucoup ! Pour ma part, je préférais le script de reza, et j'ai finalement réussi à le récupérer grâce au cache de Google. Je le poste donc ici pour le pas qu'il se perde :
#!/usr/bin/perl -w
use Gtk2 '-init';
# ---------------------------PLEASE EDIT CORRECTLY THIS PART----------------------------------
# Locale used by application : can be actually set to 'en' or 'fr' pour les français
$lang='fr';
# Thunderbird command : can be "thunderbird" or "mozilla-thunderbird"
# Depending of your distribution the filename in /usr/bin change
$thunderbird='mozilla-thunderbird';
# Set the default quality (0-100) of rescaled pictures
$quality=90;
# --------------------------------------------------------------------------------------------
# DEBUGAGE
my $filelog=">/tmp/send-debug" ;
open LOGFILE, $filelog ;
$filelog = select LOGFILE; $| = 1; #Mode Autoflush pour LOGFILE
print( LOGFILE "Script Nautilus Envoyer par Email\n" ) ;
print( LOGFILE "---------------------------------\n" ) ;
# FIN DEBUGAGE
# Vérification de la présence des dépendances
eval "use Image::Imlib2"; &warn_msg("libimage-imlib2-perl") if $@;
use constant TRUE => 1 ;
use constant FALSE => 0 ;
# Variables internes
$imgfnd = FALSE;
$othfnd = FALSE;
$canresize = FALSE;
$mozon = 0;
$datasize = 0;
$tbirdbin="/usr/bin/$thunderbird";
# Fix lang used by application
&set_lang;
# On recupere les fichiers en argument si ils existent
if (@ARGV) {
for ($i=0; $i<@ARGV; $i++) {
$filesarg[$i] = $ARGV[$i];
@filename = split ("/", $ARGV[$i]);
$file[$i] = $filename[@filename-1];
$datasize = (`ls -s "$filesarg[$i]" | awk '{print \$1}'` + $datasize); # Estimation de la taille totale
#DEBUGAGE
print ( LOGFILE "Argument : $filesarg[$i]\n") ;
print ( LOGFILE "Nom fichier : $file[$i]\n") ;
print ( LOGFILE "Taille fichier : $datasize Ko\n") ;
#FIN DEBUGAGE
}
}
else {
#DEBUGAGE
print( LOGFILE "Pas de fichier à joindre... Arrêt\n" ) ;
# FIN DEBUGAGE
&warn_msg("nofiles");
}
# On détermine si ce sont que des images
for ($i=0; $i<@filesarg; $i++) {
$filetype = `file "$filesarg[$i]"`;
if ($filetype =~ m/image/g) {
$imgfnd = TRUE;
}
else {
$othfnd = TRUE;
}
}
$canresize = TRUE if ($imgfnd == TRUE && $othfnd == FALSE);
#DEBUGAGE
print( LOGFILE "Tous les fichiers sont des images\n" ) if ($imgfnd == TRUE && $othfnd == FALSE);
print( LOGFILE "Il y a des images\n" ) if ($imgfnd == TRUE && $othfnd == TRUE);
print( LOGFILE "Pas d'images\n" ) if $imgfnd == FALSE;
print( LOGFILE "Utilisateur : $ENV{'USER'}\n" ) ;
# FIN DEBUGAGE
# On affiche la fenetre de Redimensionnement des images si necessaire
&draw_gtkwin if ($canresize == TRUE);
# On met en forme la liste pour thunderbird : file://<pathfile1>,file://<pathfile2>,file://<pathfile3>
for ($i=0; $i<@filesarg-1; $i++) {
$attach = $attach . "file:\/\/" . $filesarg[$i] . ",";
}
$attach = $attach . "file:\/\/" . $filesarg[@filesarg-1];
# On envoie la liste des fichiers à Thunderbird
$mozon = `ps -ec -u $ENV{'USER'}| grep -c mozilla-thunder`;
$mozon =~ s/\n//g;
$thbversion = `$tbirdbin --version |grep 1.5`;
#DEBUGAGE
print( LOGFILE "Valeur variable mozon : $mozon\n");
print( LOGFILE "La version de Thunderbird est la 1.5 \n") if $thbversion ne "";
print( LOGFILE "Thunderbird est lancé\n" ) if $mozon ne "0";
print( LOGFILE "Liste des fichiers mises en formes : $attach\n" );
# FIN DEBUGAGE
if ($thbversion ne "") {
$mozrmt="/usr/lib/mozilla-thunderbird/mozilla-xremote-client -a $thunderbird";
}
else {
$mozrmt="/usr/lib/mozilla-thunderbird/mozilla-thunderbird-xremote-client";
}
if ($mozon ne "0") {
exec "$mozrmt \"xfeDoCommand(composeMessage,attachment='$attach')\"";
}
else {
exec "$tbirdbin & sleep 2; $mozrmt \"xfeDoCommand(composeMessage,attachment='$attach')\"";
}
############################# FONCTIONS ################################
#Redimensionne les images
sub img_resize {
my ($widget,$button)=@_ ;
# On récupère la référence du groupe auquel appartient le bouton
my $group = $button->get_group() ;
my $label;
my $size =0;
# On parcours le tableau des boutons et on affiche le bouton qui est actif.
my $but ;
foreach $but (@$group) {
if ($but->get_active) {
# On récupère le label du bouton actif
$label = $but->get_label() ;
}
}
$size = 1024 if $label =~ m/1024/g;
$size = 800 if $label =~ m/800/g;
$size = 640 if $label =~ m/640/g;
if ($size ne 0) {
for ($i=0; $i<@filesarg; $i++) {
my $image=Image::Imlib2->load($filesarg[$i]);
my $sclimg=$image->create_scaled_image($size,0);
$sclimg->set_quality($quality);
$sclimg->image_set_format("jpeg");
$sclimg->save("$ENV{HOME}/.Trash/$file[$i]");
$filesarg[$i]="$ENV{HOME}/.Trash/$file[$i]";
}
}
# DEBUGAGE
print( LOGFILE "Dimensionnement choisi : $label - Valeur configurée : $size\n" );
# FIN DEBUGAGE
Gtk2->main_quit;
}
# Creation de la fenetre gtk pour redimensionnemt
sub draw_gtkwin {
# Création de la fenêtre
my $confwin = Gtk2::Window->new('toplevel');
$confwin->signal_connect('delete_event', sub {$confwin->destroy();});
$confwin->set_title($msg{"WinName"});
$confwin->set_border_width(10);
$confwin->set_resizable(FALSE);
# Creation boite Verticale Principale
my $vbox = new Gtk2::VBox( FALSE, 5 );
$confwin->add( $vbox ) ;
# Boites horizontales Principales
my $hbox1 = new Gtk2::HBox( FALSE, 5 ); # HBOX1 - Label
$vbox->pack_start( $hbox1, FALSE, FALSE, 0 ) ;
my $hbox2 = new Gtk2::HBox( FALSE, 5 ); # HBOX2 - Radio btn
$vbox->pack_start( $hbox2, FALSE, FALSE, 0 ) ;
my $hbox3 = new Gtk2::HBox( FALSE, 5 ); # HBOX3 - Boutons
$vbox->pack_start( $hbox3, FALSE, FALSE, 0 ) ;
# Label de HBOX1
my $label = Gtk2::Label->new ();
$label->set_markup($msg{"WinText1"}."<b>$datasize Ko</b>.\n".$msg{"WinText2"} ) ;
$label->set_justify( 'left' );
$hbox1->add($label);
# Label de HBOX2
$label = Gtk2::Label->new ($msg{"ScaleType"} ) ;
$label->set_justify( 'left' );
$hbox2->add($label);
# Boite verticale et radio button
my $vboxbt = new Gtk2::VBox( FALSE, 5 );
$hbox2->add($vboxbt);
my $button1 = Gtk2::RadioButton->new( undef, $msg{"NoScale"} );
$vboxbt->add($button1);
my $group = $button1->get_group();
my $button2 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"HighQ"} );
$vboxbt->add($button2);
my $button3 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"MediumQ"} );
$vboxbt->add($button3);
my $button4 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"LowQ"} );
$vboxbt->add($button4);
$cancel = Gtk2::Button->new_from_stock('gtk-cancel');
$cancel -> signal_connect ('clicked',sub {Gtk2->main_quit; exit 0});
$valid = Gtk2::Button->new_from_stock('gtk-apply');
$valid -> signal_connect ('clicked',\&img_resize,$button1);
$hbox3->add($cancel);
$hbox3->add($valid);
$confwin->show_all ;
Gtk2->main;
}
# Fenetre d'erreur si il manque une dependance
sub warn_msg {
my ($dep) = @_;
my $label;
if ($dep eq "nofiles") {
$label = $msg{"WarnFiles"};
}
else {
$label = $msg{"WarnDep"};
}
my $msgdiag = Gtk2::MessageDialog->new (undef,'destroy-with-parent','error','close',$label);
$msgdiag->show;
if ('close' eq $msgdiag->run) {
$msgdiag->destroy;
exit 1;
}
Gtk2->main;
}
# Fix lang used
sub set_lang {
if ($lang eq "fr") {
%msg = ("WinName" => "Envoi de fichiers par email",
"WinText1" => "Le(s) fichier(s) que vous voulez envoyer sont une (des) image(s).\n"
."La taille totale est de ",
"WinText2" => "Vous pouvez effectuer un redimensionnement pour que l'email soit moins volumineux.",
"ScateType" => "Type de redimensionnement :",
"NoScale" => "Aucun changement de taille",
"HighQ" => "Haute qualité : 1024 pixels de large",
"MediumQ" => "Moyenne qualité : 800 pixels de large",
"LowQ" => "Basse qualité : 640 pixels de large",
"WarnFiles" => "Vous devez sélectionner au moins un fichier à envoyer !",
"WarnDep" => "Un programme nécessaire au bon fonctionnement est manquant, merci d'installer ce package :");
}
elsif ($lang eq "en") {
%msg = ("WinName" => "Send files by email",
"WinText1" => "The file(s) you want to send is (are) pictures\n"
."Total size : ",
"WinText2" => "You can scale the picture(s) to reduce date size",
"ScateType" => "Scale type :",
"NoScale" => "Don't change anything",
"HighQ" => "High quality : 1024 pixels of height",
"MediumQ" => "Medium quality : 800 pixels of height",
"LowQ" => "Low quality : 640 pixels of height",
"WarnFiles" => "You have to select at least one file !",
"WarnDep" => "A package is missing, please install it :");
}
}
Pour les nautilus-actions, je n'ai pas pu récupérer le fichier .schema, mais je l'ai fait moi-même :
<?xml version="1.0" encoding="UTF-8">
<gconfschemafile>
<schemalist>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/label
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/label
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<default>Envoyer l'image par e-mail...</default>
<short>Le libellé de l'entrée de menu</short>
<long>
Le libellé de l'entrée de menu apparaissant dans le menu contextuel de Nautilus quand la sélection correspond aux paramètres de conditions d'affichage
</long>
</locale>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/tooltip
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/tooltip
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<default>Envoie l'image par e-mail avec Mozilla Thunderbird</default>
<short>L'infobulle de l'entrée de menu</short>
<long>
L'infobulle de l'entrée de menu apparaissant dans la barre d'état de Nautilus quand l'utilisateur pointe sa souris sur l'entrée du menu contextuel de Nautilus
</long>
</locale>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/icon
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/icon
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<short>L'icône de l'entrée de menu</short>
<long>
L'icône de l'entrée de menu apparaissant à coté du libellé dans le menu contextuel de Nautilus quand la sélection correspond aux paramètres de conditions d'affichage
</long>
</locale>
<default>/usr/share/pixmaps/mozilla-thunderbird-pm.png</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/path
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/path
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<short>Le chemin de la commande</short>
<long>
Le chemin de la commande à lancer lorsque l'utilisateur sélectionne l'entrée de menu dans le menu contextuel de Nautilus
</long>
</locale>
<default>/home/nicolas/SendEmail</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/parameters
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/parameters
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<short>Les paramètres de la commande</short>
<long>
Les paramètres de la commande à lancer quand l'utilisateur sélectionne l'entrée de menu dans le menu contextuel de Nautilus.
Les paramètres peuvent contenir des options spéciales qui seront remplacées par des informations de Nautilus avant le lancement de la commande :
%d : le dossier de base des fichiers sélectionnés ;
%f : le nom du fichier sélectionné, ou le nom du premier fichier si plusieurs fichiers sont sélectionnés ;
%m : la liste des noms des fichiers sélectionnés sans leurs chemins, séparés par des espaces ;
%M : la liste des fichiers/dossiers avec leurs chemins complets, séparés par des espaces ;
%u : l'URI gnome-vfs ;
%s : le protocole présent dans l'URI gnome-vfs ;
%h : le nom d'hôte de la machine présent dans l'URI gnome-vfs ;
%U : le nom de l'utilisateur présent dans l'URI gnome-vfs ;
%% : le signe pourcent
</long>
</locale>
<default>%M</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/basenames
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/basenames
</applyto>
<owner>nautilus-actions</owner>
<type>list</type>
<list_type>string</list_type>
<locale name="C">
<short>
La liste des motifs de correspondance des fichiers/dossiers sélectionnés
</short>
<long>
A list of strings with joker '*' or '?' to match the name of the selected file(s)/folder(s). Each selected items must match at least one of the filename patterns for the action to appear
</long>
</locale>
<default>[*]</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/matchcase
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/matchcase
</applyto>
<owner>nautilus-actions</owner>
<type>bool</type>
<locale name="C">
<short>
'true' if the filename patterns have to be case sensitive, 'false' otherwise
</short>
<long>
If you need to match a filename in a case-sensitive manner, set this key to 'true'. If you also want, for example '*.jpg' to match 'photo.JPG', set 'false'
</long>
</locale>
<default>true</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/mimetypes
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/mimetypes
</applyto>
<owner>nautilus-actions</owner>
<type>list</type>
<list_type>string</list_type>
<locale name="C">
<short>
The list of patterns to match the mimetypes of the selected file(s)
</short>
<long>
A list of strings with joker '*' or '?' to match the mimetypes of the selected file(s). Each selected items must match at least one of the mimetype patterns for the action to appear
</long>
</locale>
<default>[image/*]</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/isfile
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/isfile
</applyto>
<owner>nautilus-actions</owner>
<type>bool</type>
<locale name="C">
<short>
«vrai» si la sélection peut contenir des fichiers, «faux» sinon
</short>
<long>
This setting is tied in with the 'isdir' setting. The valid combinations are:
isfile=TRUE and isdir=FALSE: the selection may hold only files
isfile=FALSE and isdir=TRUE: the selection may hold only folders
isfile=TRUE and isdir=TRUE': the selection may hold both files and folders
isfile=FALSE and isdir=FALSE: this is an invalid combination (your configuration will never appear)
</long>
</locale>
<default>true</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/isdir
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/isdir
</applyto>
<owner>nautilus-actions</owner>
<type>bool</type>
<locale name="C">
<short>
«vrai» si la sélection peut contenir des dossiers, «faux» sinon
</short>
<long>
This setting is tied in with the 'isfile' setting. The valid combinations are:
isfile=TRUE and isdir=FALSE: the selection may hold only files
isfile=FALSE and isdir=TRUE: the selection may hold only folders
isfile=TRUE and isdir=TRUE': the selection may hold both files and folders
isfile=FALSE and isdir=FALSE: this is an invalid combination (your configuration will never appear)
</long>
</locale>
<default>false</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/accept-multiple-files
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/accept-multiple-files
</applyto>
<owner>nautilus-actions</owner>
<type>bool</type>
<locale name="C">
<short>
«vrai» si la sélection contient plusieurs éléments, «faux» sinon
</short>
<long>
Si vous avez besoin de sélectionner un ou plusieurs fichiers/dossiers, positionnez cette clé à «vrai». Si vous désirez uniquement un fichier ou dossier, positionnez à «faux»
</long>
</locale>
<default>true</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/schemes
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/schemes
</applyto>
<owner>nautilus-actions</owner>
<type>list</type>
<list_type>string</list_type>
<locale name="C">
<short>
La liste des protocoles GnomeVFS où les fichiers sélectionnés devraient se trouver
</short>
<long>
Définit la liste des protocoles GnomeVFS valides à faire correspondre aux éléments sélectionnés. Le protocole GnomeVFS est le protocole utilisé pour accéder aux fichiers. Le mot-clé à utiliser est celui utilisé dans l'URI GnomeVFS.
Exemples d'URI GnomeVFS :
file:///tmp/foo.txt
sftp:///root@test.example.net/tmp/foo.txt
Les protocoles les plus courants sont :
«file» pour les fichiers locaux ;
«sftp» pour les fichiers accédés via SSH ;
«ftp» pour les fichiers accédés via FTP ;
«smb» pour les fichiers accédés via Samba (partage Windows) ;
«dav» pour les fichiers accédés via WeDav.
Tous les protocoles GnomeVFS utilisés par Nautilus peuvent être utilisés ici.
</long>
</locale>
<default>[file]</default>
</schema>
<schema>
<key>
/schemas/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/version
</key>
<applyto>
/apps/nautilus-actions/configurations/5af03327-e66c-42bd-abb9-bd188934e706/version
</applyto>
<owner>nautilus-actions</owner>
<type>string</type>
<locale name="C">
<short>La version du format de configuration</short>
<long>
La version du format de configurauion qui sera utilisé pour gérer la compatibilité avec les versions antérieures
</long>
</locale>
<default>1.1</default>
</schema>
</schemalist>
</gconfschemafile>
Il suffit d'enregistrer ce code dans un fichier toto.schemas et l'importer sous nautilus-actions (si ça ne marche pas, le plus important est le paramètre "%M" et le mimetype "image/*").
edith : modification de la ligne concernant l'estimation de la taille pour supprimer le warning (erreur signalée ci-dessous)