Assorted tidbits and projects

Tagging » History » Version 38

Anonymous, 04/07/2011 04:49 PM

1 38
h1. Tagging\015\012\015\012{{>toc}}\015\012\015\012[[Tags]] are generally used in [[subtle]] for placement of windows. This placement is *mandatory*, that means that  - aside from other tiling window managers - windows _must have_ a matching [[Tags|tag]] to be on a certain [[Views|view]]. This also includes that windows that are started on a certain view will not automatically be placed there.\015\012\015\012There are two ways to define a [[Tags|tag]] in the [[config]]:\015\012\015\012h2. Simple\015\012\015\012The simple way just needs a name and a regular expression to just handle the placement:\015\012\015\012<pre><code class="ruby">tag "tag", "xterm"</code></pre>\015\012\015\012h2. Extended\015\012\015\012Additionally tags can do a lot more then just control the placement - they also have properties than can define and control some aspects of a window like the default [[gravity]] or the default screen per view.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "tag" do\015\012  match   "xterm|[u]?rxvt"\015\012  gravity :center\015\012end\015\012</code></pre>\015\012\015\012h2. Default\015\012\015\012Whenever a window has no [[Tagging|tags]] it will get the +default+ [[Tagging|tag]] and be placed on the default view. The +default+ view can either be set by the user with adding the +default+ [[Tagging|tag]] to a view by choice or otherwise the first defined view will be chosen automatically.\015\012\015\012Example:\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012view "terms", "terms",\015\012view  "www", "default|browser",\015\012view  "dev", "editor"\015\012</code></pre>\015\012\015\012h2. Properties\015\012\015\012Additionally [[tagging|tags]] can do a lot more then just control the placement - they also have properties than can define and control some aspects of a window like the default [[gravity]] or the default screen per view.\015\012\015\012h3. float\015\012\015\012This property either sets the tagged client floating or prevents it from being floating depending on the value.\015\012<pre>{{hide}}<code class="ruby">\015\012tag "float" do\015\012  match"xterm"\015\012  float true\015\012end\015\012\015\012tag "nofloat" do\015\012  match "xterm"\015\012  float false\015\012end\015\012</code></pre>\015\012\015\012h3. full\015\012\015\012This property either sets the tagged client to fullscreen or prevents it from being set to fullscreen depending on the value.\015\012<pre>{{hide}}<code class="ruby">\015\012tag "full" do\015\012  match "xterm"\015\012  full  true\015\012end\015\012\015\012tag "nofull" do\015\012  match "xterm"\015\012  full  false\015\012end\015\012</code></pre>\015\012\015\012h3. geometry\015\012\015\012This property sets a certain geometry as well as floating to the [[Tagging|tagged]] cient, but +only+ on [[views]] that have this tag too. It expects an "array": with *x*, *y*, *width* and *height* values whereas width and height *must* be >0.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "geometry" do\015\012  match    "xterm"\015\012  geometry [ 10, 10, 100, 100 ]\015\012end\015\012</code></pre>\015\012\015\012h3. gravity\015\012\015\012This property sets a certain to [[gravity]] to the tagged client, but +only+ on views that have this tag too.\015\012<pre>{{hide}}<code class="ruby">\015\012tag "gravity" do\015\012  match   "xterm"\015\012  gravity :center\015\012end\015\012</code></pre>\015\012\015\012h3. match\015\012\015\012This property adds matching patterns to a [[Tagging|tag]], a [[Tagging|tag]] can have more than one. Matching works either via plaintext, regex (see "regex(7)": or window id. Per default tags will only match the "WM_NAME": and the "WM_CLASS": portion of a client.\015\012\015\012This can be changed by following possible values:\015\012\015\012| *&#58;name*     | Match the WM_NAME which is also visible in the [[panel]] |\015\012| *&#58;instance* | Match the {{color(#ff0000, WM_CLASS)}}                   |\015\012| *&#58;class*    | Match the {{color(#0000ff, WM_CLASS)}}                   |\015\012| *&#58;role*     | Match the window role                                    |\015\012| *&#58;type*     | Match the window type                                    |\015\012\015\012\015\012There are several ways to get these values, here are the most common:\015\012\015\012* "xprop": Just select the window and have a look for the "WM_CLASS": line which usually look like this:\015\012\015\012p{class:pre}. WM_CLASS(STRING) = "{{color(#ff0000, urxvt)}}", "{{color(#0000ff, URxvt)}}")\015\012\015\012* [[subtler]]: Run *[[subtler]] -cl* and look for the matching line:\015\012\015\012p{class:pre}. 0x800007 * 1 100x100 5 0 --- {{color(#ff0000, xterm)}} ({{color(#0000ff,XTerm)}})\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "match" do\015\012  match [ :title, :class ] => "xterm"\015\012end\015\012\015\012tag "match" \015\012  match "xterm"\015\012end\015\012</code></pre>\015\012\015\012h3.  exclude\015\012\015\012This property works exactly the same way as *match*, but it _excludes_ clients that match from this [[tagging|tag]]. That can be helpful with catch-all [[tagging|tags]] e.g. for console apps.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "exclude" do\015\012  match   "urxvt"\015\012  exclude :instance => "irssi"\015\012end\015\012</code></pre>\015\012\015\012h3. position\015\012\015\012This property works like the [[Tagging#geometry|geometry]] property, but just sets a certain position to the [[Tagging|tagged]] client on [[views]] with a common [[tagging|tag]]. It expects an "array": with a *x* and a *y* value.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "position" do\015\012  match    "xterm"\015\012  position [ 10, 10 ]\015\012end\015\012</code></pre>\015\012\015\012h3. resize\015\012\015\012This property either enables or disables honoring of client resize hints and is independent of the global option.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "resize" do\015\012  match  "xterm"\015\012  resize true\015\012end\015\012</code></pre>\015\012\015\012h3. stick\015\012\015\012This property either sets the [[Tagging|tagged]] client to stick or prevents it from being set to stick depending on the value. Stick clients are visible on +every+ view.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "stick" do\015\012  match "xterm"\015\012  stick true\015\012end\015\012\015\012tag "nostick" do\015\012  match "xterm"\015\012  stick false\015\012end\015\012</code></pre>\015\012\015\012h3. urgent\015\012\015\012This property either sets the [[Tagging|tagged]] client to be urgent or prevents it from being urgent depending on the value. Urgent clients will get keyboard and mouse focus +automatically+.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "urgent" do \015\012  match  "xterm"\015\012  urgent true\015\012end\015\012\015\012tag "nourgent" do\015\012  match  "xterm"\015\012  urgent false\015\012end\015\012</code></pre>\015\012\015\012h3. type\015\012\015\012This property sets the [[Tagging|tagged]] client to be treated as a specific window type though as the window sets the type itself. \015\012\015\012Following types are possible:\015\012\015\012| *&#58;desktop* | Treat as desktop window (__NET_WM_WINDOW_TYPE_DESKTOP_)  |\015\012| *&#58;dock*    | Treat as dock window (__NET_WM_WINDOW_TYPE_DOCK_)        |\015\012| *&#58;toolbar* | Treat as toolbar windows (__NET_WM_WINDOW_TYPE_TOOLBAR_) |\015\012| *&#58;splash*  | Treat as splash window (__NET_WM_WINDOW_TYPE_SPLASH_)    |\015\012| *&#58;dialog*  | Treat as dialog window (__NET_WM_WINDOW_TYPE_DIALOG_)    |\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "desktop" do \015\012  match   "xterm"\015\012  desktop true\015\012end\015\012</code></pre>\015\012\015\012h2. Examples\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "bashrun" do\015\012  match  "bashrun"\015\012  size   [ 50, 1000, 200, 28 ]#\015\012  stick  true\015\012  float  true\015\012  urgent true\015\012  screen 0\015\012end\015\012\015\012tag "browser" do\015\012  match   "chrom[e|ium]"\015\012  gravity :center\015\012  screen  1\015\012end\015\012</code></pre>