uh-wm 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 +4 -4
- data/lib/uh/wm.rb +1 -0
- data/lib/uh/wm/cli.rb +23 -74
- data/lib/uh/wm/env.rb +10 -20
- data/lib/uh/wm/testing/acceptance_helpers.rb +6 -69
- data/lib/uh/wm/version.rb +1 -1
- metadata +33 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27b71703a3d4d2c882d1b7eb6a972959dae65c49
|
4
|
+
data.tar.gz: ead216935237c4e923b9e9469ce86681555daaba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e62db9a4023fe8ca1f9237135c5bb4349ea74842614808bd64c72d41a1b1dcab8094cf1419faba6de0ee5068e1e0f30be683684604a105dd78720a19579da731
|
7
|
+
data.tar.gz: 5d5d760b11fc9c6c21365ae3c9a06a5a25dc3ba49508588c6dbdd196c2aa34e9d8f07bac4186bff6c53342584f8274729f4a4fbf326279a819e909777724b96a
|
data/lib/uh/wm.rb
CHANGED
data/lib/uh/wm/cli.rb
CHANGED
@@ -1,90 +1,39 @@
|
|
1
1
|
module Uh
|
2
2
|
module WM
|
3
|
-
class CLI
|
4
|
-
ArgumentError = Class.new(ArgumentError)
|
5
|
-
|
6
|
-
include EnvLogging
|
7
|
-
|
8
|
-
USAGE = "Usage: #{File.basename $0} [options]".freeze
|
9
|
-
|
10
|
-
EX_USAGE = 64
|
11
|
-
EX_SOFTWARE = 70
|
12
|
-
|
3
|
+
class CLI < Baf::CLI
|
13
4
|
class << self
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
cli.run
|
18
|
-
rescue ArgumentError => e
|
19
|
-
stderr.puts e
|
20
|
-
exit EX_USAGE
|
21
|
-
rescue RuntimeError => e
|
22
|
-
stderr.puts "#{e.class.name}: #{e.message}"
|
23
|
-
stderr.puts e.backtrace.map { |l| ' %s' % l } if cli.env.debug?
|
24
|
-
exit EX_SOFTWARE
|
5
|
+
def handle_error env, ex
|
6
|
+
env.puts_error "#{ex.class.name}: #{ex.message}"
|
7
|
+
env.puts_error ex.backtrace.map { |l| ' %s' % l } if env.debug?
|
25
8
|
end
|
26
9
|
end
|
27
10
|
|
28
|
-
|
11
|
+
def setup
|
12
|
+
flag_verbose
|
13
|
+
flag_debug
|
14
|
+
flag_version WM::VERSION
|
29
15
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
16
|
+
option :f, :run_control, 'PATH', 'specify alternate run control file' do |path|
|
17
|
+
@env.rc_path = path
|
18
|
+
end
|
19
|
+
option :r, :require, 'PATH', 'require ruby feature' do |feature|
|
20
|
+
require feature
|
21
|
+
env.log "Loaded `#{feature}' ruby feature"
|
22
|
+
end
|
23
|
+
option :l, :layout, 'LAYOUT', 'specify layout' do |layout|
|
24
|
+
env.layout_class = Object.const_get layout.to_sym
|
25
|
+
end
|
26
|
+
option :w, :worker, 'WORKER', 'specify worker' do |worker|
|
27
|
+
env.worker = worker.to_sym
|
28
|
+
end
|
34
29
|
|
35
|
-
|
36
|
-
option_parser.parse! @arguments
|
37
|
-
rescue OptionParser::InvalidOption
|
38
|
-
raise ArgumentError, option_parser
|
30
|
+
env.sync_output
|
39
31
|
end
|
40
32
|
|
41
33
|
def run
|
34
|
+
env.log_logger_level
|
42
35
|
Runner.run env
|
43
36
|
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def option_parser
|
48
|
-
OptionParser.new do |opts|
|
49
|
-
opts.banner = USAGE
|
50
|
-
opts.separator ''
|
51
|
-
opts.separator 'options:'
|
52
|
-
|
53
|
-
opts.on '-v', '--verbose', 'enable verbose mode' do
|
54
|
-
@env.verbose = true
|
55
|
-
@env.log_logger_level
|
56
|
-
end
|
57
|
-
opts.on '-d', '--debug', 'enable debug mode' do
|
58
|
-
@env.debug = true
|
59
|
-
@env.log_logger_level
|
60
|
-
end
|
61
|
-
opts.on '-f', '--run-control PATH',
|
62
|
-
'specify alternate run control file' do |e|
|
63
|
-
@env.rc_path = e
|
64
|
-
end
|
65
|
-
opts.on '-r', '--require PATH', 'require ruby feature' do |feature|
|
66
|
-
require feature
|
67
|
-
log "Loaded `#{feature}' ruby feature"
|
68
|
-
end
|
69
|
-
opts.on '-l', '--layout LAYOUT', 'specify layout' do |layout|
|
70
|
-
@env.layout_class = Object.const_get layout.to_sym
|
71
|
-
end
|
72
|
-
opts.on '-w', Workers.types, '--worker WORKER',
|
73
|
-
'specify worker' do |worker|
|
74
|
-
@env.worker = worker.to_sym
|
75
|
-
end
|
76
|
-
|
77
|
-
opts.separator ''
|
78
|
-
opts.on_tail '-h', '--help', 'print this message' do
|
79
|
-
@env.print opts
|
80
|
-
exit
|
81
|
-
end
|
82
|
-
opts.on_tail '-V', '--version', 'print version' do
|
83
|
-
@env.puts WM::VERSION
|
84
|
-
exit
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
37
|
end
|
89
38
|
end
|
90
39
|
end
|
data/lib/uh/wm/env.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Uh
|
2
2
|
module WM
|
3
|
-
class Env
|
3
|
+
class Env < Baf::Env
|
4
4
|
RC_PATH = '~/.uhwmrc.rb'.freeze
|
5
5
|
|
6
6
|
MODIFIER = :mod1
|
@@ -15,19 +15,17 @@ module Uh
|
|
15
15
|
LOGGER_LEVEL_STRINGS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
|
16
16
|
|
17
17
|
extend Forwardable
|
18
|
-
def_delegator
|
19
|
-
def_delegator
|
20
|
-
def_delegator
|
21
|
-
def_delegator
|
22
|
-
def_delegators :@output, :print, :puts
|
18
|
+
def_delegator :logger, :info, :log
|
19
|
+
def_delegator :logger, :fatal, :log_fatal
|
20
|
+
def_delegator :logger, :error, :log_error
|
21
|
+
def_delegator :logger, :debug, :log_debug
|
23
22
|
|
24
|
-
attr_reader :
|
25
|
-
attr_accessor :
|
26
|
-
:
|
27
|
-
:launch
|
23
|
+
attr_reader :keybinds
|
24
|
+
attr_accessor :rc_path, :modifier, :modifier_ignore, :worker, :layout,
|
25
|
+
:layout_class, :layout_options, :rules, :launch
|
28
26
|
|
29
|
-
def initialize output
|
30
|
-
|
27
|
+
def initialize output: $stdout, **_
|
28
|
+
super
|
31
29
|
@rc_path = RC_PATH
|
32
30
|
@modifier = MODIFIER
|
33
31
|
@modifier_ignore = []
|
@@ -37,14 +35,6 @@ module Uh
|
|
37
35
|
@rules = {}
|
38
36
|
end
|
39
37
|
|
40
|
-
def verbose?
|
41
|
-
!!@verbose
|
42
|
-
end
|
43
|
-
|
44
|
-
def debug?
|
45
|
-
!!@debug
|
46
|
-
end
|
47
|
-
|
48
38
|
def layout
|
49
39
|
@layout ||= if layout_class
|
50
40
|
layout_class.new @layout_options
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'baf/testing/cucumber/steps/output_wait'
|
2
|
+
|
1
3
|
require 'uh'
|
2
4
|
require 'uh/wm/testing/x_client'
|
3
5
|
|
@@ -5,22 +7,11 @@ module Uh
|
|
5
7
|
module WM
|
6
8
|
module Testing
|
7
9
|
module AcceptanceHelpers
|
8
|
-
TIMEOUT_DEFAULT = 2
|
9
10
|
QUIT_KEYBINDING = 'alt+shift+q'.freeze
|
10
11
|
LOG_READY = 'Working events'.freeze
|
11
12
|
|
12
13
|
attr_reader :other_wm
|
13
14
|
|
14
|
-
def build_regexp pattern, options
|
15
|
-
Regexp.new(pattern, options.each_char.inject(0) do |m, e|
|
16
|
-
m | case e
|
17
|
-
when ?i then Regexp::IGNORECASE
|
18
|
-
when ?m then Regexp::MULTILINE
|
19
|
-
when ?x then Regexp::EXTENDED
|
20
|
-
end
|
21
|
-
end)
|
22
|
-
end
|
23
|
-
|
24
15
|
def icccm_window_start
|
25
16
|
@icccm_window = ChildProcess.build(*%w[xmessage window])
|
26
17
|
@icccm_window.start
|
@@ -34,49 +25,20 @@ module Uh
|
|
34
25
|
'xmessage'
|
35
26
|
end
|
36
27
|
|
37
|
-
def uhwm_run options = '-v'
|
38
|
-
command = %w[uhwm]
|
39
|
-
command << options if options
|
40
|
-
@interactive = @process = run command.join ' '
|
41
|
-
end
|
42
|
-
|
43
|
-
def uhwm
|
44
|
-
@process
|
45
|
-
end
|
46
|
-
|
47
28
|
def uhwm_request_quit
|
48
29
|
x_key QUIT_KEYBINDING
|
49
30
|
end
|
50
31
|
|
51
32
|
def uhwm_ensure_stop
|
52
|
-
|
53
|
-
x_key 'alt+shift+q'
|
54
|
-
@process.terminate
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def uhwm_wait_output message, times = 1, value = nil
|
59
|
-
output = -> { @process.stdout + @process.stderr }
|
60
|
-
timeout_until do
|
61
|
-
case message
|
62
|
-
when Regexp then (value = output.call.scan(message)).size >= times
|
63
|
-
when String then output.call.include? message
|
64
|
-
end
|
65
|
-
end
|
66
|
-
value
|
67
|
-
rescue TimeoutError => e
|
68
|
-
raise <<-eoh
|
69
|
-
expected `#{message}' (#{times}) not seen after #{e.timeout} seconds in:
|
70
|
-
```\n#{output.call.lines.map { |l| " #{l}" }.join} ```
|
71
|
-
eoh
|
33
|
+
uhwm_request_quit
|
72
34
|
end
|
73
35
|
|
74
36
|
def uhwm_wait_ready
|
75
|
-
|
37
|
+
wait_output! LOG_READY
|
76
38
|
end
|
77
39
|
|
78
|
-
def uhwm_run_wait_ready options =
|
79
|
-
|
40
|
+
def uhwm_run_wait_ready options = '-v'
|
41
|
+
program_run wait: false, opts: options
|
80
42
|
uhwm_wait_ready
|
81
43
|
end
|
82
44
|
|
@@ -116,31 +78,6 @@ expected `#{message}' (#{times}) not seen after #{e.timeout} seconds in:
|
|
116
78
|
end
|
117
79
|
`xwininfo #{select_args} 2> /dev/null`[/Map State: (\w+)/, 1]
|
118
80
|
end
|
119
|
-
|
120
|
-
private
|
121
|
-
|
122
|
-
def timeout_until message = 'condition not met after %d seconds'
|
123
|
-
timeout = ENV.key?('UHWMTEST_TIMEOUT') ?
|
124
|
-
ENV['UHWMTEST_TIMEOUT'].to_i :
|
125
|
-
TIMEOUT_DEFAULT
|
126
|
-
Timeout.timeout(timeout) do
|
127
|
-
loop do
|
128
|
-
break if yield
|
129
|
-
sleep 0.1
|
130
|
-
end
|
131
|
-
end
|
132
|
-
rescue Timeout::Error
|
133
|
-
raise TimeoutError.new(message % timeout, timeout)
|
134
|
-
end
|
135
|
-
|
136
|
-
class TimeoutError < ::StandardError
|
137
|
-
attr_reader :timeout
|
138
|
-
|
139
|
-
def initialize message, timeout
|
140
|
-
super message
|
141
|
-
@timeout = timeout
|
142
|
-
end
|
143
|
-
end
|
144
81
|
end
|
145
82
|
end
|
146
83
|
end
|
data/lib/uh/wm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uh-wm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
@@ -10,10 +10,27 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2017-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: baf
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rb-kqueue
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.2'
|
17
34
|
- - ">="
|
18
35
|
- !ruby/object:Gem::Version
|
19
36
|
version: 0.2.4
|
@@ -21,6 +38,9 @@ dependencies:
|
|
21
38
|
prerelease: false
|
22
39
|
version_requirements: !ruby/object:Gem::Requirement
|
23
40
|
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0.2'
|
24
44
|
- - ">="
|
25
45
|
- !ruby/object:Gem::Version
|
26
46
|
version: 0.2.4
|
@@ -42,6 +62,9 @@ dependencies:
|
|
42
62
|
name: uh-layout
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
44
64
|
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.4'
|
45
68
|
- - ">="
|
46
69
|
- !ruby/object:Gem::Version
|
47
70
|
version: 0.4.2
|
@@ -49,65 +72,40 @@ dependencies:
|
|
49
72
|
prerelease: false
|
50
73
|
version_requirements: !ruby/object:Gem::Requirement
|
51
74
|
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.4'
|
52
78
|
- - ">="
|
53
79
|
- !ruby/object:Gem::Version
|
54
80
|
version: 0.4.2
|
55
81
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.7.4
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.7.4
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: cucumber
|
82
|
+
name: rake
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
85
|
- - "~>"
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
87
|
+
version: '10'
|
76
88
|
type: :development
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
92
|
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
94
|
+
version: '10'
|
97
95
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
96
|
+
name: baf-testing
|
99
97
|
requirement: !ruby/object:Gem::Requirement
|
100
98
|
requirements:
|
101
99
|
- - "~>"
|
102
100
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
101
|
+
version: '0.0'
|
104
102
|
type: :development
|
105
103
|
prerelease: false
|
106
104
|
version_requirements: !ruby/object:Gem::Requirement
|
107
105
|
requirements:
|
108
106
|
- - "~>"
|
109
107
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
108
|
+
version: '0.0'
|
111
109
|
description: |2
|
112
110
|
uhwm is a minimalistic tiling and stacking window manager for X. It
|
113
111
|
shares some similarities with dwm and wmii, but is written in ruby so
|