<h2>But de ce document</h2>
<p class="spip">Ce document me sert de mémo pour créer des service-menus dans Konqueror. Un service-menu permet de personnaliser le clic-droit dans Konqueror pour effectuer différentes actions en fonction du type de fichier sélectionné.</p>

<h2>Emplacement des service-menus</h2>
<p class="spip">Si le service-menu doit être disponible pour tous les utilisateurs, il faut le placer dans le dossier suivant :</p>

<p class="spip"><code class='spip_code' dir='ltr'>usr/share/apps/konqueror/servicemenus</code></p>

<p class="spip">Il est possible également de créer des service-menus personnalisés pour chaque utilisateur en les plaçant dans le profil de cet utilisateur dans :</p>

<p class="spip"><code class='spip_code' dir='ltr'>~/.kde/share/apps/konqueror/servicemenus/</code></p>

<p class="spip"><strong class="spip">Remarque</strong> : Si le répertoire « servicemenus » n’existe pas il faut le créer.</p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Le nom du fichier décrivant un service-menu doit obligatoirement se terminer par « <strong class="spip">.desktop</strong> »</p>

<h2>Exemple de service-menu</h2>
<p class="spip">Ce service menu tout simple se contente d’afficher deux menus faisant la même chose et affichant dans une boîte de dialogue la liste des fichiers sélectionnés :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[Desktop Entry]<br />
ServiceTypes=all/all<br />
TryExec=kdialog<br />
Actions=Test1;_SEPARATOR_;Test2</code></div>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
X-KDE-Submenu=Mon Sous Menu<br />
 <br />
[Desktop Action Test1]<br />
Name=Test1<br />
Icon=arts<br />
Exec=kdialog --msgbox '%u'<br />
<br />
[Desktop Action Test2]<br />
Name=Test2<br />
Exec=kdialog --msgbox '%u'</code></div>
<p class="spip">Un service-menu a toujours plusieurs sections :
<br /></p>
<li> La section « <strong class="spip">[Desktop Entry]</strong> » permet de définir sur quels types de fichiers ou dossiers le menu doit apparaître et indique la liste des actions à afficher.
<br /><li> Les sections suivantes (ex : « <strong class="spip">[Desktop Action Test1]</strong> ») permettent de définir chaque action.
<h2>Ligne « ServiceTypes »</h2>
<p class="spip">La ligne « <strong class="spip">ServiceTypes</strong> » permet de définir sur quels types de fichiers ou dossiers le menu apparaîtra.</p>

<p class="spip">La ligne suivante fera apparaître le menu pour tous les fichiers et dossiers :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ServiceTypes=all/all</code></p>

<p class="spip">La ligne suivante fera apparaître le menu uniquement si des dossiers sont sélectionnés :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ServiceTypes=inode/directory</code></p>

<p class="spip">La ligne suivante fera apparaître le menu uniquement si des fichiers sont sélectionnés :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ServiceTypes=all/allfiles</code></p>

<p class="spip">Le signe « * » permet de prendre en compte tous les types de fichiers d’une catégorie (ex : image) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ServiceTypes=image/*</code></p>

<p class="spip">Il est possible également d’indiquer plusieurs types de fichiers en les séparants par des virgules :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ServiceTypes=image/jpeg,application/pdf</code></p>

<p class="spip">Inversement, cette ligne permet d’exclure certains types de fichiers</p>

<p class="spip"><code class='spip_code' dir='ltr'>ExcludeServiceTypes=application/x-iso,kdedevice/*</code></p>

<p class="spip"><strong class="spip">Remarque </strong> : Pour connaître la liste complète de tous les types de fichiers, il faut depuis « <strong class="spip"> Konqueror </strong> » aller dans le menu « <strong class="spip">Configuration / Configurer Konqueror / Associations de fichiers</strong> ». Ensuite, il faut rechercher dans la liste le type souhaité ou utiliser la zone « <strong class="spip">Chercher un motif de fichiers</strong> »</p>

<h2>Ligne « TryExec »</h2>
<p class="spip">Cette ligne facultative, permet de vérifier que le programme utilisé est installé sur le système. Si le programme n’est pas disponible, le menu n’apparaîtra pas.</p>

<p class="spip"><code class='spip_code' dir='ltr'>TryExec=kdialog</code></p>

<p class="spip"><strong class="spip">Remarque</strong> : Si vous utilisez plusieurs programmes, il est possible de mette plusieurs lignes pour tester la présence de chaque programme.</p>

<h2>Ligne « Actions »</h2>
<p class="spip">Cette ligne doit indiquer toutes les actions présentent dans le service-menu. Chaque action doit correspondre à une section. Chaque action est séparée par un point-virgule. Le mot clé « _SEPARATOR_ » permet d’ajouter une ligne horizontale de séparation dans le menu.  Exemple :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Actions=Test1;_SEPARATOR_;Test2</code></p>

<h2>Ligne "X-KDE-Submenu »</h2>
<p class="spip">Cette ligne permet de placer les différentes actions dans un sous-menu. Sans cette ligne, les actions sont placées directement sous le menu « Action ». Si plusieurs service-menus (fichier .desktop) utilisent le même sous-menu, toutes les actions seront regroupées dans celui-ci.</p>

<p class="spip"><code class='spip_code' dir='ltr'>X-KDE-Submenu=Mon Sous Menu</code></p>

<p class="spip">En ajoutant le code de la langue entre des crochets, il est possible d’avoir ce texte en plusieurs langues en fonction de la configuration de KDE. Exemple :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>X-KDE-Submenu=Mon Sous Menu (in english)<br />
X-KDE-Submenu[fr]=Mon Sous Menu (en français)</code></div>
<h2>Ligne « Name »</h2>
<p class="spip">Cette ligne indique le texte qui apparaîtra dans le menu contextuel.</p>

<p class="spip"><code class='spip_code' dir='ltr'>Name=Test1</code></p>

<p class="spip">En ajoutant le code de la langue entre des crochets, il est possible d’avoir ce texte en plusieurs langues en fonction de la configuration de KDE. Exemple :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Name=Test1 (in english)<br />
Name[fr]=Test1 (en français)</code></div>
<h2>Ligne « Icon »</h2>
<p class="spip">Cette ligne permet de définir l’icône à afficher à gauche du texte du menu. Exemple :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Icon=arts</code></p>

<p class="spip"><strong class="spip">Remarque 1 </strong> : Pour connaître les icônes disponibles, il faut depuis « Konqueror » faire un « Clic droit + Propriété » sur un fichier et cliquer sur l’icône.</p>

<p class="spip"><strong class="spip">Remarque 2</strong> : Cette ligne peut également être ajoutée dans la section « <strong class="spip">[Desktop Entry] </strong> ». Dans ce cas elle sert à indiquer l’icône du fichier en lui même (fichier .desktop).</p>

<h2>Ligne « Exec »</h2>
<p class="spip">Cette ligne permet de définir la commande à exécuter pour les fichiers ou dossiers sélectionnés. Exemple :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Exec=kdialog --msgbox '%u'</code></p>

<p class="spip">Avec des parenthèses et le signe « && », il est possible d’exécuter plusieurs commandes sur la même ligne. Exemple :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Exec=(cd %d && tar chjf %n.tar.bz2 %n) </code></p>

<p class="spip">Si le script est complexe, il est possible de faire appel à un programme externe avec cette syntaxe :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Exec=/bin/sh -c "VotreScript.sh" '%u'</code></p>

<p class="spip">La variable « %u » contient l’URL du fichier sélectionné. Si plusieurs fichiers sont sélectionnés, le programme sera lancé pour chaque fichier. Vous trouverez ci-dessous les variables disponibles pour vos scripts :</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Variable</strong></th><th scope='col'><strong class="spip">Contenu</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>%f</td><td>URL complète du fichier (Chemin+nom). Si plusieurs fichiers sont sélectionnés, le programme sera exécuté pour chaque fichier</td></tr>
<tr class="row_odd"><td>%F</td><td>Liste des URL de tous les fichiers sélectionnés. Dans ce cas, le programme est exécuté une seule fois mais il doit être capable de traiter cette liste.</td></tr>
<tr class="row_even"><td>%u</td><td>Idem %f (Je n’ai vu aucune différence)</td></tr>
<tr class="row_odd"><td>%U</td><td>Idem %F (Je n’ai vu aucune différence)</td></tr>
<tr class="row_even"><td>%d</td><td>Chemin du fichier sans son nom</td></tr>
<tr class="row_odd"><td>%D</td><td>Liste des chemins des fichiers sélectionnés. La sélection peut en effet comprendre des fichiers compris dans plusieurs dossiers</td></tr>
<tr class="row_even"><td>%n</td><td>Nom du fichier sans son chemin</td></tr>
<tr class="row_odd"><td>%N</td><td>Liste des noms des fichiers sélectionnés</td></tr>
</tbody>
</table>
<p class="spip">En ajoutant le code de la langue entre crochets, il est possible d’avoir le texte en plusieurs langues en fonction de la configuration de KDE. Exemple :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Exec=kdialog --msgbox "In english : %u"<br />
Exec[fr]=kdialog --msgbox "En français : %u"</code></div>
<p class="spip">Il est possible également d’utiliser dcop pour dialoguer avec les applications KDE. Par exemple, cette commande permet de mettre en fond d’écran l’image sélectionnée :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Exec=dcop kdesktop KBackgroundIface setWallpaper %U 6</code></p>

<p class="spip">Pour plus d’explications sur les possibilités de dcop, vous pouvez lire cet article :
<br /></p>
<li> <a href="http://www.lea-linux.org/cached/index/Dev-dcop.html" class="spip_out">http://www.lea-linux.org/cached/index/Dev-dcop.html</a>
<p class="spip">Pour finir, voici quelques exemples de commandes trouvés dans les service-menus de KDE :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Exec=dcop amarok playlistbrowser addPodcast %u<br />
Exec=dcop amarok playlist playMedia %U<br />
Exec=amarok --queue %U<br />
Exec=ark --extract-to "%d" "%u"<br />
Exec=kprinter -t %n --caption %n --icon %i --miniicon %m %U<br />
Exec=kio_media_mounthelper -u %u<br />
Exec=dcop kitchensync PluckerInterface "addPluckerUrl(KURL)" %u<br />
Exec=cabextract -d "%d" "%F"<br />
Exec=cd %D; pdftk %F output "`kdialog --title "Save file"</code></div>
<h2>Remarques sur l’organisation des menus</h2>
<p class="spip">La ligne suivante, permet de forcer l’affichage des actions directement dans le menu principale et non pas dans le sous-menu action :</p>

<p class="spip"><code class='spip_code' dir='ltr'>X-KDE-Priority=TopLevel</code></p>

<p class="spip">Sans cette ligne, les actions seront regroupés dans le sous-menu « Action ».</p>

<p class="spip">La ligne suivante, il est possible de placer les action dans le sous-menu indiqué :</p>

<p class="spip"><code class='spip_code' dir='ltr'>X-KDE-Submenu=Mon Sous Menu</code></p>

<p class="spip">Le paramètre « <strong class="spip">_SEPARATOR_</strong> » placé dans la ligne « Actions= », permet de mettre une ligne séparatrice pour organiser les action :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Actions=Test1;_SEPARATOR_;Test2</code></p>

<p class="spip">Si plusieurs « service-menus » sont créés pour un même type de fichier, toutes les actions seront affichées. Si ces « service-menus », utilisent le même sous-menu, elles seront toutes affichées  dans ce menu.</p>

<h2>Mes « service-menus » préférés</h2>
<h3>Kim (Kde Image Menu)  </h3>
<p class="spip">Ce service-menu est certainement le plus complet dans la gestion des images. Il permet :
<br /></p>
<li> De compresser et redimensionner les images
<br /><li> Convertir et retourner
<br /><li> Créer des albums en HTML ou des animations en flash
<p class="spip">Aucun paquet n’est disponible sous Debian mais heureusement l’installation est très simple car il suffit de décompresser l’archive et de lancer le programme d’installation :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>tar -xvzf kim-0.9.4.tar.gz<br />
cd kim<br />
./install.sh</code></div>
<p class="spip">Ce programme est disponible ici :
<br /></p>
<li> <a href="http://kde-apps.org/content/show.php?content=11505" class="spip_out">http://kde-apps.org/content/show.php ?content=11505</a>
<p class="spip">Pour faire fonctionner ce service-menu, il est nécessaire d’installer les paquets suivants :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install imagemagick mjpegtools</code></p>

<h3>PDF Toolkit service menu :</h3>
<br /><li> <a href="http://www.kde-apps.org/content/show.php?content=18545" class="spip_out">http://www.kde-apps.org/content/show.php ?content=18545</a>
<p class="spip"><strong class="spip">Remarque 1</strong> : Ce service menu nécessite l’installation du paquet « <strong class="spip"> pdftk </strong> »</p>

<p class="spip"><strong class="spip">Remarque 2 </strong> : Dans les nombreux fichiers de ce paquet, il n’y a que le fichier « <strong class="spip">pdf_toolkit.desktop</strong> » qu’il est nécessaire de mettre en place</p>

<h3>konq-pdf</h3>
<br /><li> <a href="http://www.kde-apps.org/content/show.php?content=37321" class="spip_out">http://www.kde-apps.org/content/show.php ?content=37321</a>
<p class="spip"><strong class="spip">Remarque 1</strong> : Ce paquet contient plusieurs fichiers .desktop offrant beaucoup d’options de manipulation des fichiers .pdf</p>

<p class="spip"><strong class="spip">Remarque 2</strong> : Ce service menu est livré sous forme de paquet .deb</p>

<p class="spip"><strong class="spip">Remarque 3</strong> : Ce service menu nécessite l’installation du paquet « <strong class="spip"> pdfjam </strong> » qui installe beaucoup de dépendances perl et latex</p>

<h2>Autres sources d’informations</h2>
<p class="spip">Documentation officielle : 
<br /></p>
<li> <a href="http://developer.kde.org/documentation/tutorials/dot/servicemenus.html" class="spip_out">http://developer.kde.org/documentation/tutorials/dot/servicemenus.html</a>
<p class="spip">De nombreux service-menus sont disponibles sur ce site : 
<br /></p>
<li> <a href="http://www.kde-apps.org/index.php?xcontentmode=287" class="spip_out">http://www.kde-apps.org/index.php ?xcontentmode=287</a>
<p class="spip">Vous trouverez également des exemples de service-menus sur notre site :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=91" class="spip_out">http://www.coagul.org/article.php3 ?id_article=91</a>
<p class="spip">Spécification Freedesktop concernant la création des fichiers « .desktop » :
<br /></p>
<li> <a href="http://standards.freedesktop.org/desktop-entry-spec/0.9.4/index.html" class="spip_out">http://standards.freedesktop.org/desktop-entry-spec/0.9.4/index.html</a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>30/12/06</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.2</td><td>17/02/07</td><td>Mise en ligne</td></tr>
<tr class="row_even"><td>0.3</td><td>07/03/07</td><td>Ajout chapitre « Ligne TryExec » et « Mes service-menus préférés »</td></tr>
<tr class="row_odd"><td>0.4</td><td>07/03/07</td><td>Ajout chapitre « Remarques sur l’organisation des menus »</td></tr>
<tr class="row_even"><td>0.5</td><td>12/03/07</td><td>Réécriture du tableau des variables</td></tr>
<tr class="row_odd"><td>0.6</td><td>31/05/08</td><td>Mise à jour du chapitre : Mes « service-menus » préférés</td></tr>
</tbody>
</table>