Patcher un programme : exemple avec dmenu.

Je vais vous parler de l’application d’un patch simple etj e vais illustrer mes propos avec un patch trouvé sur le 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 (), 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 build

patch -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 " – <artist>") </p> <p>ctrl="PlayPausenNextnPrevnOrdern$(quodlibet –status | cut -d " " -f 1,4)" </p> <p>cmd=$(echo -e $ctrl | dmenu -i -p "$titre" -nb ‘#000000’ -nf ‘#1994d1’ -sb ‘#000000’ -sf ‘#ffffff’ ) </p> <p>echo $titre<br /> case ${cmd} in<br /> "PlayPause") exec quodlibet –play-pause;;<br /> "Next") exec quodlibet –next;;<br /> "Prev") exec quodlibet –previous;;<br /> "Order") exec quodlibet –order=toggle<br /> esac </p> <p>Un autre exemple pour mpd par Geob, qui avait donné un lien vers son blog dans l’article sur dmenu : </p> <p>Et voila, vous savez maintenant appliquer un patch, et aussi des exemples supplémentaires et des précisions pour dmenu. </p> <p>/! Quand vous récupérez un patch, faites le d’une source sure pour des raisons de securité evidente !!</p> </div><!-- .entry-content --> <footer class="entry-meta"> <span class="cat-links"><span class="screen-reader-text">Catégories </span><a href="https://generation-linux.fr/category/trucs-astuces/" rel="category tag">Trucs - Astuces</a></span> <nav id="nav-below" class="post-navigation"> <span class="screen-reader-text">Navigation des articles</span> </nav><!-- #nav-below --> </footer><!-- .entry-meta --> </div><!-- .inside-article --> </article><!-- #post-## --> </main><!-- #main --> </div><!-- #primary --> <div id="right-sidebar" class="widget-area grid-25 tablet-grid-25 grid-parent sidebar" itemtype="https://schema.org/WPSideBar" itemscope> <div class="inside-right-sidebar"> <aside id="search-2" class="widget inner-padding widget_search"><form method="get" class="search-form" action="https://generation-linux.fr/"> <label> <span class="screen-reader-text">Rechercher :</span> <input type="search" class="search-field" placeholder="Recherche…" value="" name="s" title="Rechercher :"> </label> <input type="submit" class="search-submit" value="Rechercher"> </form> </aside> <aside id="recent-posts-2" class="widget inner-padding widget_recent_entries"> <h2 class="widget-title">Articles récents</h2> <ul> <li> <a href="https://generation-linux.fr/quel-hebergement-pour-un-site-wordpress/">Quel hébergement pour un site WordPress ?</a> </li> <li> <a href="https://generation-linux.fr/forfait-mobile-50-go/">Quel forfait mobile de 50 Go choisir ?</a> </li> <li> <a href="https://generation-linux.fr/chiffrer-simplement-un-fichier-texte-avec-vim/">Chiffrer simplement un fichier texte avec Vim</a> </li> <li> <a href="https://generation-linux.fr/auto-hebergement-et-page-daccueil-perso/">Auto-hébergement et page d’accueil perso</a> </li> <li> <a href="https://generation-linux.fr/synchronisation-dune-todo-list-android-vers-mon-serveur-perso/">Synchronisation d’une todo list android vers mon serveur perso</a> </li> </ul> </aside><aside id="archives-2" class="widget inner-padding widget_archive"><h2 class="widget-title">Archives</h2> <ul> <li><a href='https://generation-linux.fr/2022/10/'>octobre 2022</a></li> <li><a href='https://generation-linux.fr/2021/12/'>décembre 2021</a></li> <li><a href='https://generation-linux.fr/2017/08/'>août 2017</a></li> <li><a href='https://generation-linux.fr/2016/01/'>janvier 2016</a></li> <li><a href='https://generation-linux.fr/2015/07/'>juillet 2015</a></li> <li><a href='https://generation-linux.fr/2014/06/'>juin 2014</a></li> <li><a href='https://generation-linux.fr/2014/04/'>avril 2014</a></li> <li><a href='https://generation-linux.fr/2013/09/'>septembre 2013</a></li> <li><a href='https://generation-linux.fr/2013/06/'>juin 2013</a></li> <li><a href='https://generation-linux.fr/2013/05/'>mai 2013</a></li> <li><a href='https://generation-linux.fr/2013/04/'>avril 2013</a></li> <li><a href='https://generation-linux.fr/2013/03/'>mars 2013</a></li> <li><a href='https://generation-linux.fr/2013/02/'>février 2013</a></li> <li><a href='https://generation-linux.fr/2013/01/'>janvier 2013</a></li> <li><a href='https://generation-linux.fr/2012/10/'>octobre 2012</a></li> <li><a href='https://generation-linux.fr/2012/01/'>janvier 2012</a></li> <li><a href='https://generation-linux.fr/2011/09/'>septembre 2011</a></li> <li><a href='https://generation-linux.fr/2011/08/'>août 2011</a></li> <li><a href='https://generation-linux.fr/2011/07/'>juillet 2011</a></li> <li><a href='https://generation-linux.fr/2011/06/'>juin 2011</a></li> <li><a href='https://generation-linux.fr/2011/04/'>avril 2011</a></li> <li><a href='https://generation-linux.fr/2011/03/'>mars 2011</a></li> <li><a href='https://generation-linux.fr/2011/02/'>février 2011</a></li> <li><a href='https://generation-linux.fr/2011/01/'>janvier 2011</a></li> <li><a href='https://generation-linux.fr/2010/12/'>décembre 2010</a></li> <li><a href='https://generation-linux.fr/2010/11/'>novembre 2010</a></li> <li><a href='https://generation-linux.fr/2010/09/'>septembre 2010</a></li> <li><a href='https://generation-linux.fr/2010/07/'>juillet 2010</a></li> <li><a href='https://generation-linux.fr/2010/01/'>janvier 2010</a></li> <li><a href='https://generation-linux.fr/2009/12/'>décembre 2009</a></li> <li><a href='https://generation-linux.fr/2009/11/'>novembre 2009</a></li> <li><a href='https://generation-linux.fr/2009/10/'>octobre 2009</a></li> <li><a href='https://generation-linux.fr/2009/09/'>septembre 2009</a></li> <li><a href='https://generation-linux.fr/2009/08/'>août 2009</a></li> <li><a href='https://generation-linux.fr/2009/07/'>juillet 2009</a></li> <li><a href='https://generation-linux.fr/2009/06/'>juin 2009</a></li> <li><a href='https://generation-linux.fr/2009/05/'>mai 2009</a></li> <li><a href='https://generation-linux.fr/2009/04/'>avril 2009</a></li> <li><a href='https://generation-linux.fr/2009/03/'>mars 2009</a></li> <li><a href='https://generation-linux.fr/2009/02/'>février 2009</a></li> <li><a href='https://generation-linux.fr/2009/01/'>janvier 2009</a></li> <li><a href='https://generation-linux.fr/2008/12/'>décembre 2008</a></li> <li><a href='https://generation-linux.fr/2008/11/'>novembre 2008</a></li> <li><a href='https://generation-linux.fr/2008/10/'>octobre 2008</a></li> <li><a href='https://generation-linux.fr/2008/09/'>septembre 2008</a></li> <li><a href='https://generation-linux.fr/2008/08/'>août 2008</a></li> <li><a href='https://generation-linux.fr/2008/07/'>juillet 2008</a></li> <li><a href='https://generation-linux.fr/2008/05/'>mai 2008</a></li> <li><a href='https://generation-linux.fr/2008/03/'>mars 2008</a></li> <li><a href='https://generation-linux.fr/2008/02/'>février 2008</a></li> <li><a href='https://generation-linux.fr/2008/01/'>janvier 2008</a></li> <li><a href='https://generation-linux.fr/2007/12/'>décembre 2007</a></li> </ul> </aside><aside id="categories-2" class="widget inner-padding widget_categories"><h2 class="widget-title">Catégories</h2> <ul> <li class="cat-item cat-item-3"><a href="https://generation-linux.fr/category/auto-hebergement/">Auto hébergement</a> </li> <li class="cat-item cat-item-9"><a href="https://generation-linux.fr/category/autres/">Autres</a> </li> <li class="cat-item cat-item-10"><a href="https://generation-linux.fr/category/cours-linux/">Cours Linux</a> </li> <li class="cat-item cat-item-1"><a href="https://generation-linux.fr/category/divers/">Divers</a> </li> <li class="cat-item cat-item-5"><a href="https://generation-linux.fr/category/jeux/">Jeux</a> </li> <li class="cat-item cat-item-6"><a href="https://generation-linux.fr/category/logiciels/">Logiciels</a> </li> <li class="cat-item cat-item-7"><a href="https://generation-linux.fr/category/news/">News</a> </li> <li class="cat-item cat-item-4"><a href="https://generation-linux.fr/category/raspberry-pi/">Raspberry Pi</a> </li> <li class="cat-item cat-item-8"><a href="https://generation-linux.fr/category/serveur/">Serveur</a> </li> <li class="cat-item cat-item-2"><a href="https://generation-linux.fr/category/trucs-astuces/">Trucs – Astuces</a> </li> </ul> </aside> </div><!-- .inside-right-sidebar --> </div><!-- #secondary --> </div><!-- #content --> </div><!-- #page --> <div class="site-footer"> <footer class="site-info" itemtype="https://schema.org/WPFooter" itemscope> <div class="inside-site-info grid-container grid-parent"> <div class="copyright-bar"> 2024 © Génération Linux </div> </div> </footer><!-- .site-info --> </div><!-- .site-footer --> <!--[if lte IE 11]> <script type='text/javascript' src='https://generation-linux.fr/wp-content/themes/generatepress/js/classList.min.js?ver=2.4.2' id='generate-classlist-js'></script> <![endif]--> <script type='text/javascript' src='https://generation-linux.fr/wp-content/themes/generatepress/js/menu.min.js?ver=2.4.2' id='generate-menu-js'></script> <script type='text/javascript' src='https://generation-linux.fr/wp-content/themes/generatepress/js/a11y.min.js?ver=2.4.2' id='generate-a11y-js'></script> </body> </html>