Tagging » History » Version 66
Christoph Kappel, 02/02/2018 10:14 AM
| 1 | 64 | Christoph Kappel | h1. Tagging |
|---|---|---|---|
| 2 | 64 | Christoph Kappel | |
| 3 | 64 | Christoph Kappel | {{>toc}} |
| 4 | 64 | Christoph Kappel | |
| 5 | 64 | Christoph Kappel | |
| 6 | 64 | Christoph Kappel | [[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. |
| 7 | 64 | Christoph Kappel | |
| 8 | 64 | Christoph Kappel | There are two ways to define a [[Tags|tag]] in the [[config]]: |
| 9 | 64 | Christoph Kappel | |
| 10 | 64 | Christoph Kappel | h2. Simple |
| 11 | 64 | Christoph Kappel | |
| 12 | 64 | Christoph Kappel | The simple way just needs a name and a "regular expression":http://en.wikipedia.org/wiki/Regular_expression to just handle the placement: |
| 13 | 64 | Christoph Kappel | |
| 14 | 64 | Christoph Kappel | <pre><code class="ruby">tag "tagname", "xterm"</code></pre> |
| 15 | 64 | Christoph Kappel | |
| 16 | 64 | Christoph Kappel | h2. Extended |
| 17 | 64 | Christoph Kappel | |
| 18 | 64 | Christoph Kappel | Additionally [[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]]. |
| 19 | 64 | Christoph Kappel | |
| 20 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 21 | 64 | Christoph Kappel | tag "tag" do |
| 22 | 64 | Christoph Kappel | match "xterm|[u]?rxvt" |
| 23 | 64 | Christoph Kappel | gravity :center |
| 24 | 64 | Christoph Kappel | end |
| 25 | 64 | Christoph Kappel | </code></pre> |
| 26 | 64 | Christoph Kappel | |
| 27 | 64 | Christoph Kappel | h2. Default |
| 28 | 64 | Christoph Kappel | |
| 29 | 64 | Christoph Kappel | Whenever a [[Clients|client]] has no [[Tagging|tags]] it gets the +default+ [[Tagging|tag]] and is placed on the [[Views#Default|default view]]. |
| 30 | 64 | Christoph Kappel | |
| 31 | 64 | Christoph Kappel | Example: |
| 32 | 64 | Christoph Kappel | |
| 33 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 34 | 64 | Christoph Kappel | view "terms", "terms", |
| 35 | 64 | Christoph Kappel | view "www", "default|browser", |
| 36 | 64 | Christoph Kappel | view "dev", "editor" |
| 37 | 64 | Christoph Kappel | </code></pre> |
| 38 | 64 | Christoph Kappel | |
| 39 | 64 | Christoph Kappel | h2. Modes |
| 40 | 64 | Christoph Kappel | |
| 41 | 64 | Christoph Kappel | Following modes exist: |
| 42 | 64 | Christoph Kappel | |
| 43 | 64 | Christoph Kappel | h3. Borderless |
| 44 | 64 | Christoph Kappel | |
| 45 | 64 | Christoph Kappel | Enables the [[Clients#Borderless|borderless mode]] for [[Tagging|tagged]] [[clients]]. When set, any borders around the [[clients|client]] are absent. |
| 46 | 64 | Christoph Kappel | |
| 47 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 48 | 64 | Christoph Kappel | tag "borderless" do |
| 49 | 64 | Christoph Kappel | match "xterm" |
| 50 | 64 | Christoph Kappel | set :borderless |
| 51 | 64 | Christoph Kappel | end</code></pre> |
| 52 | 64 | Christoph Kappel | |
| 53 | 64 | Christoph Kappel | h3. Fixed |
| 54 | 64 | Christoph Kappel | |
| 55 | 64 | Christoph Kappel | Enables the [[Clients#Fixed|fixed mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] cannot be resized anymore. |
| 56 | 64 | Christoph Kappel | |
| 57 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 58 | 64 | Christoph Kappel | tag "fixed" do |
| 59 | 64 | Christoph Kappel | match "xterm" |
| 60 | 64 | Christoph Kappel | set :fixed |
| 61 | 64 | Christoph Kappel | end</code></pre> |
| 62 | 64 | Christoph Kappel | |
| 63 | 64 | Christoph Kappel | h3. Floating |
| 64 | 64 | Christoph Kappel | |
| 65 | 64 | Christoph Kappel | This property enables the [[Clients#Floating|floating mode]] [[Tagging|tagged]] [[clients]]. |
| 66 | 64 | Christoph Kappel | |
| 67 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 68 | 64 | Christoph Kappel | tag "floating" do |
| 69 | 64 | Christoph Kappel | match "xterm" |
| 70 | 64 | Christoph Kappel | set :floating |
| 71 | 64 | Christoph Kappel | end |
| 72 | 64 | Christoph Kappel | </code></pre> |
| 73 | 64 | Christoph Kappel | |
| 74 | 64 | Christoph Kappel | h3. Full |
| 75 | 64 | Christoph Kappel | |
| 76 | 64 | Christoph Kappel | Enable the [[Clients#Fullscreen|fullscreen mode]] for [[Tagging|tagged]] [[Clients|clients]]. When set, the [[clients|client] covers the whole screen size. |
| 77 | 64 | Christoph Kappel | |
| 78 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 79 | 64 | Christoph Kappel | tag "full" do |
| 80 | 64 | Christoph Kappel | match "xterm" |
| 81 | 64 | Christoph Kappel | set :full |
| 82 | 64 | Christoph Kappel | end |
| 83 | 64 | Christoph Kappel | </code></pre> |
| 84 | 64 | Christoph Kappel | |
| 85 | 64 | Christoph Kappel | h3. Resize |
| 86 | 64 | Christoph Kappel | |
| 87 | 64 | Christoph Kappel | Enable 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. |
| 88 | 64 | Christoph Kappel | |
| 89 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 90 | 64 | Christoph Kappel | tag "resize" do |
| 91 | 64 | Christoph Kappel | match "xterm" |
| 92 | 64 | Christoph Kappel | set :resize |
| 93 | 64 | Christoph Kappel | end |
| 94 | 64 | Christoph Kappel | </code></pre> |
| 95 | 64 | Christoph Kappel | |
| 96 | 64 | Christoph Kappel | h3. Sticky |
| 97 | 64 | Christoph Kappel | |
| 98 | 64 | Christoph Kappel | Enable 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]]. |
| 99 | 64 | Christoph Kappel | |
| 100 | 64 | Christoph Kappel | Supported values are either true or a number to specify a screen. |
| 101 | 64 | Christoph Kappel | |
| 102 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 103 | 64 | Christoph Kappel | tag "sticky" do |
| 104 | 64 | Christoph Kappel | match "xterm" |
| 105 | 64 | Christoph Kappel | set :sticky |
| 106 | 64 | Christoph Kappel | end |
| 107 | 64 | Christoph Kappel | </code></pre> |
| 108 | 64 | Christoph Kappel | |
| 109 | 64 | Christoph Kappel | h3. Urgent |
| 110 | 64 | Christoph Kappel | |
| 111 | 64 | Christoph Kappel | Enable the [[Clients#Urgent|urgent mode]] for [[Tagging|tagged]] [[clients]]. When set, [[subtle]] automatically sets this [[client]] to [Clients#Urgent|urgent]]. |
| 112 | 64 | Christoph Kappel | |
| 113 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 114 | 64 | Christoph Kappel | tag "urgent" do |
| 115 | 64 | Christoph Kappel | match "xterm" |
| 116 | 64 | Christoph Kappel | set :urgent |
| 117 | 64 | Christoph Kappel | end |
| 118 | 64 | Christoph Kappel | </code></pre> |
| 119 | 64 | Christoph Kappel | |
| 120 | 64 | Christoph Kappel | h3. Zaphod |
| 121 | 64 | Christoph Kappel | |
| 122 | 64 | Christoph Kappel | Enable the [[Clients#Zaphod|zaphod mode]] for [[Tagging|tagged]] [[clients]]. When set, the [[clients|client]] spans across all connected [[multihead|screens]]. |
| 123 | 64 | Christoph Kappel | |
| 124 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 125 | 64 | Christoph Kappel | tag "zaphod" do |
| 126 | 64 | Christoph Kappel | match "xterm" |
| 127 | 64 | Christoph Kappel | set :zaphod |
| 128 | 64 | Christoph Kappel | end</code></pre> |
| 129 | 64 | Christoph Kappel | |
| 130 | 64 | Christoph Kappel | h2. Options |
| 131 | 64 | Christoph Kappel | |
| 132 | 64 | Christoph Kappel | Following options exist: |
| 133 | 64 | Christoph Kappel | |
| 134 | 64 | Christoph Kappel | h3. Set |
| 135 | 64 | Christoph Kappel | |
| 136 | 64 | Christoph Kappel | Set various [[Tagging#Modes|modes] for [[Tagging|tagged]] [[clients]]. Multiple modes can be set separated by comma. |
| 137 | 64 | Christoph Kappel | |
| 138 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 139 | 64 | Christoph Kappel | tag "modes" do |
| 140 | 64 | Christoph Kappel | match "xterm" |
| 141 | 64 | Christoph Kappel | set :floating, :sticky |
| 142 | 64 | Christoph Kappel | end |
| 143 | 64 | Christoph Kappel | </code></pre> |
| 144 | 64 | Christoph Kappel | |
| 145 | 64 | Christoph Kappel | h3. Geometry |
| 146 | 64 | Christoph Kappel | |
| 147 | 64 | Christoph Kappel | Set 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. |
| 148 | 64 | Christoph Kappel | |
| 149 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 150 | 64 | Christoph Kappel | tag "geometry" do |
| 151 | 64 | Christoph Kappel | match "xterm" |
| 152 | 64 | Christoph Kappel | geometry [ 10, 10, 100, 100 ] |
| 153 | 64 | Christoph Kappel | end |
| 154 | 64 | Christoph Kappel | </code></pre> |
| 155 | 64 | Christoph Kappel | |
| 156 | 64 | Christoph Kappel | h3. Gravity |
| 157 | 64 | Christoph Kappel | |
| 158 | 64 | Christoph Kappel | Sets a certain to [[gravity]] to the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] that have this [[Tagging|tag]] in common. |
| 159 | 64 | Christoph Kappel | |
| 160 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 161 | 64 | Christoph Kappel | tag "gravity" do |
| 162 | 64 | Christoph Kappel | match "xterm" |
| 163 | 64 | Christoph Kappel | gravity :center |
| 164 | 64 | Christoph Kappel | end |
| 165 | 64 | Christoph Kappel | </code></pre> |
| 166 | 64 | Christoph Kappel | |
| 167 | 64 | Christoph Kappel | h3. Match |
| 168 | 64 | Christoph Kappel | |
| 169 | 64 | Christoph Kappel | Adds 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]]. |
| 170 | 64 | Christoph Kappel | |
| 171 | 64 | Christoph Kappel | h4. Regular expression |
| 172 | 64 | Christoph Kappel | |
| 173 | 64 | Christoph Kappel | When 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]]. |
| 174 | 64 | Christoph Kappel | |
| 175 | 64 | Christoph Kappel | h4. Selector |
| 176 | 64 | Christoph Kappel | |
| 177 | 64 | Christoph Kappel | A [[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]]. |
| 178 | 64 | Christoph Kappel | |
| 179 | 64 | Christoph Kappel | Every [[Tagging#Selector|selector]] consists of a type and a value: |
| 180 | 64 | Christoph Kappel | |
| 181 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 182 | 64 | Christoph Kappel | tag "example" do |
| 183 | 64 | Christoph Kappel | match type: value |
| 184 | 64 | Christoph Kappel | end |
| 185 | 64 | Christoph Kappel | </code></pre> |
| 186 | 64 | Christoph Kappel | |
| 187 | 64 | Christoph Kappel | Following types exist: |
| 188 | 64 | Christoph Kappel | |
| 189 | 64 | Christoph Kappel | | *:name* | Match the [[Client#WM_NAME|window name]] | |
| 190 | 64 | Christoph Kappel | | *:instance* | Match the [[Client#WM_CLASS|window instance name]] | |
| 191 | 64 | Christoph Kappel | | *:class* | Match the [[Client#WM_CLASS|window class name]] | |
| 192 | 64 | Christoph Kappel | | *:role* | Match the [[Client#WM_ROLE|window role]] | |
| 193 | 64 | Christoph Kappel | | *:type* | Match the [[Clients#Types|window type]] | |
| 194 | 64 | Christoph Kappel | |
| 195 | 64 | Christoph Kappel | {{needs(r2830)}} |
| 196 | 64 | Christoph Kappel | |
| 197 | 64 | Christoph Kappel | h4. Boolean logic |
| 198 | 64 | Christoph Kappel | |
| 199 | 64 | Christoph Kappel | "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. |
| 200 | 64 | Christoph Kappel | |
| 201 | 64 | Christoph Kappel | h5. AND |
| 202 | 64 | Christoph Kappel | |
| 203 | 64 | Christoph Kappel | All [[Tagging#Selector|selector]] are required in order for this [[Tagging|tag]] to be applied. |
| 204 | 64 | Christoph Kappel | |
| 205 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 206 | 64 | Christoph Kappel | tag "AND" do |
| 207 | 64 | Christoph Kappel | match instance: "xterm", instance: "urxvt" |
| 208 | 64 | Christoph Kappel | end |
| 209 | 64 | Christoph Kappel | </code></pre> |
| 210 | 64 | Christoph Kappel | |
| 211 | 64 | Christoph Kappel | h5. OR |
| 212 | 64 | Christoph Kappel | |
| 213 | 64 | Christoph Kappel | Only one matching [[Tagging#Selector|selector]] is required in order for this [[Tagging|tag]] to be applied. |
| 214 | 64 | Christoph Kappel | |
| 215 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 216 | 64 | Christoph Kappel | tag "OR" do |
| 217 | 64 | Christoph Kappel | match "xterm" |
| 218 | 64 | Christoph Kappel | match "urxvt" |
| 219 | 64 | Christoph Kappel | end |
| 220 | 64 | Christoph Kappel | </code></pre> |
| 221 | 64 | Christoph Kappel | |
| 222 | 64 | Christoph Kappel | {{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.)}} |
| 223 | 64 | Christoph Kappel | |
| 224 | 64 | Christoph Kappel | Please also check the "How do I tag console based programs?":http://subforge.org/ezfaq/show/subtle?faq_id=15 FAQ entry. |
| 225 | 64 | Christoph Kappel | |
| 226 | 64 | Christoph Kappel | {{needs(r3209)}} |
| 227 | 64 | Christoph Kappel | |
| 228 | 64 | Christoph Kappel | h3. On_match |
| 229 | 64 | Christoph Kappel | |
| 230 | 64 | Christoph Kappel | Add 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]]. |
| 231 | 64 | Christoph Kappel | |
| 232 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 233 | 64 | Christoph Kappel | tag "gimp" do |
| 234 | 64 | Christoph Kappel | match role: "gimp.*" |
| 235 | 64 | Christoph Kappel | |
| 236 | 64 | Christoph Kappel | on_match do |c| |
| 237 | 64 | Christoph Kappel | c.gravity = ("gimp_" + c.role.split("-")[1]).to_sym |
| 238 | 64 | Christoph Kappel | end |
| 239 | 64 | Christoph Kappel | end |
| 240 | 64 | Christoph Kappel | </code></pre> |
| 241 | 64 | Christoph Kappel | |
| 242 | 64 | Christoph Kappel | h3. Position |
| 243 | 64 | Christoph Kappel | |
| 244 | 64 | Christoph Kappel | Similar to the geometry option, set the x/y coordinates of the [[Tagging|tagged]] [[Clients|client]], but +only+ on [[views]] with common [[Tagging|tag]]. |
| 245 | 64 | Christoph Kappel | |
| 246 | 64 | Christoph Kappel | Expected is an "array":http://www.ruby-doc.org/core/classes/Array.html with *x* and *y* values. |
| 247 | 64 | Christoph Kappel | |
| 248 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 249 | 64 | Christoph Kappel | tag "position" do |
| 250 | 64 | Christoph Kappel | match "xterm" |
| 251 | 64 | Christoph Kappel | position [ 10, 10 ] |
| 252 | 64 | Christoph Kappel | end |
| 253 | 64 | Christoph Kappel | </code></pre> |
| 254 | 64 | Christoph Kappel | |
| 255 | 64 | Christoph Kappel | h3. Type |
| 256 | 64 | Christoph Kappel | |
| 257 | 64 | Christoph Kappel | Set 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. |
| 258 | 64 | Christoph Kappel | |
| 259 | 64 | Christoph Kappel | Following types are possible: |
| 260 | 64 | Christoph Kappel | |
| 261 | 64 | Christoph Kappel | {{needs(r2905)}} |
| 262 | 64 | Christoph Kappel | |
| 263 | 64 | Christoph Kappel | | *:normal* | Treat as [[Clients#Normal|normal window]] | |
| 264 | 64 | Christoph Kappel | | *:desktop* | Treat as [[Clients#Desktop|desktop window]] (__NET_WM_WINDOW_TYPE_DESKTOP_) | |
| 265 | 64 | Christoph Kappel | | *:dock* | Treat as [[Clients#Dock|dock window]] (__NET_WM_WINDOW_TYPE_DOCK_) | |
| 266 | 64 | Christoph Kappel | | *:toolbar* | Treat as [[Clients#Toolbar|toolbar windows]] (__NET_WM_WINDOW_TYPE_TOOLBAR_) | |
| 267 | 64 | Christoph Kappel | | *:splash* | Treat as [[Clients#splash|splash window]] (__NET_WM_WINDOW_TYPE_SPLASH_) | |
| 268 | 64 | Christoph Kappel | | *:dialog* | Treat as [[Clients#Dialog|dialog window]] (__NET_WM_WINDOW_TYPE_DIALOG_) | |
| 269 | 64 | Christoph Kappel | |
| 270 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 271 | 64 | Christoph Kappel | tag "desktop" do |
| 272 | 64 | Christoph Kappel | match "xterm" |
| 273 | 64 | Christoph Kappel | type :desktop |
| 274 | 64 | Christoph Kappel | end |
| 275 | 64 | Christoph Kappel | </code></pre> |
| 276 | 64 | Christoph Kappel | |
| 277 | 64 | Christoph Kappel | h2. Examples |
| 278 | 64 | Christoph Kappel | |
| 279 | 64 | Christoph Kappel | <pre><code class="ruby"> |
| 280 | 64 | Christoph Kappel | tag "bashrun" do |
| 281 | 64 | Christoph Kappel | match "bashrun" |
| 282 | 64 | Christoph Kappel | geometry [ 50, 1000, 200, 28 ]# |
| 283 | 64 | Christoph Kappel | stick true |
| 284 | 64 | Christoph Kappel | urgent true |
| 285 | 64 | Christoph Kappel | end |
| 286 | 64 | Christoph Kappel | |
| 287 | 64 | Christoph Kappel | tag "browser" do |
| 288 | 64 | Christoph Kappel | match "chrom[e|ium]" |
| 289 | 64 | Christoph Kappel | gravity :center |
| 290 | 64 | Christoph Kappel | end |
| 291 | 64 | Christoph Kappel | </code></pre> |