uh-wm 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -4
- data/lib/uh/wm/env.rb +11 -9
- data/lib/uh/wm/manager.rb +31 -11
- data/lib/uh/wm/run_control.rb +4 -3
- data/lib/uh/wm/runner.rb +1 -1
- data/lib/uh/wm/testing/headless.rb +24 -0
- data/lib/uh/wm/version.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d30b881b7363a539a259011ee767eb42b941fe65
|
4
|
+
data.tar.gz: 4ae10cdb8a3d9a1da9b9ec4c55bf1c88890a6897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bdbddabd4ed09e97349bd80ed38b011aa33a816a8feab4b3e5cf9f417500921e1ffe943df8697217cef4d3d4d00450ae91d370abda2ed60060048bf749bc0fd
|
7
|
+
data.tar.gz: af6bc893f76cc828b33dc78bd02ed6f182ee580dc375653cc206810892380b370c75c65d81017800d2b768cec82c2e9126c2328283b82dc67c7cdc9601c89c90
|
data/README.md
CHANGED
@@ -26,6 +26,7 @@ specific messages, so it's easy to write your own layout.
|
|
26
26
|
* external program execution;
|
27
27
|
* no re-parenting (therefore, no window decoration either);
|
28
28
|
* no grabbing of the modifier key alone;
|
29
|
+
* no default key binding except for exiting;
|
29
30
|
* no mouse event handling;
|
30
31
|
* no EWMH support;
|
31
32
|
* very limited ICCCM support.
|
@@ -37,8 +38,8 @@ Installation
|
|
37
38
|
uhwm requires ruby ~> 2.1 with rubygems, and is currently
|
38
39
|
distributed as the `uh-wm` ruby gem.
|
39
40
|
|
40
|
-
```
|
41
|
-
|
41
|
+
``` shell
|
42
|
+
gem install uh-wm # install the gem or update to last release
|
42
43
|
```
|
43
44
|
|
44
45
|
|
@@ -66,7 +67,12 @@ Configuration
|
|
66
67
|
|
67
68
|
uhwm can be configured with a run control file written in ruby. A
|
68
69
|
simple example is provided below, more details are available in the
|
69
|
-
[`RunControl` class documentation][run_control_doc].
|
70
|
+
[`RunControl` class documentation][run_control_doc]. The file must be
|
71
|
+
located at the `~/.uhwmrc.rb` path.
|
72
|
+
|
73
|
+
Please note that uhwm ships with only one key binding: `mod+shift+q`
|
74
|
+
which is bound to the `quit` action. You *need* to write your own
|
75
|
+
configuration file if you want to do something useful with uhwm.
|
70
76
|
|
71
77
|
``` ruby
|
72
78
|
DMENU = 'dmenu_run -b'
|
@@ -127,6 +133,23 @@ available in the [`ActionsHandler` class documentation][actions_doc]
|
|
127
133
|
Hacking uhwm
|
128
134
|
------------
|
129
135
|
|
136
|
+
If you need to work with uhwm source code, you will need a local clone
|
137
|
+
of the repository. A bundler `Gemfile` is provided, and if you are new
|
138
|
+
to ruby and rubygems, we recommend that you use bundler to manage
|
139
|
+
dependencies. Refer to the bundler documentation if you need no know
|
140
|
+
more than this short help:
|
141
|
+
|
142
|
+
* Run `bundle install` after you update the repository sources to a
|
143
|
+
new version, or when you changes branches which affect the
|
144
|
+
`Gemfile`
|
145
|
+
* Prefix every ruby executable scripts (`bin/uhwm`, `rake`…) with
|
146
|
+
`bundle exec`, for example `bundle exec rake spec`
|
147
|
+
|
148
|
+
Please note this not the "supported" way of using uhwm, we recommend
|
149
|
+
that you use the ruby gem. The `master` branch can sometimes receive
|
150
|
+
experimental features which may need improvements before a stable gem
|
151
|
+
release.
|
152
|
+
|
130
153
|
### Installation with bundler
|
131
154
|
|
132
155
|
``` shell
|
@@ -144,7 +167,8 @@ rake spec # Run unit test suite
|
|
144
167
|
rspec # Run unit test suite
|
145
168
|
```
|
146
169
|
|
147
|
-
Prefix the commands as `bundle exec COMMAND`
|
170
|
+
Prefix the commands as `bundle exec COMMAND` if you're using
|
171
|
+
bundler.
|
148
172
|
|
149
173
|
### Running uhwm within a nested X session
|
150
174
|
|
@@ -377,6 +401,11 @@ key :m do
|
|
377
401
|
end
|
378
402
|
end
|
379
403
|
```
|
404
|
+
_I get a \`cannot load such file -- uh/wm (LoadError)\` how do I fix?_
|
405
|
+
|
406
|
+
You are probably not using the gem. If you want to use uhwm from a
|
407
|
+
local git clone or if you did a custom install, try to use bundler or
|
408
|
+
to modify the ruby load path (set `RUBYOPT=lib` for example).
|
380
409
|
|
381
410
|
|
382
411
|
|
data/lib/uh/wm/env.rb
CHANGED
@@ -22,17 +22,19 @@ module Uh
|
|
22
22
|
def_delegators :@output, :print, :puts
|
23
23
|
|
24
24
|
attr_reader :output, :keybinds
|
25
|
-
attr_accessor :verbose, :debug, :rc_path, :modifier, :
|
26
|
-
:layout, :layout_class, :layout_options, :rules,
|
25
|
+
attr_accessor :verbose, :debug, :rc_path, :modifier, :modifier_ignore,
|
26
|
+
:worker, :layout, :layout_class, :layout_options, :rules,
|
27
|
+
:launch
|
27
28
|
|
28
29
|
def initialize output
|
29
|
-
@output
|
30
|
-
@rc_path
|
31
|
-
@modifier
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
30
|
+
@output = output
|
31
|
+
@rc_path = RC_PATH
|
32
|
+
@modifier = MODIFIER
|
33
|
+
@modifier_ignore = []
|
34
|
+
@keybinds = KEYBINDS.dup
|
35
|
+
@layout_options = {}
|
36
|
+
@worker = WORKER
|
37
|
+
@rules = {}
|
36
38
|
end
|
37
39
|
|
38
40
|
def verbose?
|
data/lib/uh/wm/manager.rb
CHANGED
@@ -8,13 +8,14 @@ module Uh
|
|
8
8
|
Events::STRUCTURE_NOTIFY_MASK
|
9
9
|
DEFAULT_GEO = Geo.new(0, 0, 320, 240).freeze
|
10
10
|
|
11
|
-
attr_reader :modifier, :display, :clients
|
11
|
+
attr_reader :modifier, :modifier_ignore, :display, :clients
|
12
12
|
|
13
|
-
def initialize events,
|
14
|
-
@events
|
15
|
-
@modifier
|
16
|
-
@
|
17
|
-
@
|
13
|
+
def initialize events, mod, mod_ignore = [], display = Display.new
|
14
|
+
@events = events
|
15
|
+
@modifier = mod
|
16
|
+
@modifier_ignore = mod_ignore
|
17
|
+
@display = display
|
18
|
+
@clients = []
|
18
19
|
end
|
19
20
|
|
20
21
|
def to_io
|
@@ -43,7 +44,9 @@ module Uh
|
|
43
44
|
def grab_key keysym, mod = nil
|
44
45
|
mod_mask = KEY_MODIFIERS[@modifier]
|
45
46
|
mod_mask |= KEY_MODIFIERS[mod] if mod
|
46
|
-
@
|
47
|
+
combine_modifier_masks(@modifier_ignore) do |ignore_mask|
|
48
|
+
@display.grab_key keysym.to_s, mod_mask | ignore_mask
|
49
|
+
end
|
47
50
|
end
|
48
51
|
|
49
52
|
def configure window
|
@@ -104,10 +107,12 @@ module Uh
|
|
104
107
|
end
|
105
108
|
|
106
109
|
def handle_key_press event
|
107
|
-
|
108
|
-
|
109
|
-
event.key.to_sym
|
110
|
-
@
|
110
|
+
case remove_modifier_masks event.modifier_mask, @modifier_ignore
|
111
|
+
when KEY_MODIFIERS[@modifier]
|
112
|
+
@events.emit :key, event.key.to_sym
|
113
|
+
when KEY_MODIFIERS[@modifier] | KEY_MODIFIERS[:shift]
|
114
|
+
@events.emit :key, event.key.to_sym, :shift
|
115
|
+
end
|
111
116
|
end
|
112
117
|
|
113
118
|
def handle_configure_request event
|
@@ -148,6 +153,21 @@ module Uh
|
|
148
153
|
@display.listen_events INPUT_MASK
|
149
154
|
@display.sync false
|
150
155
|
end
|
156
|
+
|
157
|
+
def combine_modifier_masks mods
|
158
|
+
yield 0
|
159
|
+
(1..mods.size).flat_map { |n| mods.combination(n).to_a }.each do |cmb|
|
160
|
+
yield cmb.map { |e| KEY_MODIFIERS[e] }.inject &:|
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def remove_modifier_masks mask, remove
|
165
|
+
return mask unless remove.any?
|
166
|
+
mask & ~(@modifier_ignore
|
167
|
+
.map { |e| KEY_MODIFIERS[e] }
|
168
|
+
.inject &:|
|
169
|
+
)
|
170
|
+
end
|
151
171
|
end
|
152
172
|
end
|
153
173
|
end
|
data/lib/uh/wm/run_control.rb
CHANGED
@@ -90,12 +90,13 @@ module Uh
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
# Defines the modifier
|
93
|
+
# Defines the modifier masks to use for key bindings
|
94
94
|
# @example
|
95
95
|
# modifier :mod1 # Use `mod1' as modifier
|
96
96
|
# @param keysym [Symbol] X key sym
|
97
|
-
def modifier keysym
|
98
|
-
@env.modifier
|
97
|
+
def modifier keysym, ignore: []
|
98
|
+
@env.modifier = keysym
|
99
|
+
@env.modifier_ignore = [*ignore]
|
99
100
|
end
|
100
101
|
|
101
102
|
# Declares a client rule
|
data/lib/uh/wm/runner.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'childprocess'
|
2
|
+
|
3
|
+
module Uh
|
4
|
+
module WM
|
5
|
+
module Testing
|
6
|
+
module Headless
|
7
|
+
DISPLAY_NAME = ':42'
|
8
|
+
DISPLAY_SCREEN = '640x480x24'
|
9
|
+
|
10
|
+
def with_xvfb
|
11
|
+
xvfb = ChildProcess.build(*%W[
|
12
|
+
Xvfb -ac #{DISPLAY_NAME} -screen 0 #{DISPLAY_SCREEN}
|
13
|
+
])
|
14
|
+
xvfb.start
|
15
|
+
original_display = ENV['DISPLAY']
|
16
|
+
ENV['DISPLAY'] = DISPLAY_NAME
|
17
|
+
yield
|
18
|
+
ENV['DISPLAY'] = original_display
|
19
|
+
xvfb.stop
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/uh/wm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.14
|
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-06-
|
11
|
+
date: 2015-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb-kqueue
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: headless
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: rake
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,6 +134,7 @@ files:
|
|
148
134
|
- lib/uh/wm/run_control.rb
|
149
135
|
- lib/uh/wm/runner.rb
|
150
136
|
- lib/uh/wm/testing/acceptance_helpers.rb
|
137
|
+
- lib/uh/wm/testing/headless.rb
|
151
138
|
- lib/uh/wm/testing/x_client.rb
|
152
139
|
- lib/uh/wm/version.rb
|
153
140
|
- lib/uh/wm/workers.rb
|