spmenu-wiki/pages/Client rules.md
2023-02-01 20:03:56 +00:00

2.7 KiB

Client rules

The Rule array allows you to specify rules for X11 clients based on factors such as WM_CLASS and WM_NAME. In the English language, that means you can specify how clients are tiled based on the class, instance or title of said client.

To get this information, you can use the X11 utility xprop to get information about a client. If you want to see in detail how the rule system works, refer to function applyrules and the Rule struct in speedwm.c.

Rule structure

  1. Class

Internally: const char *class

  1. Instance

Internally: const char *instance

  1. Title

Internally: const char *title

  1. Tags

Internally: unsigned int tags

  1. isfloating

Internally: int isfloating

  1. ispermanent

Internally: int ispermanent

  1. isterminal

Internally: int isterminal

  1. noswallow

Internally: int noswallow

  1. Monitor

Internally: int monitor

  1. unmanaged

Internally: int unmanaged

  1. ignoretransient

Internally: int ignoretransient

  1. floatx

Internally: int floatx

  1. floaty

Internally: int floaty

  1. floatw

Internally: int floatw

  1. floath

Internally: int floath

  1. scratchkey

Internally: const char scratchkey

Class

Every X11 client has a class. Even the window manager, speedwm in this case which has the class speedwm has a class. speedwm is not responsible for setting a client's class, clients using X11 libraries should set this themselves. speedwm just retrieves this information when a client is mapped.

As mentioned previously, you can get the class for a client by running the command-line utility xprop on any client. Running xprop on speedwm's bar for example will return:

[anon@arch ~]$ xprop WM_CLASS(STRING) = "speedwm", "speedwm"

Running it and clicking on the root window however will return information such as the different tags and their glyphs, supported atoms, loaded xrdb resources and information such as the focused client which is not relevant here.

Now, some clients may have multiple classes, st for example has both st and St. Note the class of the program you want to use. Let's say, we want to set a rule for Chromium. Running xprop | grep CLASS returns the following information.

[anon@arch ~]$ xprop | grep CLASS WM_CLASS(STRING) = "chromium", "Chromium"

This means our class here is chromium. That would also be the value of const char *class or simply the class. This means if the class matches what we specified (ie. chromium), and provided the instance and title also matches an existing client, we set the other values to what is specified.

Instance

This allows us to specify which instance of the class