dmenu ako prepínač okien (nanoblog)

Dnes | 15:04 | Richard | Richard

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é 😍.