fusuma-plugin-wmctrl 1.3.0 → 1.3.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.
- checksums.yaml +4 -4
- data/fusuma-plugin-wmctrl.gemspec +16 -17
- data/lib/fusuma/plugin/executors/wmctrl_executor.rb +16 -16
- data/lib/fusuma/plugin/wmctrl/version.rb +1 -1
- data/lib/fusuma/plugin/wmctrl/window.rb +1 -1
- data/lib/fusuma/plugin/wmctrl/workspace.rb +20 -20
- data/lib/fusuma/plugin/wmctrl.rb +2 -2
- metadata +2 -12
- data/spec/fusuma/plugin/plugin/executors/wmctrl_executor_spec.rb +0 -358
- data/spec/fusuma/plugin/plugin/wmctrl/workspace_spec.rb +0 -236
- data/spec/fusuma/plugin/wmctrl_spec.rb +0 -9
- data/spec/helpers/config_helper.rb +0 -16
- data/spec/spec_helper.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d929c23fcedce401d4fa3c9ac1f5a39e2aba97eb7fdce00864a385da0b391723
|
4
|
+
data.tar.gz: 6ad065e14cb5f184ce47e8ae8925f93bc14fb54c0740822937d45137571ac179
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a35a9f5ca6338b8c62a58905c7d03f7f4738eb104cd792e03b23cba48faf3a5dec8b957a3cfcc294f78d7c20120537d687b52d9541b965f5c485fb1e0ceff63a
|
7
|
+
data.tar.gz: 5ad6fd27a381ce6698e974dbcddd04369c5f9741859866cfcf0bf5a311c3478565e809b3150c2cc43507ebc9379a14e29753de3cd5280d7557721bb1b0fd2d31
|
@@ -1,28 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require "fusuma/plugin/wmctrl/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name
|
9
|
-
spec.version
|
10
|
-
spec.authors
|
11
|
-
spec.email
|
8
|
+
spec.name = "fusuma-plugin-wmctrl"
|
9
|
+
spec.version = Fusuma::Plugin::Wmctrl::VERSION
|
10
|
+
spec.authors = ["iberianpig"]
|
11
|
+
spec.email = ["yhkyky@gmail.com"]
|
12
12
|
|
13
|
-
spec.summary
|
14
|
-
spec.description
|
15
|
-
spec.homepage
|
16
|
-
spec.license
|
13
|
+
spec.summary = "Wmctrl plugin for Fusuma "
|
14
|
+
spec.description = "fusuma-plugin-wmctrl is Fusuma plugin for window manager."
|
15
|
+
spec.homepage = "https://github.com/iberianpig/fusuma-plugin-wmctrl"
|
16
|
+
spec.license = "MIT"
|
17
17
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
|
-
spec.files
|
20
|
-
spec.
|
21
|
-
spec.
|
22
|
-
spec.
|
23
|
-
spec.require_paths = ['lib']
|
19
|
+
spec.files = Dir["{bin,lib,exe}/**/*", "LICENSE*", "README*", "*.gemspec"]
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
24
23
|
|
25
|
-
spec.required_ruby_version =
|
24
|
+
spec.required_ruby_version = ">= 2.5.1" # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all§ion=main
|
26
25
|
# support bionic (18.04LTS) 2.5.1
|
27
|
-
spec.add_dependency
|
26
|
+
spec.add_dependency "fusuma", ">= 3.1"
|
28
27
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
3
|
+
require_relative "../wmctrl/window"
|
4
|
+
require_relative "../wmctrl/workspace"
|
5
5
|
|
6
6
|
module Fusuma
|
7
7
|
module Plugin
|
@@ -16,16 +16,16 @@ module Fusuma
|
|
16
16
|
|
17
17
|
def config_param_types
|
18
18
|
{
|
19
|
-
|
20
|
-
|
19
|
+
"wrap-navigation": [TrueClass, FalseClass],
|
20
|
+
"matrix-col-size": [Integer]
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize
|
25
25
|
super()
|
26
26
|
@workspace = Wmctrl::Workspace.new(
|
27
|
-
wrap_navigation: config_params(:
|
28
|
-
matrix_col_size: config_params(:
|
27
|
+
wrap_navigation: config_params(:"wrap-navigation"),
|
28
|
+
matrix_col_size: config_params(:"matrix-col-size")
|
29
29
|
)
|
30
30
|
@window = Wmctrl::Window.new
|
31
31
|
end
|
@@ -45,7 +45,7 @@ module Fusuma
|
|
45
45
|
# @param event [Event]
|
46
46
|
# @return [TrueClass, FalseClass]
|
47
47
|
def executable?(event)
|
48
|
-
event.tag.end_with?(
|
48
|
+
event.tag.end_with?("_detector") &&
|
49
49
|
event.record.type == :index &&
|
50
50
|
search_command(event)
|
51
51
|
end
|
@@ -69,9 +69,9 @@ module Fusuma
|
|
69
69
|
index = Config::Index.new([*event.record.index.keys, :workspace])
|
70
70
|
|
71
71
|
case property = Config.search(index)
|
72
|
-
when
|
72
|
+
when "prev", "next"
|
73
73
|
@workspace.move_command(direction: property)
|
74
|
-
when
|
74
|
+
when "left", "right", "up", "down"
|
75
75
|
@workspace.move_command_for_matrix(direction: property)
|
76
76
|
when nil
|
77
77
|
nil
|
@@ -87,15 +87,15 @@ module Fusuma
|
|
87
87
|
index = Config::Index.new([*event.record.index.keys, :window])
|
88
88
|
|
89
89
|
case property = Config.search(index)
|
90
|
-
when
|
90
|
+
when "prev", "next"
|
91
91
|
@workspace.move_window_command(direction: property)
|
92
|
-
when
|
92
|
+
when "left", "right", "up", "down"
|
93
93
|
@workspace.move_window_command_for_matrix(direction: property)
|
94
|
-
when
|
95
|
-
@window.fullscreen(method:
|
96
|
-
when
|
97
|
-
@window.maximized(method:
|
98
|
-
when
|
94
|
+
when "fullscreen"
|
95
|
+
@window.fullscreen(method: "toggle")
|
96
|
+
when "maximized"
|
97
|
+
@window.maximized(method: "toggle")
|
98
|
+
when "close"
|
99
99
|
@window.close
|
100
100
|
when Hash
|
101
101
|
if property[:fullscreen]
|
@@ -53,7 +53,7 @@ module Fusuma
|
|
53
53
|
matrix-col-size: 2
|
54
54
|
```
|
55
55
|
ERRRORMESSAGE
|
56
|
-
raise MissingMatrixOption,
|
56
|
+
raise MissingMatrixOption, "You need to set matrix option to config.yml"
|
57
57
|
end
|
58
58
|
|
59
59
|
# @return [Integer]
|
@@ -65,7 +65,7 @@ module Fusuma
|
|
65
65
|
x = current_workspace_num % col_size
|
66
66
|
y = current_workspace_num / col_size
|
67
67
|
case direction
|
68
|
-
when
|
68
|
+
when "right"
|
69
69
|
if x < col_size - 1
|
70
70
|
current_workspace_num + 1
|
71
71
|
elsif @wrap_navigation
|
@@ -73,7 +73,7 @@ module Fusuma
|
|
73
73
|
else
|
74
74
|
current_workspace_num
|
75
75
|
end
|
76
|
-
when
|
76
|
+
when "left"
|
77
77
|
if x.positive?
|
78
78
|
current_workspace_num - 1
|
79
79
|
elsif @wrap_navigation
|
@@ -81,7 +81,7 @@ module Fusuma
|
|
81
81
|
else
|
82
82
|
current_workspace_num
|
83
83
|
end
|
84
|
-
when
|
84
|
+
when "down"
|
85
85
|
if y < row_size - 1
|
86
86
|
current_workspace_num + col_size
|
87
87
|
elsif @wrap_navigation
|
@@ -89,7 +89,7 @@ module Fusuma
|
|
89
89
|
else
|
90
90
|
current_workspace_num
|
91
91
|
end
|
92
|
-
when
|
92
|
+
when "up"
|
93
93
|
if y.positive?
|
94
94
|
current_workspace_num - col_size
|
95
95
|
elsif @wrap_navigation
|
@@ -104,13 +104,13 @@ module Fusuma
|
|
104
104
|
|
105
105
|
def move_command(direction:)
|
106
106
|
workspace_num = case direction
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
107
|
+
when "next"
|
108
|
+
next_workspace_num(step: 1)
|
109
|
+
when "prev"
|
110
|
+
next_workspace_num(step: -1)
|
111
|
+
else
|
112
|
+
raise "#{direction} is invalid key"
|
113
|
+
end
|
114
114
|
"wmctrl -s #{workspace_num}"
|
115
115
|
end
|
116
116
|
|
@@ -121,13 +121,13 @@ module Fusuma
|
|
121
121
|
|
122
122
|
def move_window_command(direction:)
|
123
123
|
workspace_num = case direction
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
124
|
+
when "next"
|
125
|
+
next_workspace_num(step: 1)
|
126
|
+
when "prev"
|
127
|
+
next_workspace_num(step: -1)
|
128
|
+
else
|
129
|
+
raise "#{direction} is invalid key"
|
130
|
+
end
|
131
131
|
"wmctrl -r :ACTIVE: -t #{workspace_num} ; wmctrl -s #{workspace_num}"
|
132
132
|
end
|
133
133
|
|
@@ -149,7 +149,7 @@ module Fusuma
|
|
149
149
|
# (_NET_CURRENT_DESKTOP or _WIN_WORKSPACE property)`
|
150
150
|
return [0, 1] if current_line.nil?
|
151
151
|
|
152
|
-
current_workspace_num = current_line.
|
152
|
+
current_workspace_num = current_line[0].to_i
|
153
153
|
total_workspace_num = wmctrl_output.length
|
154
154
|
|
155
155
|
[current_workspace_num, total_workspace_num]
|
data/lib/fusuma/plugin/wmctrl.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fusuma-plugin-wmctrl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
@@ -44,11 +44,6 @@ files:
|
|
44
44
|
- lib/fusuma/plugin/wmctrl/version.rb
|
45
45
|
- lib/fusuma/plugin/wmctrl/window.rb
|
46
46
|
- lib/fusuma/plugin/wmctrl/workspace.rb
|
47
|
-
- spec/fusuma/plugin/plugin/executors/wmctrl_executor_spec.rb
|
48
|
-
- spec/fusuma/plugin/plugin/wmctrl/workspace_spec.rb
|
49
|
-
- spec/fusuma/plugin/wmctrl_spec.rb
|
50
|
-
- spec/helpers/config_helper.rb
|
51
|
-
- spec/spec_helper.rb
|
52
47
|
homepage: https://github.com/iberianpig/fusuma-plugin-wmctrl
|
53
48
|
licenses:
|
54
49
|
- MIT
|
@@ -72,9 +67,4 @@ rubygems_version: 3.3.26
|
|
72
67
|
signing_key:
|
73
68
|
specification_version: 4
|
74
69
|
summary: Wmctrl plugin for Fusuma
|
75
|
-
test_files:
|
76
|
-
- spec/fusuma/plugin/plugin/executors/wmctrl_executor_spec.rb
|
77
|
-
- spec/fusuma/plugin/plugin/wmctrl/workspace_spec.rb
|
78
|
-
- spec/fusuma/plugin/wmctrl_spec.rb
|
79
|
-
- spec/helpers/config_helper.rb
|
80
|
-
- spec/spec_helper.rb
|
70
|
+
test_files: []
|
@@ -1,358 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
require 'fusuma/plugin/executors/executor'
|
6
|
-
require 'fusuma/plugin/events/event'
|
7
|
-
require 'fusuma/plugin/events/records/index_record'
|
8
|
-
|
9
|
-
require './lib/fusuma/plugin/executors/wmctrl_executor'
|
10
|
-
|
11
|
-
module Fusuma
|
12
|
-
module Plugin
|
13
|
-
module Executors
|
14
|
-
RSpec.describe WmctrlExecutor do
|
15
|
-
before do
|
16
|
-
@workspace = double(Wmctrl::Workspace)
|
17
|
-
allow(Wmctrl::Workspace)
|
18
|
-
.to receive(:new)
|
19
|
-
.and_return(@workspace)
|
20
|
-
|
21
|
-
index = Config::Index.new([:dummy, 1, :direction])
|
22
|
-
record = Events::Records::IndexRecord.new(index: index)
|
23
|
-
@event = Events::Event.new(tag: 'dummy_detector', record: record)
|
24
|
-
@executor = WmctrlExecutor.new
|
25
|
-
allow(@executor).to receive(:search_command).and_return 'dummy command'
|
26
|
-
end
|
27
|
-
|
28
|
-
around do |example|
|
29
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
30
|
-
dummy:
|
31
|
-
1:
|
32
|
-
direction:
|
33
|
-
workspace: 'prev'
|
34
|
-
CONFIG
|
35
|
-
|
36
|
-
example.run
|
37
|
-
|
38
|
-
Config.custom_path = nil
|
39
|
-
end
|
40
|
-
|
41
|
-
describe '#execute' do
|
42
|
-
it 'detach' do
|
43
|
-
pid = rand(20)
|
44
|
-
allow(Process).to receive(:spawn).with(@executor.search_command(@event))
|
45
|
-
.and_return pid
|
46
|
-
|
47
|
-
expect(Process).to receive(:detach).with(pid)
|
48
|
-
|
49
|
-
@executor.execute(@event)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '#executable?' do
|
54
|
-
context 'when given valid event tagged as xxxx_detector' do
|
55
|
-
it { expect(@executor.executable?(@event)).to be_truthy }
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'when given INVALID event tagged as invalid_tag' do
|
59
|
-
before do
|
60
|
-
@event.tag = 'invalid_tag'
|
61
|
-
end
|
62
|
-
it { expect(@executor.executable?(@event)).to be_falsey }
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '#search_command' do
|
67
|
-
before do
|
68
|
-
allow(@executor).to receive(:search_command).and_call_original
|
69
|
-
|
70
|
-
@current_workspace = 1
|
71
|
-
@total_workspaces = 3
|
72
|
-
allow(@workspace)
|
73
|
-
.to receive(:workspace_values)
|
74
|
-
.and_return([@current_workspace, @total_workspaces])
|
75
|
-
end
|
76
|
-
context "when workspace: 'prev'" do
|
77
|
-
around do |example|
|
78
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
79
|
-
dummy:
|
80
|
-
1:
|
81
|
-
direction:
|
82
|
-
workspace: 'prev'
|
83
|
-
CONFIG
|
84
|
-
|
85
|
-
example.run
|
86
|
-
|
87
|
-
Config.custom_path = nil
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'should return wmctrl command' do
|
91
|
-
expect(@workspace).to receive(:move_command).with(direction: 'prev')
|
92
|
-
@executor.search_command(@event)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "when window: 'prev'" do
|
97
|
-
around do |example|
|
98
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
99
|
-
dummy:
|
100
|
-
1:
|
101
|
-
direction:
|
102
|
-
window: 'prev'
|
103
|
-
CONFIG
|
104
|
-
|
105
|
-
example.run
|
106
|
-
|
107
|
-
Config.custom_path = nil
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should return wmctrl command' do
|
111
|
-
expect(@workspace).to receive(:move_window_command).with(direction: 'prev')
|
112
|
-
@executor.search_command(@event)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context "when window: 'fullscreen'" do
|
117
|
-
around do |example|
|
118
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
119
|
-
dummy:
|
120
|
-
1:
|
121
|
-
direction:
|
122
|
-
window: 'fullscreen'
|
123
|
-
CONFIG
|
124
|
-
|
125
|
-
example.run
|
126
|
-
|
127
|
-
Config.custom_path = nil
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'should return wmctrl command' do
|
131
|
-
expect(@executor.search_command(@event))
|
132
|
-
.to match(/wmctrl -r :ACTIVE: -b toggle,fullscreen/)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
context 'when window: [fullscreen: something]' do
|
137
|
-
context "when fullscreen: 'toggle'" do
|
138
|
-
around do |example|
|
139
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
140
|
-
dummy:
|
141
|
-
1:
|
142
|
-
direction:
|
143
|
-
window:
|
144
|
-
fullscreen: 'toggle'
|
145
|
-
CONFIG
|
146
|
-
|
147
|
-
example.run
|
148
|
-
|
149
|
-
Config.custom_path = nil
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'should return wmctrl command' do
|
153
|
-
expect(@executor.search_command(@event))
|
154
|
-
.to match(/wmctrl -r :ACTIVE: -b toggle,fullscreen/)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
context "when fullscreen: 'add'" do
|
159
|
-
around do |example|
|
160
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
161
|
-
dummy:
|
162
|
-
1:
|
163
|
-
direction:
|
164
|
-
window:
|
165
|
-
fullscreen: 'add'
|
166
|
-
CONFIG
|
167
|
-
|
168
|
-
example.run
|
169
|
-
|
170
|
-
Config.custom_path = nil
|
171
|
-
end
|
172
|
-
|
173
|
-
it 'should return wmctrl command' do
|
174
|
-
expect(@executor.search_command(@event))
|
175
|
-
.to match(/wmctrl -r :ACTIVE: -b add,fullscreen/)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
context "when fullscreen: 'remove'" do
|
180
|
-
around do |example|
|
181
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
182
|
-
dummy:
|
183
|
-
1:
|
184
|
-
direction:
|
185
|
-
window:
|
186
|
-
fullscreen: 'remove'
|
187
|
-
CONFIG
|
188
|
-
|
189
|
-
example.run
|
190
|
-
|
191
|
-
Config.custom_path = nil
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'should return wmctrl command' do
|
195
|
-
expect(@executor.search_command(@event))
|
196
|
-
.to match(/wmctrl -r :ACTIVE: -b remove,fullscreen/)
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
context "when window: 'maximized'" do
|
202
|
-
around do |example|
|
203
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
204
|
-
dummy:
|
205
|
-
1:
|
206
|
-
direction:
|
207
|
-
window: 'maximized'
|
208
|
-
CONFIG
|
209
|
-
|
210
|
-
example.run
|
211
|
-
|
212
|
-
Config.custom_path = nil
|
213
|
-
end
|
214
|
-
|
215
|
-
it 'should return wmctrl command' do
|
216
|
-
expect(@executor.search_command(@event))
|
217
|
-
.to match(/wmctrl -r :ACTIVE: -b toggle,maximized/)
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
context 'when window: [maximized: something]' do
|
222
|
-
context "when maximized: 'toggle'" do
|
223
|
-
around do |example|
|
224
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
225
|
-
dummy:
|
226
|
-
1:
|
227
|
-
direction:
|
228
|
-
window:
|
229
|
-
maximized: 'toggle'
|
230
|
-
CONFIG
|
231
|
-
|
232
|
-
example.run
|
233
|
-
|
234
|
-
Config.custom_path = nil
|
235
|
-
end
|
236
|
-
|
237
|
-
it 'should return wmctrl command' do
|
238
|
-
expect(@executor.search_command(@event))
|
239
|
-
.to match(/wmctrl -r :ACTIVE: -b toggle,maximized/)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
context "when maximized: 'add'" do
|
244
|
-
around do |example|
|
245
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
246
|
-
dummy:
|
247
|
-
1:
|
248
|
-
direction:
|
249
|
-
window:
|
250
|
-
maximized: 'add'
|
251
|
-
CONFIG
|
252
|
-
|
253
|
-
example.run
|
254
|
-
|
255
|
-
Config.custom_path = nil
|
256
|
-
end
|
257
|
-
|
258
|
-
it 'should return wmctrl command' do
|
259
|
-
expect(@executor.search_command(@event))
|
260
|
-
.to match(/wmctrl -r :ACTIVE: -b add,maximized/)
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
context "when maximized: 'remove'" do
|
265
|
-
around do |example|
|
266
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
267
|
-
dummy:
|
268
|
-
1:
|
269
|
-
direction:
|
270
|
-
window:
|
271
|
-
maximized: 'remove'
|
272
|
-
CONFIG
|
273
|
-
|
274
|
-
example.run
|
275
|
-
|
276
|
-
Config.custom_path = nil
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'should return wmctrl command' do
|
280
|
-
expect(@executor.search_command(@event))
|
281
|
-
.to match(/wmctrl -r :ACTIVE: -b remove,maximized/)
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
context "when window: 'close'" do
|
286
|
-
around do |example|
|
287
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
288
|
-
dummy:
|
289
|
-
1:
|
290
|
-
direction:
|
291
|
-
window: 'close'
|
292
|
-
CONFIG
|
293
|
-
|
294
|
-
example.run
|
295
|
-
|
296
|
-
Config.custom_path = nil
|
297
|
-
end
|
298
|
-
|
299
|
-
it 'should return wmctrl command' do
|
300
|
-
expect(@executor.search_command(@event))
|
301
|
-
.to match(/wmctrl -c :ACTIVE:/)
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
describe 'wrap_navigation: true' do
|
306
|
-
around do |example|
|
307
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
308
|
-
plugin:
|
309
|
-
executors:
|
310
|
-
wmctrl_executor:
|
311
|
-
wrap-navigation: true
|
312
|
-
CONFIG
|
313
|
-
|
314
|
-
example.run
|
315
|
-
|
316
|
-
Config.custom_path = nil
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'should wrap-navigation mode' do
|
320
|
-
expect(Wmctrl::Workspace).to receive(:new).with(
|
321
|
-
wrap_navigation: true,
|
322
|
-
matrix_col_size: nil
|
323
|
-
)
|
324
|
-
WmctrlExecutor.new
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
|
-
describe 'matrix-col-size' do
|
329
|
-
context "with matrix-col-size: '3', right" do
|
330
|
-
around do |example|
|
331
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
332
|
-
dummy:
|
333
|
-
1:
|
334
|
-
direction:
|
335
|
-
window: 'right'
|
336
|
-
plugin:
|
337
|
-
executors:
|
338
|
-
wmctrl_executor:
|
339
|
-
matrix-col-size: 3
|
340
|
-
CONFIG
|
341
|
-
|
342
|
-
example.run
|
343
|
-
|
344
|
-
Config.custom_path = nil
|
345
|
-
end
|
346
|
-
|
347
|
-
it 'should return wmctrl command with index of right(next) workspace' do
|
348
|
-
expect(@workspace).to receive(:move_window_command_for_matrix)
|
349
|
-
.with(direction: 'right')
|
350
|
-
@executor.search_command(@event)
|
351
|
-
end
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
@@ -1,236 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require './lib/fusuma/plugin/wmctrl/workspace'
|
5
|
-
|
6
|
-
module Fusuma
|
7
|
-
module Plugin
|
8
|
-
module Wmctrl
|
9
|
-
RSpec.describe Workspace do
|
10
|
-
def stub_workspace_values(current:, total:)
|
11
|
-
allow(@workspace).to receive(:workspace_values).and_return([current, total])
|
12
|
-
end
|
13
|
-
|
14
|
-
before { @workspace = Workspace.new }
|
15
|
-
|
16
|
-
describe '#move_command' do
|
17
|
-
before { stub_workspace_values(current: 1, total: 3) }
|
18
|
-
|
19
|
-
context "with 'direction: next'" do
|
20
|
-
before { @direction = 'next' }
|
21
|
-
it 'returns wmctrl command to move NEXT workspace' do
|
22
|
-
expect(@workspace.move_command(direction: @direction))
|
23
|
-
.to match(/wmctrl -s 2/)
|
24
|
-
end
|
25
|
-
it 'calls next_workspace_num' do
|
26
|
-
expect(@workspace).to receive(:next_workspace_num).with(step: 1)
|
27
|
-
@workspace.move_command(direction: @direction)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#move_command_for_matrix' do
|
33
|
-
before do
|
34
|
-
@workspace = Workspace.new(matrix_col_size: 3)
|
35
|
-
stub_workspace_values(current: 0, total: 9)
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with direction: 'right'" do
|
39
|
-
before { @direction = 'right' }
|
40
|
-
|
41
|
-
it 'returns wmctrl command to move RIGHT workspace' do
|
42
|
-
expect(@workspace.move_command_for_matrix(direction: @direction))
|
43
|
-
.to match(/wmctrl -s 1/)
|
44
|
-
end
|
45
|
-
it 'calls next_workspace_num_for_matrix' do
|
46
|
-
expect(@workspace).to receive(:next_workspace_num_for_matrix)
|
47
|
-
.with(direction: @direction)
|
48
|
-
@workspace.move_command_for_matrix(direction: @direction)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
context "with direction: 'down'" do
|
52
|
-
before { @direction = 'down' }
|
53
|
-
|
54
|
-
it 'returns wmctrl command to move workspace to DOWN' do
|
55
|
-
expect(@workspace.move_command_for_matrix(direction: @direction))
|
56
|
-
.to match(/wmctrl -s 3/)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#move_window_command' do
|
62
|
-
before { stub_workspace_values(current: 1, total: 3) }
|
63
|
-
|
64
|
-
context "with direction: 'next'" do
|
65
|
-
before { @direction = 'next' }
|
66
|
-
|
67
|
-
it 'returns wmctrl command to move NEXT workspace' do
|
68
|
-
wmctrl_move_window = /wmctrl -r :ACTIVE: -t 2/
|
69
|
-
wmctrl_move_workspace = /wmctrl -s 2/
|
70
|
-
expect(@workspace.move_window_command(direction: @direction))
|
71
|
-
.to match(wmctrl_move_window)
|
72
|
-
expect(@workspace.move_window_command(direction: @direction))
|
73
|
-
.to match(wmctrl_move_workspace)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "with direction: 'prev'" do
|
78
|
-
before { @direction = 'prev' }
|
79
|
-
|
80
|
-
it 'returns wmctrl command to move NEXT workspace' do
|
81
|
-
wmctrl_move_window = /wmctrl -r :ACTIVE: -t 0/
|
82
|
-
wmctrl_move_workspace = /wmctrl -s 0/
|
83
|
-
expect(@workspace.move_window_command(direction: @direction))
|
84
|
-
.to match(wmctrl_move_window)
|
85
|
-
expect(@workspace.move_window_command(direction: @direction))
|
86
|
-
.to match(wmctrl_move_workspace)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe '#move_window_command_for_matrix' do
|
92
|
-
before do
|
93
|
-
@workspace = Workspace.new(matrix_col_size: 3)
|
94
|
-
stub_workspace_values(current: 0, total: 9)
|
95
|
-
end
|
96
|
-
|
97
|
-
context "with direction: 'right'" do
|
98
|
-
before { @direction = 'right' }
|
99
|
-
|
100
|
-
it 'returns wmctrl command to move NEXT workspace' do
|
101
|
-
wmctrl_move_window = /wmctrl -r :ACTIVE: -t 1/
|
102
|
-
wmctrl_move_workspace = /wmctrl -s 1/
|
103
|
-
expect(@workspace.move_window_command_for_matrix(direction: @direction))
|
104
|
-
.to match(wmctrl_move_window)
|
105
|
-
expect(@workspace.move_window_command_for_matrix(direction: @direction))
|
106
|
-
.to match(wmctrl_move_workspace)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
context "with direction: 'down'" do
|
110
|
-
before { @direction = 'down' }
|
111
|
-
|
112
|
-
it 'returns wmctrl command to move NEXT workspace' do
|
113
|
-
wmctrl_move_window = /wmctrl -r :ACTIVE: -t 3/
|
114
|
-
wmctrl_move_workspace = /wmctrl -s 3/
|
115
|
-
expect(@workspace.move_window_command_for_matrix(direction: @direction))
|
116
|
-
.to match(wmctrl_move_window)
|
117
|
-
expect(@workspace.move_window_command_for_matrix(direction: @direction))
|
118
|
-
.to match(wmctrl_move_workspace)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe '#next_workspace_num' do
|
124
|
-
before { stub_workspace_values(current: 1, total: 3) }
|
125
|
-
context 'with step: 1' do
|
126
|
-
before { @step = 1 }
|
127
|
-
it { expect(@workspace.next_workspace_num(step: @step)).to eq 1 + @step }
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
describe '#next_workspace_num_for_matrix' do
|
132
|
-
context 'without matrix option' do
|
133
|
-
before { @workspace = Workspace.new(matrix_col_size: nil) }
|
134
|
-
|
135
|
-
it 'raises InvalidOption' do
|
136
|
-
expect do
|
137
|
-
@workspace.next_workspace_num_for_matrix(direction: 'prev')
|
138
|
-
end.to raise_error(Wmctrl::Workspace::MissingMatrixOption)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context 'with matrix_col_size: 3' do
|
143
|
-
# +---+---+---+
|
144
|
-
# | 0 | 1 | 2 |
|
145
|
-
# +---+---+---+
|
146
|
-
# | 3 | 4 | 5 |
|
147
|
-
# +---+---+---+
|
148
|
-
# | 6 | 7 | 8 |
|
149
|
-
# +---+---+---+
|
150
|
-
before do
|
151
|
-
@workspace = Workspace.new(matrix_col_size: 3)
|
152
|
-
stub_workspace_values(current: 1, total: 9)
|
153
|
-
end
|
154
|
-
|
155
|
-
context 'with invalid direction' do
|
156
|
-
before { @direction = 'foo' }
|
157
|
-
it 'raises InvalidOption' do
|
158
|
-
expect do
|
159
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
160
|
-
end.to raise_error(RuntimeError, "#{@direction} is invalid key")
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context 'with direction: right' do
|
165
|
-
before { @direction = 'right' }
|
166
|
-
it 'next workspace' do
|
167
|
-
expect(
|
168
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
169
|
-
).to eq 2
|
170
|
-
end
|
171
|
-
context 'when current_workspace is right edge' do
|
172
|
-
before { stub_workspace_values(current: 2, total: 9) }
|
173
|
-
it 'same workspace' do
|
174
|
-
expect(
|
175
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
176
|
-
).to eq 2
|
177
|
-
end
|
178
|
-
|
179
|
-
context 'with wrap_navigation: true' do
|
180
|
-
before { @workspace.instance_variable_set(:@wrap_navigation, true) }
|
181
|
-
it 'same workspace' do
|
182
|
-
expect(
|
183
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
184
|
-
).to eq 0
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
context 'with direction: down' do
|
190
|
-
before { @direction = 'down' }
|
191
|
-
it 'next workspace' do
|
192
|
-
expect(
|
193
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
194
|
-
).to eq 4
|
195
|
-
end
|
196
|
-
context 'when current_workspace is bottom' do
|
197
|
-
before { stub_workspace_values(current: 7, total: 9) }
|
198
|
-
it 'same workspace' do
|
199
|
-
expect(
|
200
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
201
|
-
).to eq 7
|
202
|
-
end
|
203
|
-
|
204
|
-
context 'with wrap_navigation: true' do
|
205
|
-
before { @workspace.instance_variable_set(:@wrap_navigation, true) }
|
206
|
-
it 'same workspace' do
|
207
|
-
expect(
|
208
|
-
@workspace.next_workspace_num_for_matrix(direction: @direction)
|
209
|
-
).to eq 1
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
describe '#matrix_size' do
|
218
|
-
context 'with matrix_col_size' do
|
219
|
-
before do
|
220
|
-
@workspace = Workspace.new(matrix_col_size: 3)
|
221
|
-
stub_workspace_values(current: 1, total: 3)
|
222
|
-
end
|
223
|
-
it { expect(@workspace.matrix_size(3)).to eq [1, 3] }
|
224
|
-
end
|
225
|
-
context 'with matrix_col_size' do
|
226
|
-
before do
|
227
|
-
@workspace = Workspace.new(matrix_col_size: nil)
|
228
|
-
stub_workspace_values(current: 1, total: 3)
|
229
|
-
end
|
230
|
-
it { expect { @workspace.matrix_size(3) }.to raise_error Workspace::MissingMatrixOption }
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'tempfile'
|
4
|
-
require 'fusuma/config'
|
5
|
-
|
6
|
-
module Fusuma
|
7
|
-
module ConfigHelper
|
8
|
-
module_function
|
9
|
-
|
10
|
-
def load_config_yml=(string)
|
11
|
-
Config.custom_path = Tempfile.open do |temp_file|
|
12
|
-
temp_file.tap { |f| f.write(string) }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'helpers/config_helper'
|
5
|
-
|
6
|
-
RSpec.configure do |config|
|
7
|
-
# Enable flags like --only-failures and --next-failure
|
8
|
-
config.example_status_persistence_file_path = '.rspec_status'
|
9
|
-
|
10
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
11
|
-
config.disable_monkey_patching!
|
12
|
-
|
13
|
-
config.expect_with :rspec do |c|
|
14
|
-
c.syntax = :expect
|
15
|
-
end
|
16
|
-
|
17
|
-
config.include(Fusuma::ConfigHelper)
|
18
|
-
end
|