Project

General

Profile

unexist.dev

Assorted tidbits and projects

Hooks » History » Version 25

« Previous - Version 25/47 (diff) - Next » - Current version
Tass yournamehere, 06/12/2010 11:13 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 an object matching to the type hook, like a client object for the client_create hook. Generally all hooks can be either used inside of the config or in a sublet.\015\012\015\012The only difference is that when a hook inside of the config can 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
\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. Cheatsheet\015\012\015\012* start\015\012* exit\015\012* tile\015\012* reload\015\012* client_create\015\012* client_configure\015\012* client_focus\015\012* client_gravity\015\012* client_kill\015\012* tag_create\015\012* tag_kill\015\012* view_create\015\012* view_configure\015\012* view_jump\015\012* view_kill\015\012\015\012h2. Client Hooks\015\012\015\012h3. client_create\015\012\015\012Triggers on creation of new clients.\015\012
\015\012on :client_create do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012h3. client_configure\015\012\015\012Triggers whenever a client is configured.\015\012
\015\012on :client_focus do |c|\015\012  puts c.name\015\012end\015\012
\015\012\015\012h3. client_focus\015\012\015\012Triggers whenever a client gets focus.\015\012
\015\012on :client_focus 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\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
\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
\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
\015\012on :view_create do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h3. view_configure\015\012\015\012Triggers whenever a view is configured.\015\012
\015\012on :view_focus do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h3. view_jump\015\012\015\012Triggers on a jump to a view.\015\012
\015\012on :view_jump 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
\015\012on :view_kill do |v|\015\012  puts v.name\015\012end\015\012
\015\012\015\012h2. Other\015\012\015\012h3. tile\015\012\015\012Triggers whenever tiling would be needed\015\012
\015\012on :tile do \015\012  puts "Insert tiling here"\015\012end\015\012
\015\012\015\012h3. start\015\012\015\012Triggers on start\015\012
\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
\015\012on :exit do\015\012  puts "Nooo"\015\012end\015\012
\015\012\015\012h2. Examples\015\012\015\012Switch to the first view of new client\015\012
\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
\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