Tagging » History » Version 64
Version 63 (Anonymous, 12/22/2017 03:23 PM) → Version 64/66 (Christoph Kappel, 01/23/2018 12:23 PM)
h1. Tagging
{{>toc}}
[[Tags]] Tagging\015\012\015\012{{>toc}}\015\012\015\012\015\012[[Tags]] are generally used in [[subtle]] for placement of [[Clients|clients]]. This placement is *mandatory*, that means that - aside from other tiling window managers - [[Clients|clients]] _must have_ a matching [[Tags|tag]] to be on a certain [[Views|view]]. This also includes that [[Clients|clients]], that are started on a certain [[Views|view]], *aren't* automatically placed there.
There there.\015\012\015\012There are two ways to define a [[Tags|tag]] in the [[config]]:
h2. Simple
The [[config]]:\015\012\015\012h2. Simple\015\012\015\012The simple way just needs a name and a "regular expression":http://en.wikipedia.org/wiki/Regular_expression to just handle the placement:
<pre><code placement:\015\012\015\012<pre><code class="ruby">tag "tagname", "xterm"</code></pre>
h2. Extended
Additionally "xterm"</code></pre>\015\012\015\012h2. Extended\015\012\015\012Additionally [[Tagging|tags]] can do a lot more then just control the placement - they also have properties to define and control some aspects of a [[Clients|client]] like the [[gravity]] or [[Clients#Modes|modes]].
<pre><code class="ruby">
tag [[Clients#Modes|modes]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "tag" do
do\015\012 match "xterm|[u]?rxvt"
"xterm|[u]?rxvt"\015\012 gravity :center
end
</code></pre>
h2. Default
Whenever :center\015\012end\015\012</code></pre>\015\012\015\012h2. Default\015\012\015\012Whenever a [[Clients|client]] has no [[Tagging|tags]] it gets the +default+ [[Tagging|tag]] and is placed on the [[Views#Default|default view]].
Example:
<pre><code class="ruby">
view view]].\015\012\015\012Example:\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012view "terms", "terms",
view "terms",\015\012view "www", "default|browser",
view "default|browser",\015\012view "dev", "editor"
</code></pre>
h2. Modes
Following "editor"\015\012</code></pre>\015\012\015\012h2. Modes\015\012\015\012Following modes exist:
h3. exist:\015\012\015\012h3. Borderless
Enables \015\012\015\012Enables the [[Clients#Borderless|borderless mode]] for [[Tagging|tagged]] [[clients]]. When set, any borders around the [[clients|client]] are absent.
<pre><code class="ruby">
tag absent.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "borderless" do
do\015\012 match "xterm"
"xterm"\015\012 set :borderless
end</code></pre>
h3. Fixed
Enables :borderless\015\012end</code></pre>\015\012\015\012h3. Fixed\015\012\015\012Enables the [[Clients#Fixed|fixed mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] cannot be resized anymore.
<pre><code class="ruby">
tag anymore.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "fixed" do
do\015\012 match "xterm"
"xterm"\015\012 set :fixed
end</code></pre>
h3. Floating
This :fixed\015\012end</code></pre>\015\012\015\012h3. Floating\015\012\015\012This property enables the [[Clients#Floating|floating mode]] [[Tagging|tagged]] [[clients]].
<pre><code class="ruby">
tag [[clients]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "floating" do
do\015\012 match "xterm"
"xterm"\015\012 set :floating
end
</code></pre>
h3. Full
Enable :floating\015\012end\015\012</code></pre>\015\012\015\012h3. Full\015\012\015\012Enable the [[Clients#Fullscreen|fullscreen mode]] for [[Tagging|tagged]] [[Clients|clients]]. When set, the [[clients|client] covers the whole screen size.
<pre><code class="ruby">
tag size.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "full" do
do\015\012 match "xterm"
"xterm"\015\012 set :full
end
</code></pre>
h3. Resize
Enable :full\015\012end\015\012</code></pre>\015\012\015\012h3. Resize\015\012\015\012Enable the [[Clients#Resize|resize mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] honors "size hints":http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.2.3 of the [[clients]], that define various size constraints like sizes for columns or rows of a terminal.
<pre><code class="ruby">
tag terminal.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "resize" do
do\015\012 match "xterm"
"xterm"\015\012 set :resize
end
</code></pre>
h3. Sticky
Enable :resize\015\012end\015\012</code></pre>\015\012\015\012h3. Sticky\015\012\015\012Enable the [[Clients#Sticky|sticky mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] keeps the [[clients|client] on the current [[multihead|screen]], regardless of the [[tagging|tags]].
Supported [[tagging|tags]].\015\012\015\012Supported values are either true or a number to specify a screen.
<pre><code class="ruby">
tag screen.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "sticky" do
do\015\012 match "xterm"
"xterm"\015\012 set :sticky
end
</code></pre>
h3. Urgent
Enable :sticky\015\012end\015\012</code></pre>\015\012\015\012h3. Urgent\015\012\015\012Enable the [[Clients#Urgent|urgent mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] automatically sets this [[client]] to [Clients#Urgent|urgent]].
<pre><code class="ruby">
tag [Clients#Urgent|urgent]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "urgent" do
do\015\012 match "xterm"
"xterm"\015\012 set :urgent
end
</code></pre>
h3. Zaphod
Enable :urgent\015\012end\015\012</code></pre>\015\012\015\012h3. Zaphod\015\012\015\012Enable the [[Clients#Zaphod|zaphod mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] spans across all connected [[multihead|screens]].
<pre><code class="ruby">
tag [[multihead|screens]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "zaphod" do
do\015\012 match "xterm"
"xterm"\015\012 set :zaphod
end</code></pre>
h2. Options
Following :zaphod\015\012end</code></pre>\015\012\015\012h2. Options\015\012\015\012Following options exist:
h3. Set
Set exist:\015\012\015\012h3. Set\015\012\015\012Set various [[Tagging#Modes|modes] for [[Tagging|tagged]] [[clients]]. Multiple modes can be set separated by comma.
<pre><code class="ruby">
tag comma.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "modes" do
do\015\012 match "xterm"
"xterm"\015\012 set :floating, :sticky
end
</code></pre>
h3. Geometry
Set :sticky\015\012end\015\012</code></pre>\015\012\015\012h3. Geometry\015\012\015\012Set a certain geometry for the [[Tagging|tagged]] [[Clients|client]] and put it in floating mode, but +only+ on [[views]] that have this [[Tagging|tag]] in common. Expected is an "array":http://www.ruby-doc.org/core/classes/Array.html with *x*, *y*, *width* and *height* values whereas width and height *must* be >0.
<pre><code class="ruby">
tag >0.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "geometry" do
do\015\012 match "xterm"
"xterm"\015\012 geometry [ 10, 10, 100, 100 ]
end
</code></pre>
h3. Gravity
Sets ]\015\012end\015\012</code></pre>\015\012\015\012h3. Gravity\015\012\015\012Sets a certain to [[gravity]] to the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] that have this [[Tagging|tag]] in common.
<pre><code class="ruby">
tag common.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "gravity" do
do\015\012 match "xterm"
"xterm"\015\012 gravity :center
end
</code></pre>
h3. Match
Adds :center\015\012end\015\012</code></pre>\015\012\015\012h3. Match\015\012\015\012Adds a matching patterns to a [[Tagging|tag]], this can be done more than once. Matching works either via plaintext, "regular expression":http://en.wikipedia.org/wiki/Regular_expression (see "regex(7)":http://linux.die.net/man/7/regex) or a [[Tagging#Selector|selector]] based on different values/properties of a [[Clients|client]].
h4. [[Clients|client]].\015\012\015\012h4. Regular expression
When expression\015\012\015\012When a "regular expression":http://en.wikipedia.org/wiki/Regular_expression is used, [[subtle]] uses both parts of the [[Clients#WM_CLASS|WM_CLASS]] property for [[Tagging|matching]].
h4. Selector
A [[Tagging|matching]].\015\012\015\012h4. Selector\015\012\015\012A [[Tagging#Selector|selector]] is a more complicated, but finer grained way to match [[Clients|clients]] and it even allows to combine multiple matcher with simple [[Tagging#Boolean_logic|boolean logic]].
Every logic]].\015\012\015\012Every [[Tagging#Selector|selector]] consists of a type and a value:
<pre><code class="ruby">
tag value:\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "example" do
do\015\012 match type: value
end
</code></pre>
Following value\015\012end\015\012</code></pre>\015\012\015\012Following types exist:
| exist:\015\012\015\012| *:name* | Match the [[Client#WM_NAME|window name]] |
| |\015\012| *:instance* | Match the [[Client#WM_CLASS|window instance name]] |
| |\015\012| *:class* | Match the [[Client#WM_CLASS|window class name]] |
| |\015\012| *:role* | Match the [[Client#WM_ROLE|window role]] |
| |\015\012| *:type* | Match the [[Clients#Types|window type]] |
{{needs(r2830)}}
h4. |\015\012\015\012{{needs(r2830)}}\015\012\015\012h4. Boolean logic
"Boolean logic\015\012\015\012"Boolean logic":http://en.wikipedia.org/wiki/Boolean_algebra_(logic) allows to select a broader range of [[Clients|clients]] without difficult "regular expressions":http://en.wikipedia.org/wiki/Regular_expression and/or a required combination of multiple [[Tagging#Selector|selector]] types.
h5. AND
All types.\015\012\015\012h5. AND\015\012\015\012All [[Tagging#Selector|selector]] are required in order for this [[Tagging|tag]] to be applied.
<pre><code class="ruby">
tag applied.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "AND" do
do\015\012 match instance: "xterm", instance: "urxvt"
end
</code></pre>
h5. OR
Only "urxvt"\015\012end\015\012</code></pre>\015\012\015\012h5. OR\015\012\015\012Only one matching [[Tagging#Selector|selector]] is required in order for this [[Tagging|tag]] to be applied.
<pre><code class="ruby">
tag applied.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "OR" do
do\015\012 match "xterm"
"xterm"\015\012 match "urxvt"
end
</code></pre>
{{info(When "urxvt"\015\012end\015\012</code></pre>\015\012\015\012{{info(When dealing with console-based apps please keep in mind, that [[Tagging|tagging]] via [[Client#WM_NAME|WM_NAME]] won't work as expected. [[Tagging|Tags]] are usually applied *when* the terminal starts and *before* the shell with the app is spawned.)}}
Please spawned.)}}\015\012\015\012Please also check the "How do I tag console based programs?":http://subforge.org/ezfaq/show/subtle?faq_id=15 FAQ entry.
{{needs(r3209)}}
h3. On_match
Add entry.\015\012\015\012{{needs(r3209)}}\015\012\015\012h3. On_match\015\012\015\012Add a "Ruby":http://ruby-lang.org proc to a [[tagging|tag]] that is executed whenever the [[tagging|tag]] is applied to a [[clients|client]]. This allows to add logic to a [[tagging|tag]] to ease e.g. simple placement [[tagging|tags]].
<pre><code class="ruby">
tag [[tagging|tags]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "gimp" do
do\015\012 match role: "gimp.*"
"gimp.*"\015\012\015\012 on_match do |c|
|c|\015\012 c.gravity = ("gimp_" + c.role.split("-")[1]).to_sym
end
end
</code></pre>
h3. Position
Similar c.role.split("-")[1]).to_sym\015\012 end\015\012end\015\012</code></pre>\015\012\015\012h3. Position\015\012\015\012Similar to the geometry option, set the x/y coordinates of the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] with common [[Tagging|tag]].
Expected \015\012\015\012Expected is an "array":http://www.ruby-doc.org/core/classes/Array.html with *x* and *y* values.
<pre><code class="ruby">
tag values.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "position" do
do\015\012 match "xterm"
"xterm"\015\012 position [ 10, 10 ]
end
</code></pre>
h3. Type
Set ]\015\012end\015\012</code></pre>\015\012\015\012h3. Type\015\012\015\012Set the window type of the [[Tagging|tagged]] [[Clients|client]], this forces it to be treated as a specific window type though as the window sets the type itself.
Following \015\012\015\012Following types are possible:
{{needs(r2905)}}
| possible:\015\012\015\012{{needs(r2905)}}\015\012\015\012| *:normal* | Treat as [[Clients#Normal|normal window]] |
| |\015\012| *:desktop* | Treat as [[Clients#Desktop|desktop window]] (__NET_WM_WINDOW_TYPE_DESKTOP_) |
| |\015\012| *:dock* | Treat as [[Clients#Dock|dock window]] (__NET_WM_WINDOW_TYPE_DOCK_) |
| |\015\012| *:toolbar* | Treat as [[Clients#Toolbar|toolbar windows]] (__NET_WM_WINDOW_TYPE_TOOLBAR_) |
| |\015\012| *:splash* | Treat as [[Clients#splash|splash window]] (__NET_WM_WINDOW_TYPE_SPLASH_) |
| |\015\012| *:dialog* | Treat as [[Clients#Dialog|dialog window]] (__NET_WM_WINDOW_TYPE_DIALOG_) |
<pre><code class="ruby">
tag |\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "desktop" do
do\015\012 match "xterm"
"xterm"\015\012 type :desktop
end
</code></pre>
h2. Examples
<pre><code class="ruby">
tag :desktop\015\012end\015\012</code></pre>\015\012\015\012h2. Examples\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "bashrun" do
do\015\012 match "bashrun"
"bashrun"\015\012 geometry [ 50, 1000, 200, 28 ]#
]#\015\012 stick true
true\015\012 urgent true
end
tag true\015\012end\015\012\015\012tag "browser" do
do\015\012 match "chrom[e|ium]"
"chrom[e|ium]"\015\012 gravity :center
end
</code></pre> :center\015\012end\015\012</code></pre>
{{>toc}}
[[Tags]] Tagging\015\012\015\012{{>toc}}\015\012\015\012\015\012[[Tags]] are generally used in [[subtle]] for placement of [[Clients|clients]]. This placement is *mandatory*, that means that - aside from other tiling window managers - [[Clients|clients]] _must have_ a matching [[Tags|tag]] to be on a certain [[Views|view]]. This also includes that [[Clients|clients]], that are started on a certain [[Views|view]], *aren't* automatically placed there.
There there.\015\012\015\012There are two ways to define a [[Tags|tag]] in the [[config]]:
h2. Simple
The [[config]]:\015\012\015\012h2. Simple\015\012\015\012The simple way just needs a name and a "regular expression":http://en.wikipedia.org/wiki/Regular_expression to just handle the placement:
<pre><code placement:\015\012\015\012<pre><code class="ruby">tag "tagname", "xterm"</code></pre>
h2. Extended
Additionally "xterm"</code></pre>\015\012\015\012h2. Extended\015\012\015\012Additionally [[Tagging|tags]] can do a lot more then just control the placement - they also have properties to define and control some aspects of a [[Clients|client]] like the [[gravity]] or [[Clients#Modes|modes]].
<pre><code class="ruby">
tag [[Clients#Modes|modes]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "tag" do
do\015\012 match "xterm|[u]?rxvt"
"xterm|[u]?rxvt"\015\012 gravity :center
end
</code></pre>
h2. Default
Whenever :center\015\012end\015\012</code></pre>\015\012\015\012h2. Default\015\012\015\012Whenever a [[Clients|client]] has no [[Tagging|tags]] it gets the +default+ [[Tagging|tag]] and is placed on the [[Views#Default|default view]].
Example:
<pre><code class="ruby">
view view]].\015\012\015\012Example:\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012view "terms", "terms",
view "terms",\015\012view "www", "default|browser",
view "default|browser",\015\012view "dev", "editor"
</code></pre>
h2. Modes
Following "editor"\015\012</code></pre>\015\012\015\012h2. Modes\015\012\015\012Following modes exist:
h3. exist:\015\012\015\012h3. Borderless
Enables \015\012\015\012Enables the [[Clients#Borderless|borderless mode]] for [[Tagging|tagged]] [[clients]]. When set, any borders around the [[clients|client]] are absent.
<pre><code class="ruby">
tag absent.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "borderless" do
do\015\012 match "xterm"
"xterm"\015\012 set :borderless
end</code></pre>
h3. Fixed
Enables :borderless\015\012end</code></pre>\015\012\015\012h3. Fixed\015\012\015\012Enables the [[Clients#Fixed|fixed mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] cannot be resized anymore.
<pre><code class="ruby">
tag anymore.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "fixed" do
do\015\012 match "xterm"
"xterm"\015\012 set :fixed
end</code></pre>
h3. Floating
This :fixed\015\012end</code></pre>\015\012\015\012h3. Floating\015\012\015\012This property enables the [[Clients#Floating|floating mode]] [[Tagging|tagged]] [[clients]].
<pre><code class="ruby">
tag [[clients]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "floating" do
do\015\012 match "xterm"
"xterm"\015\012 set :floating
end
</code></pre>
h3. Full
Enable :floating\015\012end\015\012</code></pre>\015\012\015\012h3. Full\015\012\015\012Enable the [[Clients#Fullscreen|fullscreen mode]] for [[Tagging|tagged]] [[Clients|clients]]. When set, the [[clients|client] covers the whole screen size.
<pre><code class="ruby">
tag size.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "full" do
do\015\012 match "xterm"
"xterm"\015\012 set :full
end
</code></pre>
h3. Resize
Enable :full\015\012end\015\012</code></pre>\015\012\015\012h3. Resize\015\012\015\012Enable the [[Clients#Resize|resize mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] honors "size hints":http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.2.3 of the [[clients]], that define various size constraints like sizes for columns or rows of a terminal.
<pre><code class="ruby">
tag terminal.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "resize" do
do\015\012 match "xterm"
"xterm"\015\012 set :resize
end
</code></pre>
h3. Sticky
Enable :resize\015\012end\015\012</code></pre>\015\012\015\012h3. Sticky\015\012\015\012Enable the [[Clients#Sticky|sticky mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] keeps the [[clients|client] on the current [[multihead|screen]], regardless of the [[tagging|tags]].
Supported [[tagging|tags]].\015\012\015\012Supported values are either true or a number to specify a screen.
<pre><code class="ruby">
tag screen.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "sticky" do
do\015\012 match "xterm"
"xterm"\015\012 set :sticky
end
</code></pre>
h3. Urgent
Enable :sticky\015\012end\015\012</code></pre>\015\012\015\012h3. Urgent\015\012\015\012Enable the [[Clients#Urgent|urgent mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] automatically sets this [[client]] to [Clients#Urgent|urgent]].
<pre><code class="ruby">
tag [Clients#Urgent|urgent]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "urgent" do
do\015\012 match "xterm"
"xterm"\015\012 set :urgent
end
</code></pre>
h3. Zaphod
Enable :urgent\015\012end\015\012</code></pre>\015\012\015\012h3. Zaphod\015\012\015\012Enable the [[Clients#Zaphod|zaphod mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] spans across all connected [[multihead|screens]].
<pre><code class="ruby">
tag [[multihead|screens]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "zaphod" do
do\015\012 match "xterm"
"xterm"\015\012 set :zaphod
end</code></pre>
h2. Options
Following :zaphod\015\012end</code></pre>\015\012\015\012h2. Options\015\012\015\012Following options exist:
h3. Set
Set exist:\015\012\015\012h3. Set\015\012\015\012Set various [[Tagging#Modes|modes] for [[Tagging|tagged]] [[clients]]. Multiple modes can be set separated by comma.
<pre><code class="ruby">
tag comma.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "modes" do
do\015\012 match "xterm"
"xterm"\015\012 set :floating, :sticky
end
</code></pre>
h3. Geometry
Set :sticky\015\012end\015\012</code></pre>\015\012\015\012h3. Geometry\015\012\015\012Set a certain geometry for the [[Tagging|tagged]] [[Clients|client]] and put it in floating mode, but +only+ on [[views]] that have this [[Tagging|tag]] in common. Expected is an "array":http://www.ruby-doc.org/core/classes/Array.html with *x*, *y*, *width* and *height* values whereas width and height *must* be >0.
<pre><code class="ruby">
tag >0.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "geometry" do
do\015\012 match "xterm"
"xterm"\015\012 geometry [ 10, 10, 100, 100 ]
end
</code></pre>
h3. Gravity
Sets ]\015\012end\015\012</code></pre>\015\012\015\012h3. Gravity\015\012\015\012Sets a certain to [[gravity]] to the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] that have this [[Tagging|tag]] in common.
<pre><code class="ruby">
tag common.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "gravity" do
do\015\012 match "xterm"
"xterm"\015\012 gravity :center
end
</code></pre>
h3. Match
Adds :center\015\012end\015\012</code></pre>\015\012\015\012h3. Match\015\012\015\012Adds a matching patterns to a [[Tagging|tag]], this can be done more than once. Matching works either via plaintext, "regular expression":http://en.wikipedia.org/wiki/Regular_expression (see "regex(7)":http://linux.die.net/man/7/regex) or a [[Tagging#Selector|selector]] based on different values/properties of a [[Clients|client]].
h4. [[Clients|client]].\015\012\015\012h4. Regular expression
When expression\015\012\015\012When a "regular expression":http://en.wikipedia.org/wiki/Regular_expression is used, [[subtle]] uses both parts of the [[Clients#WM_CLASS|WM_CLASS]] property for [[Tagging|matching]].
h4. Selector
A [[Tagging|matching]].\015\012\015\012h4. Selector\015\012\015\012A [[Tagging#Selector|selector]] is a more complicated, but finer grained way to match [[Clients|clients]] and it even allows to combine multiple matcher with simple [[Tagging#Boolean_logic|boolean logic]].
Every logic]].\015\012\015\012Every [[Tagging#Selector|selector]] consists of a type and a value:
<pre><code class="ruby">
tag value:\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "example" do
do\015\012 match type: value
end
</code></pre>
Following value\015\012end\015\012</code></pre>\015\012\015\012Following types exist:
| exist:\015\012\015\012| *:name* | Match the [[Client#WM_NAME|window name]] |
| |\015\012| *:instance* | Match the [[Client#WM_CLASS|window instance name]] |
| |\015\012| *:class* | Match the [[Client#WM_CLASS|window class name]] |
| |\015\012| *:role* | Match the [[Client#WM_ROLE|window role]] |
| |\015\012| *:type* | Match the [[Clients#Types|window type]] |
{{needs(r2830)}}
h4. |\015\012\015\012{{needs(r2830)}}\015\012\015\012h4. Boolean logic
"Boolean logic\015\012\015\012"Boolean logic":http://en.wikipedia.org/wiki/Boolean_algebra_(logic) allows to select a broader range of [[Clients|clients]] without difficult "regular expressions":http://en.wikipedia.org/wiki/Regular_expression and/or a required combination of multiple [[Tagging#Selector|selector]] types.
h5. AND
All types.\015\012\015\012h5. AND\015\012\015\012All [[Tagging#Selector|selector]] are required in order for this [[Tagging|tag]] to be applied.
<pre><code class="ruby">
tag applied.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "AND" do
do\015\012 match instance: "xterm", instance: "urxvt"
end
</code></pre>
h5. OR
Only "urxvt"\015\012end\015\012</code></pre>\015\012\015\012h5. OR\015\012\015\012Only one matching [[Tagging#Selector|selector]] is required in order for this [[Tagging|tag]] to be applied.
<pre><code class="ruby">
tag applied.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "OR" do
do\015\012 match "xterm"
"xterm"\015\012 match "urxvt"
end
</code></pre>
{{info(When "urxvt"\015\012end\015\012</code></pre>\015\012\015\012{{info(When dealing with console-based apps please keep in mind, that [[Tagging|tagging]] via [[Client#WM_NAME|WM_NAME]] won't work as expected. [[Tagging|Tags]] are usually applied *when* the terminal starts and *before* the shell with the app is spawned.)}}
Please spawned.)}}\015\012\015\012Please also check the "How do I tag console based programs?":http://subforge.org/ezfaq/show/subtle?faq_id=15 FAQ entry.
{{needs(r3209)}}
h3. On_match
Add entry.\015\012\015\012{{needs(r3209)}}\015\012\015\012h3. On_match\015\012\015\012Add a "Ruby":http://ruby-lang.org proc to a [[tagging|tag]] that is executed whenever the [[tagging|tag]] is applied to a [[clients|client]]. This allows to add logic to a [[tagging|tag]] to ease e.g. simple placement [[tagging|tags]].
<pre><code class="ruby">
tag [[tagging|tags]].\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "gimp" do
do\015\012 match role: "gimp.*"
"gimp.*"\015\012\015\012 on_match do |c|
|c|\015\012 c.gravity = ("gimp_" + c.role.split("-")[1]).to_sym
end
end
</code></pre>
h3. Position
Similar c.role.split("-")[1]).to_sym\015\012 end\015\012end\015\012</code></pre>\015\012\015\012h3. Position\015\012\015\012Similar to the geometry option, set the x/y coordinates of the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] with common [[Tagging|tag]].
Expected \015\012\015\012Expected is an "array":http://www.ruby-doc.org/core/classes/Array.html with *x* and *y* values.
<pre><code class="ruby">
tag values.\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "position" do
do\015\012 match "xterm"
"xterm"\015\012 position [ 10, 10 ]
end
</code></pre>
h3. Type
Set ]\015\012end\015\012</code></pre>\015\012\015\012h3. Type\015\012\015\012Set the window type of the [[Tagging|tagged]] [[Clients|client]], this forces it to be treated as a specific window type though as the window sets the type itself.
Following \015\012\015\012Following types are possible:
{{needs(r2905)}}
| possible:\015\012\015\012{{needs(r2905)}}\015\012\015\012| *:normal* | Treat as [[Clients#Normal|normal window]] |
| |\015\012| *:desktop* | Treat as [[Clients#Desktop|desktop window]] (__NET_WM_WINDOW_TYPE_DESKTOP_) |
| |\015\012| *:dock* | Treat as [[Clients#Dock|dock window]] (__NET_WM_WINDOW_TYPE_DOCK_) |
| |\015\012| *:toolbar* | Treat as [[Clients#Toolbar|toolbar windows]] (__NET_WM_WINDOW_TYPE_TOOLBAR_) |
| |\015\012| *:splash* | Treat as [[Clients#splash|splash window]] (__NET_WM_WINDOW_TYPE_SPLASH_) |
| |\015\012| *:dialog* | Treat as [[Clients#Dialog|dialog window]] (__NET_WM_WINDOW_TYPE_DIALOG_) |
<pre><code class="ruby">
tag |\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "desktop" do
do\015\012 match "xterm"
"xterm"\015\012 type :desktop
end
</code></pre>
h2. Examples
<pre><code class="ruby">
tag :desktop\015\012end\015\012</code></pre>\015\012\015\012h2. Examples\015\012\015\012<pre>{{hide}}<code class="ruby">\015\012tag "bashrun" do
do\015\012 match "bashrun"
"bashrun"\015\012 geometry [ 50, 1000, 200, 28 ]#
]#\015\012 stick true
true\015\012 urgent true
end
tag true\015\012end\015\012\015\012tag "browser" do
do\015\012 match "chrom[e|ium]"
"chrom[e|ium]"\015\012 gravity :center
end
</code></pre> :center\015\012end\015\012</code></pre>