Project

General

Profile

unexist.dev

subtle

Assorted tidbits and projects

Hooks » History » Version 39

« Previous - Version 39/47 (diff) - Next » - Current version
Anonymous, 12/15/2017 02:39 PM


Hooks\015\012\015\012{{>toc}}\015\012\015\012Hooks are small blocks of code (Ruby procs or lambdas) that can be called on certain events of the window manager. Many hooks get a subtlext object matching to the type hook, like a client object for the client_create hook. \015\012\015\012Generally all hooks can either be used in the config or in a sublet, just the number of arguments varies: Inside of the config hooks have one argument, a hook inside of a sublets has an additional argument - the instance of the sublet itself and this will always be the first argument. \015\012\015\012
{{hide}}\015\012# A hook in the config\015\012on :client_create do |c|\015\012  puts c.name #< Name of the client\015\012end\015\012\015\012# A hook in a sublet\015\012on :client_create do |s, c|\015\012  puts s.name #< Name of the sublet\015\012  puts c.name #< Name of the client\015\012end\015\012
\015\012\015\012h2. Client Hooks\015\012\015\012h3. client_create\015\012\015\012Triggers on creation of new clients.\015\012\015\012
{{hide}}\015\012on :client_create do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012h3. client_mode\015\012\015\012Triggers whenever a mode of a client is changed.\015\012\015\012
{{hide}}\015\012on :client_mode do |c|\015\012  puts "client=#{c.instance}, urgent=#{c.is_urgent?}"\015\012end\015\012
\015\012\015\012h3. client_gravity\015\012\015\012Triggers whenever a the gravity of a client is changed.\015\012\015\012
{{hide}}\015\012on :client_focus do |c|\015\012  puts "client=#{c.instance}, urgent=#{c.is_urgent?}"\015\012end\015\012
\015\012\015\012{{needs(r2909)}}\015\012\015\012h3. client_focus\015\012\015\012Triggers whenever a client gets focus.\015\012\015\012
{{hide}}\015\012on :client_focus do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012{{needs(r3255)}}\015\012\015\012h3. client_rename\015\012\015\012Triggers whenever a client is renamed.\015\012\015\012
{{hide}}\015\012on :client_rename do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012h3. client_kill\015\012\015\012Triggers when a client is killed.\015\012\015\012
{{hide}}\015\012on :client_kill do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012h2. Tag Hooks\015\012\015\012h3. tag_create\015\012\015\012Triggers when a tag is created.\015\012
{{hide}}\015\012on :tag_create do |t|\015\012  puts t.name\015\012end\015\012
\015\012\015\012h3. tag_kill\015\012\015\012Triggers when a tag is killed.\015\012
{{hide}}\015\012on :tag_kill do |t|\015\012  puts t.name\015\012end\015\012
\015\012\015\012h2. View Hooks\015\012\015\012h3. view_create\015\012\015\012Triggers on creation of new views.\015\012
{{hide}}\015\012on :view_create do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h3. view_focus\015\012\015\012Triggers on a switch to a view.\015\012
{{hide}}\015\012on :view_focus do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h3. view_kill\015\012\015\012Triggers when a view is killed.\015\012
{{hide}}\015\012on :view_kill do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h2. Other\015\012\015\012h3. start\015\012\015\012Triggers on start\015\012
{{hide}}\015\012on :start do\015\012  puts "Yees"\015\012end\015\012
\015\012\015\012h3. exit\015\012\015\012Triggers on exit\015\012
{{hide}}\015\012on :exit do\015\012  puts "Nooo"\015\012end\015\012
\015\012\015\012h3. tile\015\012\015\012Triggers whenever tiling would be needed\015\012
{{hide}}\015\012on :tile do \015\012  puts "Insert tiling here"\015\012end\015\012
\015\012\015\012h3. reload\015\012\015\012Triggers whenever subtle was reloaded\015\012
{{hide}}\015\012on :reload do \015\012  puts "Reloaded config"\015\012end\015\012
\015\012\015\012h2. Examples\015\012\015\012Switch to the first view of new client\015\012
{{hide}}\015\012on :client_create do |c|\015\012  c.views.first.jump\015\012end\015\012
\015\012\015\012Tag a new client with the current view only if it has no other tags\015\012
{{hide}}\015\012on :client_create do |c|\015\012  cur = Subtlext::View.current\015\012\015\012  # Check for empty tags\015\012  if(c.tags.empty?)\015\012    t = Subtlext::Tag[cur.name] rescue nil\015\012\015\012    # Create new tag\015\012    if(t.nil?)\015\012      t = Subtlext::Tag.new(cur.name)\015\012      t.save\015\012    end \015\012\015\012    c + t\015\012  end\015\012end\015\012