wiki/HowtoDmenu.md

97 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

2023-01-16 15:34:00 +01:00
---
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`.
2023-01-17 12:39:07 +01:00
`dmenu` affiche un menu à partir de son entrée standard. Une ligne est un élément du menu. L'utilisateur peut sélectionner un ou plusieurs éléments. Les éléments choisis sont écrits sur la sortie standard.
2023-01-16 15:34:00 +01:00
## Installation
### Sous Debian
Le logiciel se trouve dans le paquet `suckless-tools`
~~~
# apt install suckless-tools
~~~
## Utilisation
Pour s'entrainer, on peut utiliser cette commande :
~~~
2023-01-16 16:21:35 +01:00
$ printf 'élément 1\nélément 2\nélément 3\nitem 1\nitem 2\nitem 3' | dmenu
2023-01-16 15:34:00 +01:00
~~~
2023-01-16 17:39:39 +01:00
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.
2023-01-16 16:21:35 +01:00
2023-01-16 15:34:00 +01:00
`dmenu` est contrôlé uniquement avec le clavier. Quelques raccourcis :
* `Bas` ou `Droite` ou `Ctrl+n` : sélectionner l'élément affiché suivant ;
* `Haut` ou `Gauche` ou `Ctrl+p` : sélectionner l'élément affiché précédent ;
2023-01-16 16:21:35 +01:00
* `Début` ou `Ctrl+a` : sélectionner le premier élément affiché ;
* `Fin` ou `Ctrl+e` : sélectionner le dernier élément affiché ;
2023-01-16 15:34:00 +01:00
* `Entrée` : valider l'élément sélectionné et quitter ;
2023-01-16 16:22:25 +01:00
* `Échap` : quitter avec une erreur ;
2023-01-16 15:34:00 +01:00
* `Ctrl+Entrée` : valider l'élément sélectionné.
> Lorsque `dmenu` est invoqué en mode vertical, avec l'option `-l <n>`, les touches `Droite` et `Gauche` déplacent le curseur au lieu de changer l'élément sélectionné.
2023-01-17 12:39:07 +01:00
Options couramment utilisées :
2023-01-16 15:34:00 +01:00
* `-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.
2023-01-17 12:31:31 +01:00
### Exemple : ouvrir des fichiers
~~~
$ find ~/Documents ~/Musiques | dmenu -i -l 22 | xargs xdg-open
~~~
2023-01-16 15:34:00 +01:00
### 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>`
2023-01-17 12:31:31 +01:00
~~~
2023-01-16 15:34:00 +01:00
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
}
~~~
2023-01-17 12:31:31 +01:00
### Exemple : exécuter des commandes prédéfinies
Le fichier texte `~/.my_commands` contient :
~~~
xscreensaver-command -lock
xterm -title 'calculator' -e 'bc -l'
xterm -title 'irc' -e 'ssh -t my.host -- screen -r my_irc_session'
xclip -o -sel clip > ~/clipboard_"$(date -Isec)"
~~~
Choisir une commande à exécuter :
~~~
$ dmenu -i -l 11 -p 'run:' < ~/.my_commands | sh
~~~
> On peut _binder_ cette commande sur un raccourci clavier qui va bien dans son gestionnaire de fenêtre.