swm 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b9b935a723ff0b91c3e27f18b2d54153d691b57
4
- data.tar.gz: 101329a7748b14884ffd2a1dbc6a821a2f272eff
3
+ metadata.gz: 6737404f8274bcc90d25baabc3dea109decebb3a
4
+ data.tar.gz: 46d9434f2c901bedb01808f0d49ac7afe55159e8
5
5
  SHA512:
6
- metadata.gz: f425c6c926ff11f6a083d291df1b374573eb14343de122372b5f978db72769ed7d60b083e59c9f43a42868d21b5b9066db15b0f6917d292e01e52fe7cd015915
7
- data.tar.gz: 85471aa02e014ae4fa1f5d8e6fdfdc1d04d1e6174558daeca1761caf0280da215012f693eafda7b464639873cbcb575c65808f51b27a752350bea4f50b5ef151
6
+ metadata.gz: 7c7792e75db029104688077385a794685967b49f7ec429f94a1cdecad1c8d6432a90906a7f477956b75cb9c051aced4bc0552a17f5555c9296640226aefc466d
7
+ data.tar.gz: e6ada0b85afd5c74868ee306ffe5ba503c6f8e89185f334b113afb936f94bc2a672cc4f93dbb6db574b879e6ab2823d15774d69bc3f0c89f33fc0d57310f6ba3
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # Simple Window Manager
2
2
 
3
- NOTE: THIS IS NOT YET DONE!
4
-
5
3
  SWM is a utility to place and resize windows, written for Ubuntu. It might work with other *nix distributions.
6
4
 
5
+ SWM has been confirmed _not_ to work with OS X. Please help fix this :)
6
+
7
7
  ## Installation
8
8
 
9
9
  $ gem install swm
@@ -12,8 +12,8 @@ SWM is a utility to place and resize windows, written for Ubuntu. It might work
12
12
 
13
13
  Some command line tools are needed:
14
14
 
15
- - xdotool (for getting window id if current window)
16
- - wmctrl (for moving and reizing windows)
15
+ - xdotool (for getting window id of current window)
16
+ - wmctrl (for moving and resizing windows)
17
17
  - xdpyinfo (for getting screen dimensions)
18
18
  - xwininfo (for getting window information)
19
19
 
@@ -21,10 +21,14 @@ Install these with apt-get if they are not on your system.
21
21
 
22
22
  ## Usage
23
23
 
24
+ SWM is meant to be assigned to shortcuts and will always work on the currently active window.
25
+
26
+ For example, I have configured my `Super-1` - `Super-4` to place the current window in the four corners of my screen.
27
+
24
28
  ### Moving windows
25
29
 
26
- Move windows with the move subcommand.
27
- It accepts parameters x and y which can both be specified in percentages of free screen space.
30
+ Move windows with the `move` subcommand.
31
+ It accepts parameters `x` and `y` which can both be specified in percentages of free screen space.
28
32
 
29
33
  Examples:
30
34
 
@@ -38,8 +42,8 @@ Will move the window to the left edge of the sceen, preserving the Y position
38
42
 
39
43
  There are some predefined constants that can be used to specify position:
40
44
 
41
- - For X these are: left, middle and right.
42
- - For Y is is: top, middle, bottom
45
+ - For X these are: `left`, `middle` and `right`.
46
+ - For Y it is: `top`, `middle`, `bottom`.
43
47
 
44
48
  For example:
45
49
 
data/bin/swm CHANGED
@@ -53,8 +53,10 @@ end
53
53
 
54
54
  def get_resize_options
55
55
  Trollop::options do
56
- opt :width, "The width in pixels", type: Integer
57
- opt :height, "The height in pixels", type: Integer
56
+ opt :x1, "The placement of the left edge: left, middle, right, or 0%-100%", type: String
57
+ opt :x2, "The placement of the right edge: left, middle, right, or 0%-100%", type: String
58
+ opt :y1, "The placement of the top edge: top, middle, bottom, or 0%-100%", type: String
59
+ opt :y2, "The placement of the bottom edge: top, middle, bottom, or 0%-100%", type: String
58
60
  end
59
61
  end
60
62
 
data/lib/swm.rb CHANGED
@@ -2,4 +2,6 @@ require_relative "swm/version"
2
2
  require_relative "swm/window"
3
3
  require_relative "swm/screen"
4
4
  require_relative "swm/command_runner"
5
+ require_relative "swm/commands/command"
6
+ require_relative "swm/commands/resize_command"
5
7
  require_relative "swm/commands/move_command"
@@ -0,0 +1,40 @@
1
+ module Swm
2
+ class Command
3
+ def initialize(command_options = {}, global_options = {})
4
+ @command_options = command_options
5
+ @global_options = global_options
6
+ end
7
+
8
+ def run
9
+ raise "Override in sub derived class"
10
+ end
11
+
12
+ def get_x_percentage(name = :x)
13
+ get_placement_percentage name, {
14
+ left: 0,
15
+ middle: 50,
16
+ right: 100
17
+ }
18
+ end
19
+
20
+ def get_y_percentage(name = :y)
21
+ get_placement_percentage name, {
22
+ top: 0,
23
+ middle: 50,
24
+ bottom: 100
25
+ }
26
+ end
27
+
28
+ def get_placement_percentage(name, constants)
29
+ raw_value = @command_options[name]
30
+ return nil if raw_value.nil?
31
+ if value = constants[raw_value.to_sym]
32
+ value
33
+ elsif /(\d+(\.\d+)?)\%/ =~ raw_value
34
+ $1.to_f
35
+ else
36
+ raise "Unknown placement option: #{raw_value}. Valid options are percentages (e.g. 30%) and [#{constants.map{|x| x.first.to_s}.join(' ')}]"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,9 +1,5 @@
1
1
  module Swm
2
- class MoveCommand
3
- def initialize(command_options = {}, global_options = {})
4
- @command_options = command_options
5
- @global_options = global_options
6
- end
2
+ class MoveCommand < Command
7
3
 
8
4
  def run
9
5
  window = Swm::Window.current
@@ -20,32 +16,5 @@ module Swm
20
16
  window.move x, y
21
17
  end
22
18
 
23
- def get_x_percentage
24
- get_placement_percentage :x, {
25
- left: 0,
26
- middle: 50,
27
- right: 100
28
- }
29
- end
30
-
31
- def get_y_percentage
32
- get_placement_percentage :y, {
33
- top: 0,
34
- middle: 50,
35
- bottom: 100
36
- }
37
- end
38
-
39
- def get_placement_percentage(axis, constants)
40
- raw_value = @command_options[axis]
41
- return nil if raw_value.nil?
42
- if value = constants[raw_value.to_sym]
43
- value
44
- elsif /(\d+(\.\d+)?)\%/ =~ raw_value
45
- $1.to_f
46
- else
47
- raise "Unknown placement option: #{raw_value}. Valid options are percentages (e.g. 30%) and [#{constants.map{|x| x.first.to_s}.join(' ')}]"
48
- end
49
- end
50
19
  end
51
20
  end
@@ -0,0 +1,28 @@
1
+ module Swm
2
+ class ResizeCommand < Command
3
+
4
+ def run
5
+ x1 = get_x_percentage :x1
6
+ x2 = get_x_percentage :x2
7
+ y1 = get_y_percentage :y1
8
+ y2 = get_y_percentage :y2
9
+
10
+ screen_dimensions = Screen.dimensions
11
+ window = Swm::Window.current
12
+
13
+ x = y = width = height = nil
14
+ x = (screen_dimensions[0] * x1 / 100.0).to_i if x1
15
+ y = (screen_dimensions[1] * y1 / 100.0).to_i if y1
16
+ width = (screen_dimensions[0] * x2 / 100.0).to_i - (x || window.pos_x) if x2
17
+ height = (screen_dimensions[1] * y2 / 100.0).to_i - (y || window.pos_y) if y2
18
+
19
+ puts "x: #{x}"
20
+ puts "y: #{y}"
21
+ puts "width: #{width}"
22
+ puts "height: #{height}"
23
+
24
+ window.set x, y, width, height
25
+ end
26
+
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  module Swm
2
2
  class Screen
3
3
  def self.dimensions
4
- /(\d+x\d+) pixels/.match(`xdpyinfo | grep dimensions`)[1].split('x').map{|s| s.to_i }
4
+ @dimenesions ||= /(\d+x\d+) pixels/.match(`xdpyinfo | grep dimensions`)[1].split('x').map{|s| s.to_i }
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  module Swm
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -27,8 +27,17 @@ module Swm
27
27
  def move(x, y)
28
28
  x ||= pos_x
29
29
  y ||= pos_y
30
- command = "wmctrl -i -r #{@id} -e 0,#{x},#{y},#{width},#{height}"
30
+ set x, y, nil, nil
31
+ end
32
+
33
+ def set(x, y, w, h)
34
+ x ||= pos_x
35
+ y ||= pos_y
36
+ w ||= width
37
+ h ||= height
38
+ command = "wmctrl -i -r #{@id} -e 0,#{x},#{y},#{w},#{h}"
31
39
  exec command
40
+ clear_cache
32
41
  end
33
42
 
34
43
  private
@@ -68,5 +77,9 @@ module Swm
68
77
  def xwininfo_integer_property(name)
69
78
  /#{name}: +(\d+)/.match(xwininfo)[1].to_i
70
79
  end
80
+
81
+ def clear_cache
82
+ @xwininfo = nil
83
+ end
71
84
  end
72
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lasse Skindstad Ebert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-16 00:00:00.000000000 Z
11
+ date: 2013-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trollop
@@ -102,7 +102,9 @@ files:
102
102
  - bin/swm
103
103
  - lib/swm.rb
104
104
  - lib/swm/command_runner.rb
105
+ - lib/swm/commands/command.rb
105
106
  - lib/swm/commands/move_command.rb
107
+ - lib/swm/commands/resize_command.rb
106
108
  - lib/swm/screen.rb
107
109
  - lib/swm/version.rb
108
110
  - lib/swm/window.rb
@@ -129,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
131
  version: '0'
130
132
  requirements: []
131
133
  rubyforge_project:
132
- rubygems_version: 2.0.2
134
+ rubygems_version: 2.0.3
133
135
  signing_key:
134
136
  specification_version: 4
135
137
  summary: Simple Window Manager for Ubuntu