# Simple lanceur d'applications (dmenu, lsdesktop) 2020-11-05T21:07:51Z J'ai récemment repris le développement d'isotop. C'est presque prêt, il reste surtout des traductions et de la documentation à rédiger. Mais ce n'est pas de ça dont je veux parler aujourd'hui. => https://www.3hg.fr/Isos/isotop/ isotop Un élément très important dans un environnement de travail c'est la façon dont on peut ouvrir de nouvelles applications. Je suis un grand fan de dmenu, mais il faut reconnaître qu'il n'est peut-être pas le plus facile d'accès, surtout si on est attaché à l'utilisation de la souris. => http://tools.suckless.org/dmenu/ dmenu Un bonne alternative existe, c'est xfce4-appfinder, mais je trouve dommage de devoir installer des dépendances d'XFCE juste pour 1 application. => https://docs.xfce.org/xfce/xfce4-appfinder/start xfce4-appfinder Une autre alternative existe : rofi avec le mode approprié. Il se charge de liste les fichiers ".desktop" présents sur un système pour en faire un menu. C'est cool, mais il y a des trucs que je ne veux pas voir dans le menu, j'aimerais donc pouvoir supprimer ces entrées. => https://github.com/davatorium/rofi rofi J'ai donc décidé de m'y coller avec mes quelques compétences. Me voici en train de coder un bout de C pour lister les fichiers ".desktop" présents sur ma machine, que ce soit les fichiers systèmes (/usr/local/share/applications) mais aussi ceux que j'aurais pu créer pour mon bon plaisir ($HOME/.local/applications). Ça s'appelle lsdesktop, et ça fait environ 200 lignes de code. => https://si3t.ch/code/lsdesktop.tgz lsdesktop Ce petit outil se contente de lister le nom des applications et la commande associée. Il ne se préoccupe pas de la catégorie ou encore de la langue (libre à vous de le rajouter :P). Il va ignore chage fichier ".desktop" précisé dans le fichier `$HOME/.config/lsdesktop.exclude", ça permet de cacher des entrées indésirables. Par exemple, j'ai ça : ``` $ cat ~/.config.lsdesktop.exclude gtk3-demo.desktop gtk3-icon-browser.desktop gtk3-widget-factory.desktop ``` Pour le compiler, téléchargez le fichier lsdesktop.c puis entrez ``` make ldesktop ``` Si vous lancez lsdesktop, vous obtiendrez un truc comme ça : ``` $ lsdesktop sxiv|sxiv %F LibreOffice 7.0 Calc|libreoffice7.0 --calc %U Xfe|xfe Xfi|xfi %f Xfp|xfp %f LibreOffice 7.0 Draw|libreoffice7.0 --draw %U Xfw|xfw %F LibreOffice 7.0 Impress|libreoffice7.0 --impress %U LibreOffice 7.0 Math|libreoffice7.0 --math %U LibreOffice 7.0|libreoffice7.0 %U LibreOffice 7.0 Writer|libreoffice7.0 --writer %U MuPDF|mupdf %f mpv Media Player|mpv --player-operation-mode=pseudo-gui -- %U ``` Reste à mettre ça dans un menu. Pour commencer, on va envoyer la sortie à dmenu après avoir mis les choses en forme : ``` $ lsdesktop |column -t -s'|' |dmenu -l 10 ``` Cela donne : => https://pix.toile-libre.org/upload/original/1604574823.png [IMG] On peut en faire un petit script, et même si c'est déjà rapide, on ajoute un cache pour ne pas avoir à lancer lsdesktop s'il n'y a pas de nouveaux fichiers ".desktop" ``` #!/bin/sh cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}" cache="$cachedir/ddesktop" if [ ! -f "${cache}" -o -n "$(find ${desktopfilespath} -newer ${cache} 2>/dev/null)" ] then lsdesktop -s '::' | column -t -s '::' > ${cache} fi test -s $HOME/.dmenurc && . $HOME/.dmenurc l=21 p="Run:" cat ${cache} |\ dmenu -nb $nb -nf $nf -sb $sb -sf $sf -fn $fn -i -l $l -p "$p" | \ sed 's/^.* //g' |\ ${SHELL:-"/bin/sh"} & ``` Toutefois, cela ne s'utilise qu'au clavier. Qu'à cela ne tienne, on va patcher dmenu. Cependant, comme les patches ne mettre pas en évidence ce que la souris survole, je l'ai modifié un peu. => http://tools.suckless.org/dmenu/patches/mouse-support/ patcher dmenu => https://clbin.com/jJTNy modifié un peu Maintenant, ça ressemble à ça : => /pub/videos/ddesktop.mp4 Finalement, on peut aussi très bien l'intégrer à un autre environnement. Par exemple, on peut créer un fichier menu à inclure pour fluxbox (ça c'est pour arpi :P). Dans le menu de fluxbox : ``` [submenu] (Apps) [include] (~/.fluxbox/fluxbox.automenu) [end] ``` Un fichier fluxbox-automennu appelé en début de session pour créer le menu : ``` IFS=':' lsdesktop -s ":"|\ while read -r n c; do echo "[exec] (${n}) {${c}}" done ``` Ce dernier se lance ainsi : ``` sh fluxbox-automenu > ~/.fluxbox/fluxbox.automenu ``` On doit pouvoir faire de même avec d'autres outils :) ### Une réaction? => mailto:bla@bla.si3t.ch?subject="Simple-lanceur-d'applications-(dmenu,-lsdesktop)" 📧 Envoyez votre commentaire par mail. => mailto:bla+subscribe@bla.si3t.ch 📫 Abonnez-vous pour recevoir les réponses => /log/commentaires/ 📚 Consultez les archives. => mailto:bla+unsubscribe@bla.si3t.ch 💨 Vous désinscrire