uh-wm 0.0.1 → 0.0.2.pre
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/actions_handler.rb +17 -0
- data/lib/uh/wm/cli.rb +84 -0
- data/lib/uh/wm/dispatcher.rb +30 -0
- data/lib/uh/wm/env.rb +60 -0
- data/lib/uh/wm/manager.rb +53 -0
- data/lib/uh/wm/run_control.rb +47 -0
- data/lib/uh/wm/runner.rb +92 -0
- data/lib/uh/wm/testing/acceptance_helpers.rb +72 -0
- data/lib/uh/wm/version.rb +1 -1
- data/lib/uh/wm.rb +26 -0
- metadata +112 -8
- data/.gitignore +0 -0
- data/LICENSE +0 -30
- data/uh-wm.gemspec +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74533b8c4aea78f1fd611ad9a66f9003c7a70c78
|
4
|
+
data.tar.gz: 31ab453643a6c06b22fc7182344564976c622a5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32e9cdad0aecb15955af5dcebba0cdcb0424cc4cb7263e659dc96936c845cfba38de6007a972325b3e0e2b8e3ab16ebe6a611391f74c05009dcdd680d97f5f56
|
7
|
+
data.tar.gz: e1d903145b302e5a6ec00c00fd3e4c4bde795565a3ce5d969a8875704ff700f197c86afdf184b775a882bfa95e5aea32c4aa4be51777b6cb3841dbb0567e5566
|
data/lib/uh/wm/cli.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class CLI
|
4
|
+
ArgumentError = Class.new(ArgumentError)
|
5
|
+
|
6
|
+
USAGE = "Usage: #{File.basename $0} [options]".freeze
|
7
|
+
|
8
|
+
EX_USAGE = 64
|
9
|
+
EX_SOFTWARE = 70
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def run arguments, stdout: $stdout, stderr: $stderr
|
13
|
+
cli = new arguments, stdout: stdout
|
14
|
+
cli.parse_arguments!
|
15
|
+
cli.run
|
16
|
+
rescue ArgumentError => e
|
17
|
+
stderr.puts e
|
18
|
+
exit EX_USAGE
|
19
|
+
rescue RuntimeError => e
|
20
|
+
stderr.puts "#{e.class.name}: #{e.message}"
|
21
|
+
stderr.puts e.backtrace.map { |e| ' %s' % e } if cli.env.debug?
|
22
|
+
exit EX_SOFTWARE
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :env
|
27
|
+
|
28
|
+
def initialize args, stdout: $stdout
|
29
|
+
@arguments = args
|
30
|
+
@env = Env.new(stdout.tap { |o| o.sync = true })
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse_arguments!
|
34
|
+
option_parser.parse! @arguments
|
35
|
+
rescue OptionParser::InvalidOption => e
|
36
|
+
fail ArgumentError, option_parser
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
Runner.run env
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def option_parser
|
47
|
+
OptionParser.new do |opts|
|
48
|
+
opts.banner = USAGE
|
49
|
+
opts.separator ''
|
50
|
+
opts.separator 'options:'
|
51
|
+
|
52
|
+
opts.on '-h', '--help', 'print this message' do
|
53
|
+
@env.print opts
|
54
|
+
exit
|
55
|
+
end
|
56
|
+
|
57
|
+
opts.on '-v', '--version', 'enable verbose mode' do
|
58
|
+
@env.verbose = true
|
59
|
+
@env.log_logger_level
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on '-d', '--debug', 'enable debug mode' do
|
63
|
+
@env.debug = true
|
64
|
+
@env.log_logger_level
|
65
|
+
end
|
66
|
+
|
67
|
+
opts.on '-f', '--run-control PATH',
|
68
|
+
'specify alternate run control file' do |e|
|
69
|
+
@env.rc_path = e
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on '-r', '--require PATH', 'require ruby feature' do |feature|
|
73
|
+
require feature
|
74
|
+
@env.log "Loaded `#{feature}' ruby feature"
|
75
|
+
end
|
76
|
+
|
77
|
+
opts.on '-l', '--layout LAYOUT', 'specify layout' do |layout|
|
78
|
+
@env.layout_class = self.class.const_get layout.to_sym
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class Dispatcher
|
4
|
+
attr_reader :hooks
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@hooks = Hash.new { |h, k| h[k] = [] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def [] *key
|
11
|
+
@hooks[translate_key key]
|
12
|
+
end
|
13
|
+
|
14
|
+
def on *key, &block
|
15
|
+
@hooks[translate_key key] << block
|
16
|
+
end
|
17
|
+
|
18
|
+
def emit *key, args: []
|
19
|
+
@hooks[translate_key key].each { |e| e.call *args }
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def translate_key key
|
26
|
+
key.one? ? key[0] : key
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/uh/wm/env.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class Env
|
4
|
+
RC_PATH = '~/.uhwmrc.rb'.freeze
|
5
|
+
|
6
|
+
MODIFIER = :mod1
|
7
|
+
KEYBINDS = {
|
8
|
+
q: proc { quit }
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
LOGGER_LEVEL = Logger::WARN
|
12
|
+
LOGGER_LEVEL_VERBOSE = Logger::INFO
|
13
|
+
LOGGER_LEVEL_DEBUG = Logger::DEBUG
|
14
|
+
LOGGER_LEVEL_STRINGS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN]
|
15
|
+
|
16
|
+
extend Forwardable
|
17
|
+
def_delegator :logger, :info, :log
|
18
|
+
def_delegator :logger, :debug, :log_debug
|
19
|
+
def_delegator :@output, :print
|
20
|
+
|
21
|
+
attr_reader :output, :keybinds
|
22
|
+
attr_accessor :verbose, :debug, :rc_path, :layout_class, :modifier
|
23
|
+
|
24
|
+
def initialize output
|
25
|
+
@output = output
|
26
|
+
@rc_path = RC_PATH
|
27
|
+
@modifier = MODIFIER
|
28
|
+
@keybinds = KEYBINDS.dup
|
29
|
+
end
|
30
|
+
|
31
|
+
def verbose?
|
32
|
+
!!@verbose
|
33
|
+
end
|
34
|
+
|
35
|
+
def debug?
|
36
|
+
!!@debug
|
37
|
+
end
|
38
|
+
|
39
|
+
def layout
|
40
|
+
@layout ||= if layout_class
|
41
|
+
layout_class.new
|
42
|
+
else
|
43
|
+
require 'uh/layout'
|
44
|
+
::Uh::Layout.new
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def logger
|
49
|
+
@logger ||= Logger.new(@output).tap do |o|
|
50
|
+
o.level = debug? ? LOGGER_LEVEL_DEBUG :
|
51
|
+
verbose? ? LOGGER_LEVEL_VERBOSE : LOGGER_LEVEL
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def log_logger_level
|
56
|
+
log "Logging at #{LOGGER_LEVEL_STRINGS[logger.level]} level"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class Manager
|
4
|
+
INPUT_MASK = Events::SUBSTRUCTURE_REDIRECT_MASK
|
5
|
+
|
6
|
+
attr_reader :modifier, :display
|
7
|
+
|
8
|
+
def initialize events, modifier, display = Display.new
|
9
|
+
@events = events
|
10
|
+
@modifier = modifier
|
11
|
+
@display = display
|
12
|
+
end
|
13
|
+
|
14
|
+
def connect
|
15
|
+
@events.emit :connecting, args: @display
|
16
|
+
@display.open
|
17
|
+
Display.on_error { fail OtherWMRunningError }
|
18
|
+
@display.listen_events INPUT_MASK
|
19
|
+
@display.sync false
|
20
|
+
Display.on_error { |*args| handle_error *args }
|
21
|
+
@display.sync false
|
22
|
+
@events.emit :connected, args: @display
|
23
|
+
end
|
24
|
+
|
25
|
+
def grab_key keysym, mod = nil
|
26
|
+
mod_mask = KEY_MODIFIERS[@modifier]
|
27
|
+
mod_mask |= KEY_MODIFIERS[mod] if mod
|
28
|
+
@display.grab_key keysym.to_s, mod_mask
|
29
|
+
end
|
30
|
+
|
31
|
+
def handle_pending_events
|
32
|
+
handle @display.next_event while @display.pending?
|
33
|
+
end
|
34
|
+
|
35
|
+
def handle event
|
36
|
+
case event.type
|
37
|
+
when :key_press
|
38
|
+
key_selector = event.modifier_mask & KEY_MODIFIERS[:shift] == 1 ?
|
39
|
+
[event.key.to_sym, :shift] :
|
40
|
+
event.key.to_sym
|
41
|
+
@events.emit :key, *key_selector
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def handle_error *args
|
49
|
+
@dispatcher.emit :error, args: args
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class RunControl
|
4
|
+
KEYSYM_TRANSLATIONS = {
|
5
|
+
backspace: :BackSpace,
|
6
|
+
enter: :Return,
|
7
|
+
return: :Return,
|
8
|
+
tab: :Tab
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def evaluate env
|
13
|
+
rc_path = File.expand_path(env.rc_path)
|
14
|
+
rc = new env
|
15
|
+
rc.evaluate File.read(rc_path), rc_path if File.exist?(rc_path)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize env
|
20
|
+
@env = env
|
21
|
+
end
|
22
|
+
|
23
|
+
def evaluate code, path
|
24
|
+
instance_eval code, path
|
25
|
+
end
|
26
|
+
|
27
|
+
def modifier mod
|
28
|
+
@env.modifier = mod
|
29
|
+
end
|
30
|
+
|
31
|
+
def key keysym, &block
|
32
|
+
@env.keybinds[translate_keysym keysym] = block
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def translate_keysym keysym
|
39
|
+
translate_key = keysym.to_s.downcase.to_sym
|
40
|
+
translated_keysym = KEYSYM_TRANSLATIONS.key?(translate_key) ?
|
41
|
+
KEYSYM_TRANSLATIONS[translate_key] :
|
42
|
+
translate_key
|
43
|
+
keysym =~ /[A-Z]/ ? [translated_keysym, :shift] : translated_keysym
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/uh/wm/runner.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
class Runner
|
4
|
+
class << self
|
5
|
+
def run env, **options
|
6
|
+
runner = new env, **options
|
7
|
+
runner.evaluate_run_control
|
8
|
+
runner.register_event_hooks
|
9
|
+
runner.connect_manager
|
10
|
+
runner.run_until { runner.stopped? }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
extend Forwardable
|
15
|
+
def_delegator :@env, :layout
|
16
|
+
|
17
|
+
attr_reader :env, :events, :actions
|
18
|
+
|
19
|
+
def initialize env, manager: nil, stopped: false
|
20
|
+
@env = env
|
21
|
+
@events = Dispatcher.new
|
22
|
+
@manager = manager
|
23
|
+
@actions = ActionsHandler.new(@env, @events)
|
24
|
+
@stopped = stopped
|
25
|
+
end
|
26
|
+
|
27
|
+
def stopped?
|
28
|
+
!!@stopped
|
29
|
+
end
|
30
|
+
|
31
|
+
def stop!
|
32
|
+
@stopped = true
|
33
|
+
end
|
34
|
+
|
35
|
+
def manager
|
36
|
+
@manager ||= Manager.new(@events, @env.modifier)
|
37
|
+
end
|
38
|
+
|
39
|
+
def evaluate_run_control
|
40
|
+
RunControl.evaluate(env)
|
41
|
+
end
|
42
|
+
|
43
|
+
def register_event_hooks
|
44
|
+
register_runner_hooks
|
45
|
+
register_manager_hooks
|
46
|
+
register_layout_event_hooks
|
47
|
+
register_key_bindings_hooks
|
48
|
+
end
|
49
|
+
|
50
|
+
def connect_manager
|
51
|
+
manager.connect
|
52
|
+
@env.keybinds.each do |keysym, _|
|
53
|
+
manager.grab_key *keysym
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def run_until &block
|
58
|
+
manager.handle_pending_events until block.call
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def register_runner_hooks
|
65
|
+
@events.on(:quit) { stop! }
|
66
|
+
end
|
67
|
+
|
68
|
+
def register_manager_hooks
|
69
|
+
@events.on(:connecting) do |display|
|
70
|
+
@env.log_debug "Connecting to X server on `#{display}'"
|
71
|
+
end
|
72
|
+
@events.on(:connected) do |display|
|
73
|
+
@env.log "Connected to X server on `#{display}'"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def register_layout_event_hooks
|
78
|
+
@events.on(:connected) do |display|
|
79
|
+
layout.register display
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def register_key_bindings_hooks
|
84
|
+
@env.keybinds.each do |keysym, code|
|
85
|
+
@events.on :key, *keysym do
|
86
|
+
@actions.evaluate code
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Uh
|
2
|
+
module WM
|
3
|
+
module Testing
|
4
|
+
module AcceptanceHelpers
|
5
|
+
def uhwm_run options = '-v'
|
6
|
+
command = %w[uhwm]
|
7
|
+
command << options if options
|
8
|
+
@interactive = @process = run command.join ' '
|
9
|
+
end
|
10
|
+
|
11
|
+
def uhwm_ensure_stop
|
12
|
+
@process and @process.terminate
|
13
|
+
end
|
14
|
+
|
15
|
+
def uhwm_pid
|
16
|
+
@process.pid
|
17
|
+
end
|
18
|
+
|
19
|
+
def uhwm_output
|
20
|
+
@process.stdout
|
21
|
+
end
|
22
|
+
|
23
|
+
def uhwm_wait_output message, timeout: 1
|
24
|
+
Timeout.timeout(timeout) do
|
25
|
+
loop do
|
26
|
+
break if case message
|
27
|
+
when Regexp then @process.stdout + @process.stderr =~ message
|
28
|
+
when String then assert_partial_output_interactive message
|
29
|
+
end
|
30
|
+
sleep 0.1
|
31
|
+
end
|
32
|
+
end
|
33
|
+
rescue Timeout::Error
|
34
|
+
output = (@process.stdout + @process.stderr).lines
|
35
|
+
.map { |e| " #{e}" }
|
36
|
+
.join
|
37
|
+
fail [
|
38
|
+
"expected `#{message}' not seen after #{timeout} seconds in:",
|
39
|
+
" ```\n#{output} ```"
|
40
|
+
].join "\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
def uhwm_run_wait_ready
|
44
|
+
uhwm_run
|
45
|
+
uhwm_wait_output 'Connected to'
|
46
|
+
end
|
47
|
+
|
48
|
+
def with_other_wm
|
49
|
+
@other_wm = ChildProcess.build('twm').tap { |o| o.start }
|
50
|
+
@other_wm.stop
|
51
|
+
end
|
52
|
+
|
53
|
+
def other_wm
|
54
|
+
@other_wm
|
55
|
+
end
|
56
|
+
|
57
|
+
def x_key key
|
58
|
+
fail "cannot simulate X key `#{key}'" unless system "xdotool key #{key}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def x_socket_check pid
|
62
|
+
case RbConfig::CONFIG['host_os']
|
63
|
+
when /linux/
|
64
|
+
`netstat -xp 2> /dev/null`.lines.grep /\s+#{pid}\/ruby/
|
65
|
+
else
|
66
|
+
`sockstat -u`.lines.grep /\s+ruby.+\s+#{pid}/
|
67
|
+
end.any?
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/uh/wm/version.rb
CHANGED
data/lib/uh/wm.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'logger'
|
3
|
+
require 'optparse'
|
4
|
+
require 'uh'
|
5
|
+
|
6
|
+
require 'uh/wm/actions_handler'
|
7
|
+
require 'uh/wm/cli'
|
8
|
+
require 'uh/wm/dispatcher'
|
9
|
+
require 'uh/wm/env'
|
10
|
+
require 'uh/wm/manager'
|
11
|
+
require 'uh/wm/run_control'
|
12
|
+
require 'uh/wm/runner'
|
13
|
+
|
14
|
+
module Uh
|
15
|
+
module WM
|
16
|
+
Error = Class.new(StandardError)
|
17
|
+
RuntimeError = Class.new(RuntimeError)
|
18
|
+
ArgumentError = Class.new(Error)
|
19
|
+
|
20
|
+
class OtherWMRunningError < RuntimeError
|
21
|
+
def message
|
22
|
+
'another window manager is already running'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,25 +1,129 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uh-wm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
12
|
-
dependencies:
|
11
|
+
date: 2015-04-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: uh
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.0.pre
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.0.pre
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: uh-layout
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.0.pre
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.2.0.pre
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aruba
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cucumber
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: headless
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.2'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.2'
|
13
111
|
description: uh-wm
|
14
112
|
email: tj@a13.fr
|
15
113
|
executables: []
|
16
114
|
extensions: []
|
17
115
|
extra_rdoc_files: []
|
18
116
|
files:
|
19
|
-
-
|
20
|
-
-
|
117
|
+
- lib/uh/wm.rb
|
118
|
+
- lib/uh/wm/actions_handler.rb
|
119
|
+
- lib/uh/wm/cli.rb
|
120
|
+
- lib/uh/wm/dispatcher.rb
|
121
|
+
- lib/uh/wm/env.rb
|
122
|
+
- lib/uh/wm/manager.rb
|
123
|
+
- lib/uh/wm/run_control.rb
|
124
|
+
- lib/uh/wm/runner.rb
|
125
|
+
- lib/uh/wm/testing/acceptance_helpers.rb
|
21
126
|
- lib/uh/wm/version.rb
|
22
|
-
- uh-wm.gemspec
|
23
127
|
homepage: https://rubygems.org/gems/uh-wm
|
24
128
|
licenses: []
|
25
129
|
metadata: {}
|
@@ -34,9 +138,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
34
138
|
version: '0'
|
35
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
140
|
requirements:
|
37
|
-
- - "
|
141
|
+
- - ">"
|
38
142
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
143
|
+
version: 1.3.1
|
40
144
|
requirements: []
|
41
145
|
rubyforge_project:
|
42
146
|
rubygems_version: 2.4.5
|
data/.gitignore
DELETED
File without changes
|
data/LICENSE
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
Copyright 2015 Thibault Jouan. All rights reserved.
|
2
|
-
|
3
|
-
Redistribution and use in source and binary forms, with or without
|
4
|
-
modification, are permitted provided that the following conditions are
|
5
|
-
met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright
|
8
|
-
notice, this list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright
|
11
|
-
notice, this list of conditions and the following disclaimer in
|
12
|
-
the documentation and/or other materials provided with the
|
13
|
-
distribution.
|
14
|
-
|
15
|
-
* Neither the name of the software nor the names of its contributors
|
16
|
-
may be used to endorse or promote products derived from this
|
17
|
-
software without specific prior written permission.
|
18
|
-
|
19
|
-
|
20
|
-
THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS "AS IS" AND
|
21
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
23
|
-
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS
|
24
|
-
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
-
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
-
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
27
|
-
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
28
|
-
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
29
|
-
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
30
|
-
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/uh-wm.gemspec
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require File.expand_path('../lib/uh/wm/version', __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = 'uh-wm'
|
5
|
-
s.version = Uh::WM::VERSION.dup
|
6
|
-
s.summary = 'uh window manager'
|
7
|
-
s.description = s.name
|
8
|
-
s.homepage = 'https://rubygems.org/gems/uh-wm'
|
9
|
-
|
10
|
-
s.authors = 'Thibault Jouan'
|
11
|
-
s.email = 'tj@a13.fr'
|
12
|
-
|
13
|
-
s.files = `git ls-files`.split $/
|
14
|
-
s.test_files = s.files.grep /\A(spec|features)\//
|
15
|
-
s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) }
|
16
|
-
end
|