Project

General

Profile

unexist.dev

subtle

Assorted tidbits and projects

FAQ » History » Version 8

Christoph Kappel, 01/23/2018 02:55 PM

1 1 Christoph Kappel
h1. FAQ
2 1 Christoph Kappel
3 1 Christoph Kappel
{{toc}}
4 1 Christoph Kappel
5 5 Christoph Kappel
h2. How do I run a Java program?
6 1 Christoph Kappel
7 6 Christoph Kappel
"Java":http://java.com *expects* a certain behaviour (_reparenting of client windows_) of a window manager which is not part of any standard, therefore some "Java":http://java.com programs just show a white canvas.
8 1 Christoph Kappel
9 6 Christoph Kappel
If this happens just try to start your program like this:
10 5 Christoph Kappel
11 6 Christoph Kappel
<pre><code class="shell">AWT_TOOLKIT=MToolkit program</code></pre>
12 6 Christoph Kappel
13 6 Christoph Kappel
This changes the default tookit of "Java":http://java.com to _MToolkit_, which is known to work with non-reparenting windows managers like [[subtle]]. Depending on your "OpenJDK":http://openjdk.java.net version and your architecture this may either lead to a segmentation fault or your "OpenJDK":http://openjdk.java.net just has no support for *MToolkit*. In this case check if your distribution has applied a patch for this issue which allows something like this to change the default behaviour:
14 6 Christoph Kappel
15 6 Christoph Kappel
<pre><code class="shell">_JAVA_AWT_WM_NONREPARENTING=1 program</code></pre>
16 6 Christoph Kappel
17 6 Christoph Kappel
In case both doesn't work there is a third option: "Java":http://java.com seems to use an internally hardcoded list of window managers that are non-reparenting, the "suckless":http://suckless.org guys made a tool ("wmname":http://tools.suckless.org/wmname) to change the name of the wm.
18 6 Christoph Kappel
19 6 Christoph Kappel
Since r2520 [[subtle]] can do that for you, just enable the *&#58;wmname* option.
20 6 Christoph Kappel
21 6 Christoph Kappel
Generally this problem is really long lasting, see here:
22 6 Christoph Kappel
23 6 Christoph Kappel
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6511454
24 6 Christoph Kappel
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508650
25 6 Christoph Kappel
26 6 Christoph Kappel
bq. Note: Many problems only affect the "JRE":http://www.oracle.com/technetwork/java/javase/downloads/index.html and can be avoided by using the "OpenJDK":http://openjdk.java.net.
27 6 Christoph Kappel
28 6 Christoph Kappel
29 6 Christoph Kappel
30 5 Christoph Kappel
h2. How does subtle match clients?
31 2 Christoph Kappel
32 7 Christoph Kappel
[[subtle]] matches the {{subforge_color(#ff0000, WM_NAME)}} and the {{subforge_color(#0000ff, WM_CLASS)}} property of a window and not the title. This to ensure the match is correct.
33 6 Christoph Kappel
There are several ways to get these values, here are the most common:
34 6 Christoph Kappel
35 7 Christoph Kappel
Select the window with "xprop":http://www.xfree86.org/current/xprop.1.htmland have a look for the {{subforge_color(#ff0000, WM_NAME)}} and {{subforge_color(#0000ff, WM_CLASS)}} lines which usually look like this:
36 6 Christoph Kappel
37 7 Christoph Kappel
<pre><code class="bash">{{subforge_color(#0000ff, WM_NAME)}}(STRING) = "urxvt"
38 7 Christoph Kappel
{{subforge_color(#ff0000, WM_CLASS)}}(STRING) = {{subforge_color(#aa0000, "irssi")}}, {{subforge_color(#ff00ff, "URxvt")}}</code></pre>
39 6 Christoph Kappel
40 6 Christoph Kappel
Run *[[subtler]] -cl* and look for the matching line:
41 6 Christoph Kappel
42 7 Christoph Kappel
<pre><code class="bash">0x800007 * 1 1020x374 2 1 --- {{subforge_color(#ff0000, urxvt)}} ({{subforge_color(#0000ff,URxvt)}})</code></pre>
43 3 Christoph Kappel
44 5 Christoph Kappel
h2. What is required for the volume sublet?
45 2 Christoph Kappel
46 6 Christoph Kappel
The volume [[sublets|sublet]] uses @/dev/mixer@ to set/get the volume levels, which is an older interface introduced with "OSS":http://www.opensound.com/ and still available via "ALSA OSS emulation":http://www.alsa-project.org/. Apparently, newer kernels refuse to autoload that module anymore and you need to load it manually or via any init file.
47 6 Christoph Kappel
48 8 Christoph Kappel
{{subforge_info(Please check to the docs of your distribution how to do it.)}}
49 6 Christoph Kappel
50 6 Christoph Kappel
<pre><code>modprobe snd_mixer_oss</code></pre>
51 6 Christoph Kappel
52 8 Christoph Kappel
{{subforge_warn(Following explanation is technical!)}}
53 6 Christoph Kappel
54 6 Christoph Kappel
The [[sublets|sublet]] needs a way to access a mixer without any asynchronous callbacks. The reason for that is that [[subtle]] is single-threaded and can't use a dedicated thread to wait for the reply, but the APIs of "ALSA":http://www.alsa-project.org/ and "PulseAudio":http://pulseaudio.org are both designed to be asynchronous. Normally event drivven is fine but it is troublesome when you can't use their mainloop.
55 6 Christoph Kappel
56 5 Christoph Kappel
Since there is no way to add e.g. a control socket to the event main loop of [[subtle]], the @/dev/mixer@ approach is the only way and works for all sound systems.
57 1 Christoph Kappel
58 5 Christoph Kappel
h2. How do I run a program on startup/autostart?
59 3 Christoph Kappel
60 6 Christoph Kappel
Let's say you want "urxvt":http://software.schmorp.de/pkg/rxvt-unicode.html to start after [[subtle]], and for some reason @echo "urxvt" >> ~/.xinitrc@ is just not cutting it. Using the *&#58;start* hook and [[subtlext]] we can simulate autostart like so:
61 6 Christoph Kappel
62 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">
63 6 Christoph Kappel
on :start do
64 6 Christoph Kappel
  Subtlext::Subtle.spawn "urxvt"
65 6 Christoph Kappel
end
66 5 Christoph Kappel
</pre></code>
67 3 Christoph Kappel
68 5 Christoph Kappel
h2. How to match a GLFW window
69 2 Christoph Kappel
70 6 Christoph Kappel
GLFW set the name of the window after the window get created, so you can't match a particular window by his name.
71 6 Christoph Kappel
72 6 Christoph Kappel
to match any GLFW window :
73 6 Christoph Kappel
74 6 Christoph Kappel
<pre>
75 6 Christoph Kappel
tag "glfw" do
76 6 Christoph Kappel
        match name: "GLFW.*"
77 6 Christoph Kappel
        # your code
78 6 Christoph Kappel
end
79 2 Christoph Kappel
</pre>
80 3 Christoph Kappel
81 5 Christoph Kappel
h2. Why does subtle cause to many wakeups?
82 2 Christoph Kappel
83 6 Christoph Kappel
The wakeups are caused by a "Ruby":http://ruby-lang.org internal polling thread that runs every 10ms to schedule/handle other threads and signals. There is currently no way to avoid that in "YARV":http://www.atdot.net/yarv/, although the problem is well known.
84 6 Christoph Kappel
85 6 Christoph Kappel
http://www.ruby-forum.com/topic/200147
86 6 Christoph Kappel
87 1 Christoph Kappel
There is finally some progress regarding this: http://www.ruby-forum.com/topic/549998
88 1 Christoph Kappel
89 1 Christoph Kappel
h2. How can I manually delete a sublet?
90 1 Christoph Kappel
91 1 Christoph Kappel
[[Sublets]] usually consist of a *&#42;.rb* file, a *&#42;.spec* file and one or more icons. All these files can be found in their respective folder in @$XDG_DATA_HOME/subtle@ resp. @~/.local/share/subtle@. After deleting the [[sublets|sublet]] files the cache of [[sur]] needs to be updated or otherwise [[sur]] will think the [[sublets|sublet]] is still installed: @sur update -l@
92 1 Christoph Kappel
93 5 Christoph Kappel
h2. Why does program XYZ appears/turns as/to a gray canvas?
94 3 Christoph Kappel
95 6 Christoph Kappel
Generally, this happens, when a program needs a specific aspect ratio and [[subtle]] sets a gravity that violates this. Windows can tell the window manager about this kind of preferences via their size hints and [[subtle]] can honor those.
96 6 Christoph Kappel
97 6 Christoph Kappel
There are two possible ways:
98 6 Christoph Kappel
99 6 Christoph Kappel
# Enable size hints globally with the _&#58;resize_ option
100 6 Christoph Kappel
  <pre>{{hide}}<code class="ruby">set :resize, true</code></pre>
101 6 Christoph Kappel
# Enable this per program via [[tagging|tag]]
102 6 Christoph Kappel
  <pre>{{hide}}<code class="ruby">tag "name" do
103 6 Christoph Kappel
  match  "name"
104 6 Christoph Kappel
  resize true
105 6 Christoph Kappel
end</code></pre>
106 6 Christoph Kappel
107 2 Christoph Kappel
bq. Note: This can happen with "Java":http://java.com too, see "here":http://subforge.org/ezfaq/show/subtle?faq_id=14 for more information.
108 2 Christoph Kappel
109 5 Christoph Kappel
h2. Where does sur store sublets and icons?
110 2 Christoph Kappel
111 6 Christoph Kappel
[[sur]] follows the "XDG Base Directory specifications":http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html to store data, which includes some base path for specific data types.
112 6 Christoph Kappel
113 6 Christoph Kappel
Following paths are used:
114 6 Christoph Kappel
115 6 Christoph Kappel
|_. Type  |_. XDG path                    |_. Default path                |
116 5 Christoph Kappel
| Sublets
117 1 Christoph Kappel
118 5 Christoph Kappel
@$XDG_DATA_HOME/subtle/sublets@
119 1 Christoph Kappel
120 6 Christoph Kappel
@~/.local/share/subtle/sublets@ |
121 5 Christoph Kappel
| Icons
122 2 Christoph Kappel
123 5 Christoph Kappel
@$XDG_DATA_HOME/subtle(icons@
124 2 Christoph Kappel
125 5 Christoph Kappel
@~/.local/share/subtle/icons@   |
126 2 Christoph Kappel
127 5 Christoph Kappel
h2. What is the difference between ViewSwitch and ViewJump?
128 3 Christoph Kappel
129 6 Christoph Kappel
Boths keys change the [[view]] of the current active [[screens|screen]], but the behavior how they do that depends on if the system consists either of a single [[screens|screen]] or more.
130 5 Christoph Kappel
131 1 Christoph Kappel
132 6 Christoph Kappel
h2. Single screen
133 6 Christoph Kappel
134 6 Christoph Kappel
Here both [[grabs]] do +exactly+ the same.
135 6 Christoph Kappel
136 6 Christoph Kappel
137 6 Christoph Kappel
h2. Multi screen
138 6 Christoph Kappel
139 6 Christoph Kappel
Here the behavior depends on if the selected [[views|view]] is visible on another [[screens|screen]] or not.
140 6 Christoph Kappel
141 6 Christoph Kappel
* *ViewSwitch* either swaps the current [[views|view]] with the selected if it is visible on another [[screens|screen]] or just sets the selected [[views|view]] on current [[screens|screen]].
142 3 Christoph Kappel
* *ViewJump* either focus the selected [[views|view]] if it is visible on another [[screens|screen]] or just sets the select [[views|view]] on current [[screens|screen]].
143 3 Christoph Kappel
144 5 Christoph Kappel
h2. Why don't my grabs work with xyz keyboard layout?
145 2 Christoph Kappel
146 6 Christoph Kappel
Actually, I have no idea why setting the keyboard layout in your @xorg.conf@ isn't suffucient, but apparently you need to call *setxkbmap* in one of your startup files to set the keymap. My suggestion is to use the @~/.xinitrc@, because it is perfectly suited to setup Xorg and usually read.
147 6 Christoph Kappel
148 6 Christoph Kappel
Just add something like this to your @~/.xinitrc@ *before* you start [[subtle]]:
149 6 Christoph Kappel
150 2 Christoph Kappel
<pre><code>setxkbmap -layout 'de(nodeadkeys)'</code></pre>
151 2 Christoph Kappel
152 5 Christoph Kappel
h2. How do I tag console based programs?
153 2 Christoph Kappel
154 6 Christoph Kappel
When console based programs like "irssi":http://irssi.org are started with a terminal like @urxvt -e irssi@, they usually just change the *WM_NAME* of the terminal and per default, [[subtle]] uses both of the *WM_CLASS* values for tagging.
155 6 Christoph Kappel
156 6 Christoph Kappel
The problem about that is, that the [[tagging]] is normally done before the terminal really starts the desired app. To avoid that all better known terminals support the *-name* argument which changes the instance value (first string) of the *WM_CLASS*: @urxvt -name irssi -e irssi@
157 6 Christoph Kappel
158 6 Christoph Kappel
Another problem is that terminals retain their class value (second string) of the *WM_CLASS* and may match other [[tagging|tags]] like:
159 6 Christoph Kappel
160 6 Christoph Kappel
<pre><code class="ruby">tag "terms" do
161 6 Christoph Kappel
  match "urxvt"
162 6 Christoph Kappel
end</code></pre>
163 6 Christoph Kappel
164 6 Christoph Kappel
The common solution to bypass is this to use the :instance matcher, which just matches when for the specific instance value. So the easiest way to reliable match this client is a [[tagging|tag]] like this:
165 6 Christoph Kappel
166 6 Christoph Kappel
<pre><code class="ruby">tag "irssi" do
167 6 Christoph Kappel
  match :instance => "irssi"
168 6 Christoph Kappel
end</code></pre>
169 6 Christoph Kappel
170 6 Christoph Kappel
Following table shows the *WM_NAME* and *WM_CLASS* output of "xprop":http://www.xfree86.org/current/xprop.1.html of the various combinations:
171 6 Christoph Kappel
172 6 Christoph Kappel
|_. Command                  |_. WM_NAME    |_. WM_CLASS   |
173 5 Christoph Kappel
| urxvt
174 2 Christoph Kappel
175 2 Christoph Kappel
urxvt
176 2 Christoph Kappel
177 6 Christoph Kappel
urxvt, URxvt |
178 5 Christoph Kappel
| urxvt -e irssi
179 2 Christoph Kappel
180 5 Christoph Kappel
irssi
181 2 Christoph Kappel
182 6 Christoph Kappel
urxvt, URxvt |
183 5 Christoph Kappel
| urxvt -name irssi
184 2 Christoph Kappel
185 3 Christoph Kappel
urxvt
186 3 Christoph Kappel
187 6 Christoph Kappel
irssi, URxvt |
188 5 Christoph Kappel
| urxvt -name irssi -e irssi
189 3 Christoph Kappel
190 5 Christoph Kappel
irssi
191 3 Christoph Kappel
192 6 Christoph Kappel
irssi, URxvt |
193 5 Christoph Kappel
194 6 Christoph Kappel
Please have a look at the [[Tagging|tagging wiki page]] for more information.
195 5 Christoph Kappel
196 6 Christoph Kappel
197 6 Christoph Kappel
198 6 Christoph Kappel
199 5 Christoph Kappel
h2. How to match a GLFW window
200 2 Christoph Kappel
201 6 Christoph Kappel
GLFW set the windows name after the window get created, so you can't match a particular GLFW window by his name.
202 6 Christoph Kappel
203 6 Christoph Kappel
to match any GLFW window :
204 6 Christoph Kappel
205 6 Christoph Kappel
<pre>
206 6 Christoph Kappel
tag "glfw" do
207 6 Christoph Kappel
        match name: "GLFW.*"
208 6 Christoph Kappel
        # Your code....
209 6 Christoph Kappel
end
210 2 Christoph Kappel
</pre>
211 1 Christoph Kappel
212 5 Christoph Kappel
h2. How do I move a program to another view?
213 1 Christoph Kappel
214 6 Christoph Kappel
Placement in [[subtle]] is +strict+ and completely done via [[tagging]]. There are many ways to change [[tagging|tags]] per runtime, common is to use either [[subtler]] or [[subtlext]].
215 5 Christoph Kappel
216 2 Christoph Kappel
217 6 Christoph Kappel
h2. subtler
218 5 Christoph Kappel
219 6 Christoph Kappel
[[subtler]] can be used on the commandline:
220 5 Christoph Kappel
221 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">
222 6 Christoph Kappel
subtler -ta tag         #< Add new tag 'tag'
223 6 Christoph Kappel
subtler -cT client tag  #< Tag client 'client' with tag 'tag'
224 6 Christoph Kappel
subtler -vT view tag    #< Tag view 'view' with tag 'tag'
225 6 Christoph Kappel
</code></pre>
226 5 Christoph Kappel
227 1 Christoph Kappel
228 6 Christoph Kappel
h2. subtlext
229 5 Christoph Kappel
230 6 Christoph Kappel
[[subtlext]] requires basic "ruby":http://ruby-lang.org knowledge:
231 6 Christoph Kappel
232 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">require "subtle/subtlext"
233 6 Christoph Kappel
234 6 Christoph Kappel
tag = Subtlext::Tag.new("tag").save  #< Add new tag 'tag'
235 6 Christoph Kappel
Subtlext::Client["client"] + "tag"   #< Tag client 'client' with tag 'tag'
236 6 Christoph Kappel
Subtlext::View["view"] + "tag"       #< Tag view 'view' with tag 'tag'
237 6 Christoph Kappel
</code></pre>
238 6 Christoph Kappel
239 6 Christoph Kappel
240 6 Christoph Kappel
h2. Snippets
241 6 Christoph Kappel
242 6 Christoph Kappel
The [[snippets]] wiki page includes examples how to [[snippets#Move-windows|move to another view]].
243 6 Christoph Kappel
244 6 Christoph Kappel
245 6 Christoph Kappel
h2. Contrib
246 6 Christoph Kappel
247 6 Christoph Kappel
h3. Vitag
248 6 Christoph Kappel
249 6 Christoph Kappel
"subtle-contrib":http://subforge.org/projects/subtle-contrib/wiki contains [[subtle-contrib:vitag|vitag]] a script to change the [[tagging|tags]] of windows and views with an editor.
250 6 Christoph Kappel
251 6 Christoph Kappel
h3. Launcher
252 6 Christoph Kappel
253 6 Christoph Kappel
The "launcher":http://subforge.org/projects/subtle-contrib/wiki#Launcher uses quite the opposite way, instead of moving a window to a certain screen it just provides a way to launch a window directly on the right view with the correct [[tagging|tags]].
254 6 Christoph Kappel
255 6 Christoph Kappel
256 6 Christoph Kappel
h2. Stick
257 6 Christoph Kappel
258 6 Christoph Kappel
Most of the time, setting the window to *stick* does the trick too. Stick just displays the window on all views until the mode is disabled again. This can be done with [[grabs]] (default keys: *W-s*) or with [[subtler]]. (click on the window: @subtler -cXS@)
259 6 Christoph Kappel
260 6 Christoph Kappel
261 6 Christoph Kappel
262 5 Christoph Kappel
h2. How do I tag gimp?
263 2 Christoph Kappel
264 6 Christoph Kappel
[[Tagging]] "GIMP":http://gimp.org can be nasty, because the current version (2.6) uses inconsistent window names and roles. The window roles are fixed in the current development snapshot and will hopefully find their way into the 2.8 release.
265 6 Christoph Kappel
266 2 Christoph Kappel
https://bugzilla.gnome.org/show_bug.cgi?id=645456
267 2 Christoph Kappel
268 5 Christoph Kappel
h2. How do I (auto)start programs?
269 2 Christoph Kappel
270 6 Christoph Kappel
There are several way how to start a certain programm, here are the most common:
271 5 Christoph Kappel
272 6 Christoph Kappel
* Start your program via your $HOME/.xinitrc:
273 5 Christoph Kappel
274 6 Christoph Kappel
<pre><code class="ruby">
275 6 Christoph Kappel
subtle &
276 6 Christoph Kappel
PID=$!
277 6 Christoph Kappel
sleep 2
278 6 Christoph Kappel
urxvt
279 6 Christoph Kappel
wait $PID
280 6 Christoph Kappel
</code></pre>
281 6 Christoph Kappel
282 6 Christoph Kappel
* Start your program via [[grabs]]:
283 6 Christoph Kappel
284 6 Christoph Kappel
<pre><code class="ruby">
285 6 Christoph Kappel
"A-x" => "urxvt"
286 6 Christoph Kappel
</code></pre>
287 6 Christoph Kappel
288 6 Christoph Kappel
There are many launchers available like "dmenu":http://tools.suckless.org/dmenu and there is even a launcher especially designed for [[subtle]], you can find it in [[subtle-contrib:Launcher|here]].
289 6 Christoph Kappel
290 6 Christoph Kappel
291 5 Christoph Kappel
h2. Where is the output window of flash in fullscreen?
292 2 Christoph Kappel
293 6 Christoph Kappel
For flash, browsers seem to use window instance and class names that doesn't match the browser values. Therefore the windows will usually appear on the default view.
294 6 Christoph Kappel
295 6 Christoph Kappel
Following names are currently in use:
296 6 Christoph Kappel
297 6 Christoph Kappel
|_. Browser       |_. Arch   |_. WM_NAME            |_. WM_CLASS                                 |
298 5 Christoph Kappel
| Firefox <7.0.1
299 2 Christoph Kappel
300 5 Christoph Kappel
all
301 3 Christoph Kappel
302 5 Christoph Kappel
<unknown>
303 2 Christoph Kappel
304 6 Christoph Kappel
"<unknown>", "<unknown>"                   |
305 5 Christoph Kappel
| Firefox >=7.0.1
306 2 Christoph Kappel
307 5 Christoph Kappel
all
308 2 Christoph Kappel
309 5 Christoph Kappel
plugin-container
310 2 Christoph Kappel
311 6 Christoph Kappel
"plugin-container", "Plugin-container"     |
312 5 Christoph Kappel
| Chromium
313 2 Christoph Kappel
314 5 Christoph Kappel
all
315 3 Christoph Kappel
316 5 Christoph Kappel
exe
317 2 Christoph Kappel
318 6 Christoph Kappel
"exe", "Exe"                               |
319 5 Christoph Kappel
| Opera
320 2 Christoph Kappel
321 5 Christoph Kappel
x86
322 1 Christoph Kappel
323 5 Christoph Kappel
"operapluginwrapper"
324 1 Christoph Kappel
325 6 Christoph Kappel
"operapluginwrapper", "Operapluginwrapper" |
326 5 Christoph Kappel
| nspluginwrapper
327 2 Christoph Kappel
328 5 Christoph Kappel
x86_64
329 3 Christoph Kappel
330 5 Christoph Kappel
"npviewer.bin"
331 2 Christoph Kappel
332 6 Christoph Kappel
"Npviewer.bin"                             |
333 6 Christoph Kappel
334 6 Christoph Kappel
The easiest way to avoid that is to add a [[tagging|tag]] that makes these windows sticky:
335 6 Christoph Kappel
336 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">tag "flash" do
337 6 Christoph Kappel
  match "<unknown>|plugin-container|exe|operapluginwrapper|npviewer.bin"
338 6 Christoph Kappel
  stick true
339 2 Christoph Kappel
end</code></pre>
340 2 Christoph Kappel
341 5 Christoph Kappel
h2. How can I use subtle without numpad?
342 2 Christoph Kappel
343 6 Christoph Kappel
Per default [[subtle]] uses the numpad, because it's easier to remind the different postions when you can see them. Generally this is just a suggestion, it's up to you to change the grabs to your needs - any keys will work.
344 6 Christoph Kappel
345 6 Christoph Kappel
Keys that also have proven to work well are *q-w-e*, *a-s-d* and *y-x-c*:
346 6 Christoph Kappel
347 6 Christoph Kappel
<pre>{{hide}}<code class="ruby">grab "W-q", [ :top_left,     :top_left66,     :top_left33     ]
348 6 Christoph Kappel
grab "W-w", [ :top,          :top66,          :top33          ]
349 6 Christoph Kappel
grab "W-e", [ :top_right,    :top_right66,    :top_right33    ]
350 6 Christoph Kappel
grab "W-a", [ :left,         :left66,         :left33         ]
351 6 Christoph Kappel
grab "W-s", [ :center,       :center66,       :center33       ]
352 6 Christoph Kappel
grab "W-d", [ :right,        :right66,        :right33        ]
353 6 Christoph Kappel
354 6 Christoph Kappel
# QWERTZ
355 6 Christoph Kappel
grab "W-y", [ :bottom_left,  :bottom_left66,  :bottom_left33  ]
356 6 Christoph Kappel
357 6 Christoph Kappel
# QWERTY
358 6 Christoph Kappel
grab "W-z", [ :bottom_left,  :bottom_left66,  :bottom_left33  ]
359 6 Christoph Kappel
360 6 Christoph Kappel
grab "W-x", [ :bottom,       :bottom66,       :bottom33       ]
361 6 Christoph Kappel
grab "W-c", [ :bottom_right, :bottom_right66, :bottom_right33 ]
362 6 Christoph Kappel
</code></pre>
363 6 Christoph Kappel
364 6 Christoph Kappel
365 2 Christoph Kappel
You can find more about assigning keys [[Grabs|here]].
366 2 Christoph Kappel
367 5 Christoph Kappel
h2. How do I set a wallpaper in subtle?
368 2 Christoph Kappel
369 6 Christoph Kappel
On start, [[subtle]] sets a background color (_if set_) to the root window and therefore *overwrites* any root pixmap set before. To avoid this, you just need to comment out the *&#58;background* line from your config.
370 6 Christoph Kappel
371 6 Christoph Kappel
[[subtle]] itself has no and will never have either an autostart or way to set a wallpaper directly. Normally you just want to setup your X session and and not [[subtle]]. Your _~/.xinitrc_ is the right place for stuff like this.
372 6 Christoph Kappel
373 5 Christoph Kappel
A background can easily set with a tool like "feh":http://linuxbrit.co.uk/software/feh/.
374 2 Christoph Kappel
375 5 Christoph Kappel
h2. Is subtle a reparenting window manager?
376 2 Christoph Kappel
377 6 Christoph Kappel
*Nope*, [[subtle]] doesn't reparent windows and there is in fact *no* reason to do that. The layout in [[subtle]] is a really loose set, the only relation between a [[views|view]] and a [[client]] is [[tagging]] and this is checked on every [[views|view]] update.
378 6 Christoph Kappel
379 6 Christoph Kappel
Reparenting windows would require following additional steps, when a window is visible on a certain [[views|view]]:
380 6 Christoph Kappel
381 6 Christoph Kappel
# Resize the [[views|view]] toplevel window to the size of the current [[screen]]
382 6 Christoph Kappel
# Reparent the [[client]] window to the toplevel window
383 6 Christoph Kappel
# Handle (ignore here) the generated expose and crossing events
384 6 Christoph Kappel
385 6 Christoph Kappel
Probably sounds like not much overhead, but keep in mind this is just required because the developer of "Java":http://www.java.com/ and "Qt":http://qt.nokia.com/products/ cannot understand following line from the "ICCCM":http://tronche.com/gui/x/icccm/sec-4.html#s-4.2.1:
386 6 Christoph Kappel
387 2 Christoph Kappel
bq. Clients must be aware that some window managers will reparent their top-level windows so that a window that was created as a child of the root will be displayed as a child of some window belonging to the window manager
388 2 Christoph Kappel
389 5 Christoph Kappel
h2. Is there any log file?
390 2 Christoph Kappel
391 5 Christoph Kappel
Nope, there is *no* log file. In case you need one for e.g. reporting a bug +please+ read to the [[bugs|reporting a bug]] wiki page and check the paragraph about [[bugs#enable-logging|logging]].