dmenu ako prepínač okien (nanoblog)
V subreddite venovanom Emacsu si niekto povzdychol, že prečo sa vývojári desktopových prostredí neinšpirujú Emacsom a jeho prácou s bufframi. Ako príklad uviedol možnosť prepínania sa medzi bufframi pomocou fuzzy zadávania názvu. A pritom sa to ľahko implementuje.
IceWM a dva spôsoby prepínania okien
IceWM, ktorý používam viac ako dekádu, takmer dve, nevybočuje zo zaužívaného spôsobu prepínania okien pomocou klávesnice, ktorý zaviedol prastarý Windows.
Teda: Alt + Tab pre prepínanie okien na aktívnej ploche, Super + ESC pre prepínanie okien v rámci všetkých plôch (o ktorých si samozrejme užívatelia Windows mohli iba nechať zdať, hoci staré okenné manažéry ako twm ich už poznali).
![]() |
| Obr. 1: Klasické prepínanie okien na jednej ploche |
![]() |
| Obr. 2: … a prepínanie v rámci všetkých plôch |
Fuzzy prepínanie pomocou dmenu + wmctrl
No a ako na to „fuzzy“ prepínanie s možnosťou zadávania názvu, resp. jeho časti?
Po dlhom čase som si spomenul na známy dmenu a wmctrl.
Len na osvieženie pamäte:
dmenu je jednoduchý nástroj na výber z ponuky v grafickom prostredí, asi len pre X11, ktorý som prvýkrát registroval, keď začal byť populárny okenný manažér i3. Umožňuje zadávať text na vyhľadávanie a vyberať položky zo zoznamu. Jeho výhodou je, že dokáže prijať štandardný vstup a ten zobraziť ako položky menu.
wmctrl umožňuje manipulovať s oknami z príkazového riadku. Dokáže získať zoznam otvorených okien, meniť ich pozíciu a veľkosť,… a prepnúť medzi oknami. A ešte aj iné veci.
Takže skript je jednoduchý — keď sa to nakombinuje, môže to vyjsť 😏.
#!/bin/bash windows=$(wmctrl -l | awk '{$1=$2=$3=""; print $0}' | sed 's/^\s*//g' | \ dmenu -i -p "Vyberte okno:" -l 5 -fn "Iosevka Term"-14 \ -nb '#ffffff' -nf '#000000' -sb '#408080' -sf '#ffffff') if [ -n "$windows" ]; then wmctrl -activate -r "$(echo $windows | cut -d' ' -f1-)" fi
Myslím, že to veľký opis nepotrebuje. Do premennej windows sa uloží výstup z wmctrl -l (zoznam okien), z neho odrežeme tri nepotrebné stĺpce, aby ostal len názov okna, ktorý sa posunie do dmenu, s nejakými jeho dizajnovými parametrami (aby mi to farebne pasovalo do témy vzhľadu).
A ak je niečo zvolené, tak v ďalšom kroku sa do toho okna prepne.
cut -d' ' -f1- zahrnie celý názov okna, aj keď obsahuje medzery.
A to je všetko.
![]() |
| Obr. 2: dmenu v činnosti |
Raz darmo, v slobodnom svete nie je nič nemožné. Takmer. A aj keď je to drobnosť, prináša to radosť už len z toho pocitu, že je to možné 😍.




Pre pridávanie komentárov sa musíte prihlásiť.