colszowka-window_resizer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile ADDED
@@ -0,0 +1 @@
1
+ Todooo
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/ruby
2
+ require 'optparse'
3
+ require 'rubygems'
4
+ require File.join(File.dirname(__FILE__), '../lib', 'window_resizer')
5
+
6
+ # Set up options hash
7
+ options = {:resize_factors => {}, :positions => {} }
8
+
9
+ opt_parser = OptionParser.new do |opts|
10
+ opts.banner = "Usage: #{File.basename(__FILE__)} [options]"
11
+
12
+ opts.on("-x X", "--width-ratio X", Float, "Resize ratio for window width relative to screen resolution. Defaults to 0.85") do |x|
13
+ options[:resize_factors][:x] = x
14
+ # Fall back to default
15
+ options[:resize_factors][:x] ||= 0.85
16
+ # Show error if resize ratio is invalid
17
+ if options[:resize_factors][:x] < 0.1 or options[:resize_factors][:x] > 1.0
18
+ raise OptionParser::InvalidArgument, "Width resize ratio must be > 0.1 and <= 1.0"
19
+ end
20
+ end
21
+
22
+ opts.on("-y X", "--height-ratio X", Float, "Resize ratio for window height relative to screen resolution. Defaults to 0.85") do |y|
23
+ options[:resize_factors][:y] = y
24
+ # Fall back to default
25
+ options[:resize_factors][:y] ||= 0.85
26
+ # Show error if resize ratio is invalid
27
+ if options[:resize_factors][:y] < 0.1 or options[:resize_factors][:y] > 1.0
28
+ raise OptionParser::InvalidArgument, "Height resize ratio must be > 0.1 and <= 1.0"
29
+ end
30
+ end
31
+
32
+ opts.on("--left", "Change window position to left screen border") do
33
+ options[:positions][:x] = :left
34
+ end
35
+ opts.on("--right", "Change window position to right screen border") do
36
+ options[:positions][:x] = :right
37
+ end
38
+ opts.on("--top", "Change window position to upper screen border") do
39
+ options[:positions][:y] = :top
40
+ end
41
+ opts.on("--bottom", "Change window position to lower screen border") do
42
+ options[:positions][:y] = :bottom
43
+ end
44
+
45
+ # Fall back to centered positions of none given
46
+ options[:positions][:x] ||= :center
47
+ options[:positions][:y] ||= :center
48
+ end
49
+
50
+ # Parse options and exit on failure
51
+ begin
52
+ opt_parser.parse!
53
+ rescue => err
54
+ puts "Whoops! #{err}"
55
+ exit
56
+ end
57
+
58
+ # Invoke the window resizer
59
+ WindowResizer.resize_current_to options
@@ -0,0 +1,85 @@
1
+ #
2
+ # A basic utility module that wraps command line tools xrandr (for detecting current X screen resolution)
3
+ # and wmctrl (for setting current window's position and size)
4
+ #
5
+ module WindowResizer
6
+ #
7
+ # Getter for current resolution
8
+ #
9
+ def self.resolution
10
+ @@resolution ||= update_resolutions
11
+ end
12
+
13
+ #
14
+ # Retrieve and assign the current X screen resolution by invoking xrandr and parsing the output
15
+ #
16
+ def self.update_resolutions
17
+ `xrandr` =~ /current ([^x]*)x([^,]*),/
18
+ @@resolution = {:x => $1.strip.chomp.to_i, :y => $2.strip.chomp.to_i}
19
+ end
20
+
21
+ #
22
+ # Will resize the current window to :positions => {:x => 123, :y => 123}
23
+ # and with :resize_factors => {:x => 0.85, :y => 0.76}
24
+ #
25
+ # Resize factors are relative to full screen resolution, so 1.0 is 1920 pixels X in a 1920*1200
26
+ # resolution, 0.5 would be 960 and so on...
27
+ #
28
+ # Position can also be :left, :center, :right for :x, :top, :bottom, :center for :y
29
+ #
30
+ def self.resize_current_to(options)
31
+ raise "Please specify :positions => {:x => 123, :y => 123} and :resize_factors => {:x => 0.85, :y => 0.76}" if not options[:positions] or not options[:resize_factors]
32
+ # Calculate desired window sizes
33
+ window_sizes = {:x => (resolution[:x]*options[:resize_factors][:x]).to_i,
34
+ :y => (resolution[:y]*options[:resize_factors][:y]).to_i}
35
+
36
+ options[:positions] = process_positions(options[:positions], window_sizes)
37
+
38
+ # Invoke wmctrl with the given parameters
39
+ `wmctrl -r :ACTIVE: -e 4,#{options[:positions][:x]},#{options[:positions][:y]},#{window_sizes[:x]},#{window_sizes[:y]}`
40
+ end
41
+
42
+ protected
43
+
44
+ #
45
+ # Will evaluate given symbols for automatic position calculation
46
+ # positions[:x] can be :left, :right or :center
47
+ # positions[:y] can be :top, :bottom, :center
48
+ #
49
+ def self.process_positions(positions, window_sizes)
50
+ if positions[:x].instance_of?(Symbol)
51
+ positions[:x] = send("#{positions[:x]}_position_for_x", window_sizes)
52
+ end
53
+
54
+ if positions[:y].instance_of?(Symbol)
55
+ positions[:y] = send("#{positions[:y]}_position_for_y", window_sizes)
56
+ end
57
+
58
+ positions
59
+ end
60
+
61
+ def self.left_position_for_x(sizes)
62
+ 0
63
+ end
64
+
65
+ def self.right_position_for_x(sizes)
66
+ resolution[:x]-sizes[:x]
67
+ end
68
+
69
+ def self.center_position_for_x(sizes)
70
+ (resolution[:x]-sizes[:x])/2+rand(30)
71
+ end
72
+
73
+ def self.top_position_for_y(sizes)
74
+ 0
75
+ end
76
+
77
+ def self.bottom_position_for_y(sizes)
78
+ resolution[:y]-sizes[:y]
79
+ end
80
+
81
+ def self.center_position_for_y(sizes)
82
+ (resolution[:y]-sizes[:y])/2+rand(30)
83
+ end
84
+
85
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: colszowka-window_resizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Christoph Olszowka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-31 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mime-types
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "1.15"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: diff-lcs
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.2
34
+ version:
35
+ description: Grit is a Ruby library for extracting information from a git repository in an object oriented manner.
36
+ email: tom@mojombo.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - bin/resize_current_window
45
+ - lib/window_resizer.rb
46
+ - README.textile
47
+ has_rdoc: true
48
+ homepage: http://github.com/colszowka/window_resizer
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --inline-source
52
+ - --charset=UTF-8
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ requirements: []
68
+
69
+ rubyforge_project:
70
+ rubygems_version: 1.2.0
71
+ signing_key:
72
+ specification_version: 2
73
+ summary: A shell script for resizing and positioning the active window in the X window system
74
+ test_files: []
75
+