Project

General

Profile

unexist.dev

/

subtle

Assorted tidbits and projects

Snippets » History » Version 16

Version 15 (Anonymous, 06/17/2010 08:40 PM) → Version 16/46 (Anonymous, 06/18/2010 04:27 PM)

h1. 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\012<pre><code view\015\012\015\012<pre><code class="ruby">\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</code></pre>\015\012\015\012h2. Gravity tiling\015\012\015\012Tiles windows vertically that share a gravity.\015\012\015\012<pre><code class="ruby">\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\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 * OPTIONS[:border], h - 2 * OPTIONS[:border] ]\015\012 pos += width\015\012 end\015\012 end\015\012end\015\012</code></pre>\015\012\015\012h2. Extend view\015\012\015\012<pre><code class="ruby">\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</code></pre>\015\012\015\012Finally make some use of this like following hook:\015\012\015\012<pre><code class="ruby">\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</code></pre>\015\012\015\012