From: has Date: 2007-01-23T19:20:06+09:00 Subject: Re: RejectConf RubyOSA hack Gregory Brown wrote: > I remember vaguely from RejectConf someone hacked up something to > position windows on OS X using Ruby OSA. > > Did this ever get released? Or at least, is that code available somewhere? Dunno about RubyOSA, but here's the 'Stagger Finder Windows' example from rb-appscript which might give you some ideas: ####### #!/usr/bin/env ruby # Rearranges Finder windows diagonally across screen with title bars # one above another. (Could easily be adapted to work with any # scriptable application that uses standard window class terminology.) require "appscript" include Appscript x, y = 0, 44 offset = 22 # Get list of window references, ignoring any minimised windows window_list = app('Finder').windows[its.collapsed.not].get # Move windows while preserving their original sizes window_list.reverse.each do |window| x1, y1, x2, y2 = window.bounds.get window.bounds.set([x, y, x2 - x1 + x, y2 - y1 + y]) x += offset y += offset end ####### A couple of tips: - If writing general-purpose a script to work with multiple apps, note that the terminology tends to vary a bit: Carbon scriptable apps often use 'collapsed' while Cocoa ones use 'minimized'. You could probably just try 'minimized' first, then try 'collapsed' if an 'unknown property' error occurs. If both fail, the app is probably non-scriptable, in which case it'll either have to be ignored, or controlled via System Events' GUI Scripting facilities. - If you're writing a script to adjust multiple applications' windows at once, some apps (e.g. Photoshop, InDesign, XCode) can have pretty huge terminologies, so there may a perceptible delay while appscript parses all of these these. Should you find the script lacks teh snappy because of this, you could avoid the overhead by using the lower-level AEM module, which uses raw Apple event codes, instead of the terminology-driven Appscript module. HTH has -- http://appscript.sourceforge.net http://rb-appscript.rubyforge.org