Project

General

Profile

unexist.dev

/

subtle

Assorted tidbits and projects

Snippets » History » Version 22

« Previous - Version 22/46 (diff) - Next » - Current version
Anonymous, 10/17/2010 12:24 AM


Snippets\015\012\015\012This page shows small snippets that might be useful:\015\012\015\012{{>toc}}\015\012\015\012h2. Alt-Tab\015\012\015\012This cycles through windows of view\015\012\015\012
{{hide}}\015\012grab "A-Tab" do |c|\015\012   sel     = 0\015\012   clients = Subtlext::View[:current].clients\015\012\015\012   clients.each_index do |idx|\015\012     if(clients[idx].id == c.id)\015\012       sel = idx + 1 if(idx < clients.size - 1)\015\012     end\015\012   end\015\012\015\012  clients[sel].focus\015\012end\015\012
\015\012\015\012h2. Gravity tiling\015\012\015\012Tiles windows vertically that share a gravity.\015\012\015\012
{{hide}}\015\012on :tile do\015\012  clients = Subtlext::View.current.clients\015\012  screen  = Subtlext::Screen.current\015\012\015\012  assoc = {}\015\012\015\012  clients.each do |c|\015\012    begin\015\012      assoc[c.gravity.id] << c rescue assoc[c.gravity.id] = [ c ]\015\012    rescue StandardError\015\012      # Startup errors\015\012    end\015\012  end\015\012\015\012  assoc.each do |k, v|\015\012    g      = Subtlext::Gravity[k]\015\012    border = 2 #< Currently hardcoded\015\012\015\012    # Calculate gravity\015\012    x, y, w, h = g.geometry_for(screen)\015\012    width      = w / v.size\015\012    pos        = x\015\012\015\012    v.each do |c|\015\012      c.resize   = false\015\012      c.geometry = [ pos, y, width - 2 * border, h - 2 * border ]\015\012      pos += width\015\012    end\015\012  end\015\012end\015\012
\015\012\015\012h2. Extend view\015\012\015\012
{{hide}}\015\012require "subtle/subtlext"\015\012\015\012STORE ||= {}\015\012\015\012module Subtlext\015\012  class View\015\012    def method_missing(meth, *args)\015\012      STORE[self.name] = { } unless(STORE.has_key?(self.name))\015\012\015\012      if(meth.to_s.end_with?("="))\015\012        meth = meth.to_s.chop.to_sym\015\012\015\012        STORE[self.name][meth] = args[0]\015\012      else\015\012        STORE[self.name][meth]\015\012      end\015\012    end\015\012  end\015\012end\015\012
\015\012\015\012Finally make some use of this like following hook:\015\012\015\012
{{hide}}\015\012on :view_jump do |v|\015\012  v.visits += 1 rescue v.visits = 1\015\012  puts "View %s, %d visits" % [ v.name, v.visits ]\015\012end\015\012
\015\012\015\012h2. Focus gravities\015\012\015\012Focus window a specific gravities on view.\015\012\015\012
{{hide}}\015\012{\015\012  "KP_7" => :top_left,    "KP_8" => :top,    "KP_9" => :top_right,\015\012  "KP_4" => :left,        "KP_5" => :center, "KP_6" => :right,\015\012  "KP_1" => :bottom_left, "KP_2" => :bottom, "KP_3" => :bottom_right\015\012}.each do |k, v|\015\012  grab "A-C-" + k, lambda {\015\012    c = Subtlext::View.current.clients.select { |c|\015\012      c.gravity.name.to_sym == v\015\012    }\015\012  \015\012    c.first.focus unless(c.empty?)\015\012  }\015\012end\015\012
\015\012\015\012h2. Move windows to views on the fly\015\012\015\012This snippet adds nine grabs to move clients on the fly to nine defined views. It uses tagging for this, creates tags based on the view names and applies them when needed.\015\012\015\012
{{hide}}\015\012(1..9).each do |i|\015\012  grab "C-%d" % [ i ] do |c|\015\012    views = Subtlext::View.all.map { |v| v.name }\015\012\015\012    # Adjust tags\015\012    if(i < views.size)\015\012      views.each do |v|\015\012        c.untag(v)\015\012      end\015\012\015\012      c.tag(views[i - 1])\015\012\015\012      Subtlext::View[views[i - 1]].tag(views[i - 1])\015\012    end\015\012  end\015\012end\015\012\015\012on :start do\015\012  # Create missing tags\015\012  views = Subtlext::View.all.map { |v| v.name }\015\012  tags  = Subtlext::Tag.all.map { |t| t.name }\015\012\015\012  views.each do |v|\015\012    unless(tags.include?(v))\015\012      t = Subtlext::Tag.new(v)\015\012      t.save\015\012    end\015\012  end\015\012end\015\012
\015\012\015\012