80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
---
|
|
title: Howto dmenu
|
|
categories: 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\nitem 1\nitem 2\nitem 3' | dmenu
|
|
~~~
|
|
|
|
Une fois prêt, une barre apparaîtra en haut de l'écran avec une zone d'entrée de texte à gauche pour filter suivie des différents éléments. **`dmenu` capture toutes les entrées du clavier**. On peut alors entrer du texte pour filtrer les éléments.
|
|
|
|
`dmenu` est contrôlé uniquement avec le clavier. Quelques raccourcis :
|
|
|
|
* `Droite` ou `Ctrl+n` : sélectionner l'élément affiché suivant ;
|
|
* `Gauche` ou `Ctrl+p` : sélectionner l'élément affiché précédent ;
|
|
* `Début` ou `Ctrl+a` : sélectionner le premier élément affiché ;
|
|
* `Fin` ou `Ctrl+e` : sélectionner le dernier élément affiché ;
|
|
* `Entrée` : valider l'élément sélectionné et quitter ;
|
|
* `Échap` : quitter avec une 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_.
|
|
|
|
> L'espace après les options `-l` et `-p` est nécessaire.
|
|
|
|
### 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>`
|
|
|
|
~~~ { .bash }
|
|
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
|
|
}
|
|
~~~
|
|
|