Patcher un programme : exemple avec dmenu.
Un patch est un fichier apportant des modifications au code source d'origine. Il contient les différences qui existent entre l'ancienne et la nouvelle version. Les patchs permettent la correction de bug et/ou l'ajout de fonctionnalités.
Je vais vous parler de l'application d'un patch simple etj e vais illustrer mes propos avec un patch trouvé sur le forum d'archlinux pour dmenu, sur lequel j'avais déjà écrit un article.
Ce patch permet d'avoir un dmenu vertical et de régler sa taille et sa position sur l'écran.
A quoi ressemble un patch :
Le patch regroupe donc les différences entre l(es) ancien(s) fichier(s) source(s) et le(s) nouveau(x).
Le patch est obtenu grâce à la commande diff (man diff), qui recense les différences entre les fichiers, ici le code source original et celui modifié.
L'avantage du patch est de pouvoir facilement redistribuer un fichier simple au lieux de toutes les sources modifiées.
Voici une partie du patch que nous allons utiliser :diff -u dmenu.orig/config.mk dmenu/config.mk
--- dmenu.orig/config.mk 2009-05-13 18:10:00.000000000 -0400
+++ dmenu/config.mk 2009-05-13 18:10:35.000000000 -0400
@@ -1,14 +1,14 @@
# dmenu version
-VERSION = 4.0
+VERSION = 4.0-vertical
# Customize below to fit your system
# paths
-PREFIX = /usr/local
+PREFIX = /usr
MANPREFIX = ${PREFIX}/share/man
-X11INC = /usr/X11R6/include
-X11LIB = /usr/X11R6/lib
+X11INC = /usr/include/X11
+X11LIB = /usr/lib/X11
On voit que cette partie du patch concerne le fichier config.mk.
On remarque aussi les lignes ajoutées(commençant par un "+") et supprimées (celle commencée par un "-").
1. Méthode générale.
Telechargez les sources et le patch.wget http://code.suckless.org/dl/tools/dmenu-4.0.tar.gz
wget http://evaryont.me/dmenu-vertical-history.patch
Rendez vous dans le dossier des sources.
cd dmenu-4.0
Appliquez le patch :
patch -p1 < /chemin/verslepatch/dmenu-vertical-history.patch
Compilez le programme :make
make install
et voila le patch est appliqué et dmenu installé!
2. Application à Archlinux.
Pour Archlinux il est possible d'ajouter le patch en modifiant le PKGBUILD, grâce à yaourt. Yaourt permet de récupérer le PKGBUILD du paquet grâce à l'option Sb, le reste se passe comme l'installation de logiciel provenant d'AUR.
yaourt -Sb
editez le PKGBUILD
remplacer le patch par celui téléchargé dans la fonction buildpatch -p1 < /chemin/verslepatch/dmenu-vertical-history.patch
et voila vous pouvez continuer la compilation et l'installation dmenu.
3. Exemples d'utilisation de dmenu :
dmenu prend une liste de mots séparés par un retour à la ligne en entrée, les mets en forme et affiche un menu et renvoie notre choix en sortie.
Exemple du forum Archlinux pour mpd:
mpc play `mpc playlist | dmenu -p "Find:" -r -l 10 -w 400 -y 5 -x 5| cut -c 2- - | sed -r s/").*$"/""/`
Qui ouvrira une fenêtre dmenu sur la droite de votre écran avec la place pour 10 items.
Quodmenu, un petit script dmenu pour commander simplement Quodlibet :
#!/bin/bash
titre=$(quodlibet --print-playing "<title> - <artist>")
ctrl="PlayPause
Next
Prev
Order
$(quodlibet --status | cut -d " " -f 1,4)"
cmd=$(echo -e $ctrl | dmenu -i -p "$titre" -nb '#000000' -nf '#1994d1' -sb '#000000' -sf '#ffffff' )
echo $titre
case ${cmd} in
"PlayPause") exec quodlibet --play-pause;;
"Next") exec quodlibet --next;;
"Prev") exec quodlibet --previous;;
"Order") exec quodlibet --order=toggle
esac
Un autre exemple pour mpd par Geob, qui avait donné un lien vers son blog dans l'article sur dmenu :
http://pti-zarticles.dnsalias.org/wp/2008/10/19/mpd-la-musique-souple/
Et voila, vous savez maintenant appliquer un patch, et aussi des exemples supplémentaires et des précisions pour dmenu.
/! Quand vous récupérez un patch, faites le d'une source sure pour des raisons de securité evidente !!