Project

General

Profile

unexist.dev

Assorted tidbits and projects

Hooks » History » Version 44

Christoph Kappel, 01/23/2018 12:13 PM

1 41 Christoph Kappel
h1. Hooks
2 41 Christoph Kappel
3 42 Christoph Kappel
{{>toc}}nnnnn
4 41 Christoph Kappel
5 41 Christoph Kappel
[[Hooks]] are small blocks of code ("Ruby":http://www.ruby-lang.org procs or lambdas) that can be called on certain events of the window manager. Many [[hooks]] get a [[subtlext]] object matching to the type [[hooks|hook]], like a [[Clients|client]] object for the _client_create_ [[hooks|hook]]. 
6 41 Christoph Kappel
7 41 Christoph Kappel
Generally all [[hooks]] can either be used in the config or in a [[sublets|sublet]], just the number of arguments varies: Inside of the config [[hooks]] have one argument, a [[hooks|hook]] inside of a [[sublets|sublets]] has an additional argument - the instance of the [[sublets|sublet]] itself and this will always be the first argument. 
8 41 Christoph Kappel
9 44 Christoph Kappel
{{subforge_toggle_numbers}}
10 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
11 41 Christoph Kappel
# A hook in the config
12 41 Christoph Kappel
on :client_create do |c|
13 41 Christoph Kappel
  puts c.name #< Name of the client
14 41 Christoph Kappel
end
15 41 Christoph Kappel
16 41 Christoph Kappel
# A hook in a sublet
17 41 Christoph Kappel
on :client_create do |s, c|
18 41 Christoph Kappel
  puts s.name #< Name of the sublet
19 41 Christoph Kappel
  puts c.name #< Name of the client
20 41 Christoph Kappel
end
21 41 Christoph Kappel
</code></pre>
22 41 Christoph Kappel
23 41 Christoph Kappel
h2. Client Hooks
24 41 Christoph Kappel
25 41 Christoph Kappel
h3. client_create
26 41 Christoph Kappel
27 41 Christoph Kappel
Triggers on creation of new clients.
28 41 Christoph Kappel
29 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
30 41 Christoph Kappel
on :client_create do |c|
31 41 Christoph Kappel
  puts c.name
32 41 Christoph Kappel
end
33 41 Christoph Kappel
</code></pre>
34 41 Christoph Kappel
35 41 Christoph Kappel
h3. client_mode
36 41 Christoph Kappel
37 41 Christoph Kappel
Triggers whenever a [[Clients#Modes|mode]] of a [[Clients|client]] is changed.
38 41 Christoph Kappel
39 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
40 41 Christoph Kappel
on :client_mode do |c|
41 41 Christoph Kappel
  puts "client=#{c.instance}, urgent=#{c.is_urgent?}"
42 41 Christoph Kappel
end
43 41 Christoph Kappel
</code></pre>
44 41 Christoph Kappel
45 41 Christoph Kappel
h3. client_gravity
46 41 Christoph Kappel
47 41 Christoph Kappel
Triggers whenever a the [[gravity]] of a [[Clients|client]] is changed.
48 41 Christoph Kappel
49 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
50 41 Christoph Kappel
on :client_focus do |c|
51 41 Christoph Kappel
  puts "client=#{c.instance}, urgent=#{c.is_urgent?}"
52 41 Christoph Kappel
end
53 41 Christoph Kappel
</code></pre>
54 41 Christoph Kappel
55 41 Christoph Kappel
h3. client_focus
56 41 Christoph Kappel
57 41 Christoph Kappel
Triggers whenever a [[Clients|client]] gets focus.
58 41 Christoph Kappel
59 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
60 41 Christoph Kappel
on :client_focus do |c|
61 41 Christoph Kappel
  puts c.name
62 41 Christoph Kappel
end
63 41 Christoph Kappel
</code></pre>
64 41 Christoph Kappel
65 41 Christoph Kappel
{{subforge_needs(r3255)}}
66 41 Christoph Kappel
67 41 Christoph Kappel
h3. client_rename
68 41 Christoph Kappel
69 41 Christoph Kappel
Triggers whenever a [[Clients|client]] is renamed.
70 41 Christoph Kappel
71 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
72 41 Christoph Kappel
on :client_rename do |c|
73 41 Christoph Kappel
  puts c.name
74 41 Christoph Kappel
end
75 41 Christoph Kappel
</code></pre>
76 41 Christoph Kappel
77 41 Christoph Kappel
h3. client_kill
78 41 Christoph Kappel
79 41 Christoph Kappel
Triggers when a [[Clients|client]] is killed.
80 41 Christoph Kappel
81 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
82 41 Christoph Kappel
on :client_kill do |c|
83 41 Christoph Kappel
  puts c.name
84 41 Christoph Kappel
end
85 41 Christoph Kappel
</code></pre>
86 41 Christoph Kappel
87 41 Christoph Kappel
h2. Tag Hooks
88 41 Christoph Kappel
89 41 Christoph Kappel
h3. tag_create
90 41 Christoph Kappel
91 41 Christoph Kappel
Triggers when a [[Tagging|tag]] is created.
92 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
93 41 Christoph Kappel
on :tag_create do |t|
94 41 Christoph Kappel
  puts t.name
95 41 Christoph Kappel
end
96 41 Christoph Kappel
</code></pre>
97 41 Christoph Kappel
98 41 Christoph Kappel
h3. tag_kill
99 41 Christoph Kappel
100 41 Christoph Kappel
Triggers when a [[Tagging|tag]] is killed.
101 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
102 41 Christoph Kappel
on :tag_kill do |t|
103 41 Christoph Kappel
  puts t.name
104 41 Christoph Kappel
end
105 41 Christoph Kappel
</code></pre>
106 41 Christoph Kappel
107 41 Christoph Kappel
h2. View Hooks
108 41 Christoph Kappel
109 41 Christoph Kappel
h3. view_create
110 41 Christoph Kappel
111 41 Christoph Kappel
Triggers on creation of new [[views]].
112 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
113 41 Christoph Kappel
on :view_create do |v|
114 41 Christoph Kappel
  puts v.name
115 41 Christoph Kappel
end
116 41 Christoph Kappel
</code></pre>
117 41 Christoph Kappel
118 41 Christoph Kappel
h3. view_focus
119 41 Christoph Kappel
120 41 Christoph Kappel
Triggers on a switch to a [[Views|view]].
121 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
122 41 Christoph Kappel
on :view_focus do |v|
123 41 Christoph Kappel
  puts v.name
124 41 Christoph Kappel
end
125 41 Christoph Kappel
</code></pre>
126 41 Christoph Kappel
127 41 Christoph Kappel
h3. view_kill
128 41 Christoph Kappel
129 41 Christoph Kappel
Triggers when a [[Views|view]] is killed.
130 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
131 41 Christoph Kappel
on :view_kill do |v|
132 41 Christoph Kappel
  puts v.name
133 41 Christoph Kappel
end
134 41 Christoph Kappel
</code></pre>
135 41 Christoph Kappel
136 41 Christoph Kappel
h2. Other
137 41 Christoph Kappel
138 41 Christoph Kappel
h3. start
139 41 Christoph Kappel
140 41 Christoph Kappel
Triggers on start
141 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
142 41 Christoph Kappel
on :start do
143 41 Christoph Kappel
  puts "Yees"
144 41 Christoph Kappel
end
145 41 Christoph Kappel
</code></pre>
146 41 Christoph Kappel
147 41 Christoph Kappel
h3. exit
148 41 Christoph Kappel
149 41 Christoph Kappel
Triggers on exit
150 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
151 41 Christoph Kappel
on :exit do
152 41 Christoph Kappel
  puts "Nooo"
153 41 Christoph Kappel
end
154 41 Christoph Kappel
</code></pre>
155 41 Christoph Kappel
156 41 Christoph Kappel
h3. tile
157 41 Christoph Kappel
158 41 Christoph Kappel
Triggers whenever tiling would be needed
159 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
160 41 Christoph Kappel
on :tile do 
161 41 Christoph Kappel
  puts "Insert tiling here"
162 41 Christoph Kappel
end
163 41 Christoph Kappel
</code></pre>
164 41 Christoph Kappel
165 41 Christoph Kappel
h3. reload
166 41 Christoph Kappel
167 41 Christoph Kappel
Triggers whenever subtle was reloaded
168 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
169 41 Christoph Kappel
on :reload do 
170 41 Christoph Kappel
  puts "Reloaded config"
171 41 Christoph Kappel
end
172 41 Christoph Kappel
</code></pre>
173 41 Christoph Kappel
174 41 Christoph Kappel
h2. Examples
175 41 Christoph Kappel
176 41 Christoph Kappel
Switch to the first view of new client
177 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
178 41 Christoph Kappel
on :client_create do |c|
179 41 Christoph Kappel
  c.views.first.jump
180 41 Christoph Kappel
end
181 41 Christoph Kappel
</code></pre>
182 41 Christoph Kappel
183 41 Christoph Kappel
Tag a new [[Clients|client]] with the current [[Views|view]] only if it has no other [[Tagging|tags]]
184 43 Christoph Kappel
<pre>{{subforge_toggle_numbers}}<code class="ruby">
185 41 Christoph Kappel
on :client_create do |c|
186 41 Christoph Kappel
  cur = Subtlext::View.current
187 41 Christoph Kappel
188 41 Christoph Kappel
  # Check for empty tags
189 41 Christoph Kappel
  if(c.tags.empty?)
190 41 Christoph Kappel
    t = Subtlext::Tag[cur.name] rescue nil
191 41 Christoph Kappel
192 41 Christoph Kappel
    # Create new tag
193 41 Christoph Kappel
    if(t.nil?)
194 41 Christoph Kappel
      t = Subtlext::Tag.new(cur.name)
195 41 Christoph Kappel
      t.save
196 41 Christoph Kappel
    end 
197 41 Christoph Kappel
198 41 Christoph Kappel
    c + t
199 41 Christoph Kappel
  end
200 41 Christoph Kappel
end
201 41 Christoph Kappel
</code></pre>