wiki/HowtoDmenu.md
Alexis Ben Miloud--Josselin c790dbb6bb Ajouter Howto dmenu
2023-01-16 15:34:00 +01:00

2.2 KiB

title categories
Howto dmenu desktop menu suckless x

Site officiel : https://tools.suckless.org/dmenu/

dmenu est logiciel graphique (sur X) écrit en C pour générer un menu à partir d'une liste.

Certains gestionnaires de fenêtre peuvent utiliser dmenu pour lister l'ensemble les programmes dans la variable PATH et permettre à l'utilisateur de choisir le programme à exécuter. C'est une façon d'utiliser dmenu.

dmenu affiche un menu à partir de son entrée standard. Une ligne est un élément du menu. L'utilisateur peut selectionner un ou plusieurs éléments. Les éléments choisis sont écrits sur la sortie standard.

Installation

Sous Debian

Le logiciel se trouve dans le paquet suckless-tools

# apt install suckless-tools

Utilisation

dmenu sera toujours invoqué dans une chaîne de pipes :

$ commande | dmenu | commande
$ dmenu < fichier | commande
$ commande | dmenu > fichier
$ variable=$(commande | dmenu)

Pour s'entrainer, on peut utiliser cette commande :

$ printf 'élément 1\nélément 2\nélément 3\n' | dmenu

dmenu est contrôlé uniquement avec le clavier. Quelques raccourcis :

  • Droite ou Ctrl+n : élément suivant affiché ;
  • Gauche ou Ctrl+p : élément précédent affiché ;
  • Début ou Ctrl+a : premier élément affiché ;
  • Fin ou Ctrl+e : dernier élément affiché ;
  • Entrée : valider l'élément sélectionné et quitter ;
  • Échap : quitter avec un erreur ;
  • Ctrl+Entrée : valider l'élément sélectionné.

Options couramments utilisées :

  • -i : recherche insensible à la case ;
  • -l <n> : afficher le menu verticalement, en affichant <n> lignes en même temps ;
  • -p <str> : définir un prompt.

Exemple : parcourir une hiérarchie de fichiers

Fonction récursive en Bash pour parcourir une hiérarchie de fichiers.

dmenu peut être embarqué dans une fenêtre avec l'option -w <window_id>

dmenu_browser() {
    sel="$(ls -FL | grep '/$' | dmenu -i -l 11 -p "$(pwd)" -w "${WINDOWID}")"
    if [[ -d "${sel}" ]]
    then
        if cd "${sel}"
        then
            dmenu_browser
        fi
    fi
}