colszowka-window_resizer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+