Window switcher sneltoets in openbox

Waarschijnlijk gebruik je regelmatig Alt + Tab om naar een ander venster te schakelen. Stel dat je regelmatig met dezelfde programma's werkt waarbij je een stuk of vijf vensters open hebt staan. In plaats van ieder venster met meerdere keren Alt + Tab te benaderen kun je er ook voor kiezen om een toets combinatie te kiezen die direct naar het juiste venster schakelt. Zo kun je je focus bij je werk houden in plaats van te kijken of je naar het goede venster switched.

Als je nieuw bent met openbox lees dan in het artikel Lubuntu, lxde, openbox... een lichte snelle desktop omgeving waar en hoe je onderstaande aanpassingen kunt doorvoeren.

Window manager, het beheren van vensters


De window manager (in dit geval openbox) is dat gedeelte van de desktop omgeving (in dit geval LXDE) wat te maken heeft met de weergave van de vensters waarin de programma's worden getoond. Zo heb je het venster waarin je browser wordt getoond en bijvoorbeeld een venster waarin je editor of je terminal wordt getoond. We spreken over vensters en niet over programma's omdat een programma meerdere vensters kan gebruiken. De browser kan bijvoorbeeld een apart venster openen voor een nieuwe website (openen in nieuw venster).

Global Actions versus Window Actions


Op de Wiki van openbox zijn de acties onderverdeeld in Global en Window Actions.
  • Global Action: het uitvoeren van een actie vanuit de gehele omgeving, bijvoorbeeld een applicatie openen.
  • Window Action: het uitvoeren van een actie bij één of meerdere specifieke (al geopende) vensters, bijvoorbeeld groter of kleiner maken.

Window Actions en het venster met focus


Wanneer je een eenvoudige window actie met bijvoorbeeld een keybind uitvoerd zal dat worden toegepast op het venster waar op dat moment de focus op is.
Een dergelijke actie kan er bijvoorbeeld zo uitzien (Ctrl + Shift + D):

<keybind key="C-S-d">
  <action name="Decorate"/>
</keybind>

Of zo (Windowstoets + Shift + D):

<keybind key="W-S-d">
  <action name="Undecorate"/>
</keybind>

Stel dat je meerdere vensters hebt geopend en je browser is op dat moment het venster wat actief is (de focus heeft) dan zal bovenstaande actie alleen bij de browser worden toegepast. Alleen de browser krijgt of verliest dus de decoratie.

Window Actions voor andere vensters


In ons geval willen we dat er een actie wordt uitgevoerd op een venster dat (waarschijnlijk) nog geen focus heeft. Omdat het venster de focus nog niet heeft kunnen we niet gebruik maken van de standaard combinatie van keybind en actie.

Om onze keybind bij het goede venster te krijgen maken we gebruik van ForEach. Bij openbox is ForEach niet alleen een loop die alle vensters langs gaat maar op dat zelfde moment ook een voorwaarde. Als één van de vensters voldoet aan de voorwaarde wordt de actie uitgevoerd.

De stappen zijn dan als volgt:

  • De Keybind roept de ForEach actie aan
  • ForEach gaat alle vensters langs en kijkt of één van de vensters voldoet aan de voorwaarde
  • In dit geval hebben we class en name als voorwaarde opgegeven
  • Op het moment dat Foreach het window van Firefox heeft gevonden worden de volgende acties voor dat venster uitgevoerd
  • Deze acties zijn: Focus, Raise en Unshade

<keybind key="W-A-f">
  <action name="foreach">
    <class>Firefox</class>
    <name>Navigator</name>
    <then>
      <action name="Focus"/>
      <action name="Raise"/>
      <action name="Unshade"/>
    </then>
    <else>
    </else>
  </action>
</keybind>