rumai 3.3.0 → 3.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CREDITS +4 -11
- data/bin/rumai +2 -30
- data/lib/rumai/fs.rb +3 -3
- data/lib/rumai/inochi.rb +10 -10
- data/man/man1/rumai.1 +1956 -0
- metadata +21 -21
- data/man.html +0 -957
- data/man/man1/rumai.1.gz +0 -0
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rumai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 11
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 3
|
8
7
|
- 3
|
9
|
-
-
|
10
|
-
version: 3.3.
|
8
|
+
- 1
|
9
|
+
version: 3.3.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Suraj N. Kurapati
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-08-11 00:00:00 -07:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,35 +25,39 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 7
|
30
28
|
segments:
|
31
|
-
-
|
32
|
-
- 0
|
29
|
+
- 5
|
33
30
|
- 0
|
34
|
-
|
31
|
+
- 2
|
32
|
+
version: 5.0.2
|
35
33
|
- - <
|
36
34
|
- !ruby/object:Gem::Version
|
37
|
-
hash: 11
|
38
35
|
segments:
|
39
|
-
-
|
40
|
-
version: "
|
36
|
+
- 6
|
37
|
+
version: "6"
|
41
38
|
type: :development
|
42
39
|
version_requirements: *id001
|
43
40
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
41
|
+
name: detest
|
45
42
|
prerelease: false
|
46
43
|
requirement: &id002 !ruby/object:Gem::Requirement
|
47
44
|
none: false
|
48
45
|
requirements:
|
49
|
-
- -
|
46
|
+
- - ">="
|
50
47
|
- !ruby/object:Gem::Version
|
51
|
-
hash: 7
|
52
48
|
segments:
|
53
|
-
-
|
54
|
-
|
49
|
+
- 3
|
50
|
+
- 1
|
51
|
+
- 0
|
52
|
+
version: 3.1.0
|
53
|
+
- - <
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 4
|
57
|
+
version: "4"
|
55
58
|
type: :development
|
56
59
|
version_requirements: *id002
|
57
|
-
description: Rumai is a pure Ruby interface to the wmii window manager. Its name
|
60
|
+
description: Rumai is a pure [Ruby] interface to the [wmii] window manager. Its name
|
58
61
|
is a portmanteau of "Ruby" and "wmii", which I pronounce as "vim eye".
|
59
62
|
email:
|
60
63
|
executables:
|
61
64
|
- rumai
|
@@ -74,8 +77,7 @@ files:
|
|
74
77
|
- lib/rumai/irb.rb
|
75
78
|
- LICENSE
|
76
79
|
- CREDITS
|
77
|
-
- man.
|
78
|
-
- man/man1/rumai.1.gz
|
80
|
+
- man/man1/rumai.1
|
79
81
|
has_rdoc: true
|
80
82
|
homepage: http://snk.tuxfamily.org/lib/rumai/
|
81
83
|
licenses: []
|
@@ -90,7 +92,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
92
|
requirements:
|
91
93
|
- - ">="
|
92
94
|
- !ruby/object:Gem::Version
|
93
|
-
hash: 3
|
94
95
|
segments:
|
95
96
|
- 0
|
96
97
|
version: "0"
|
@@ -99,7 +100,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
100
|
requirements:
|
100
101
|
- - ">="
|
101
102
|
- !ruby/object:Gem::Version
|
102
|
-
hash: 3
|
103
103
|
segments:
|
104
104
|
- 0
|
105
105
|
version: "0"
|
data/man.html
DELETED
@@ -1,957 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
-
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
6
|
-
<title>rumai(1) - Ruby interface to the wmii window manager</title>
|
7
|
-
<style type='text/css' media='all'>
|
8
|
-
/* style: man */
|
9
|
-
body#manpage {margin:0}
|
10
|
-
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
11
|
-
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
12
|
-
.mp h2 {margin:10px 0 0 0}
|
13
|
-
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
14
|
-
.mp h3 {margin:0 0 0 4ex}
|
15
|
-
.mp dt {margin:0;clear:left}
|
16
|
-
.mp dt.flush {float:left;width:8ex}
|
17
|
-
.mp dd {margin:0 0 0 9ex}
|
18
|
-
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
19
|
-
.mp pre {margin-bottom:20px}
|
20
|
-
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
21
|
-
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
22
|
-
.mp img {display:block;margin:auto}
|
23
|
-
.mp h1.man-title {display:none}
|
24
|
-
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
25
|
-
.mp h2 {font-size:16px;line-height:1.25}
|
26
|
-
.mp h1 {font-size:20px;line-height:2}
|
27
|
-
.mp {text-align:justify;background:#fff}
|
28
|
-
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
29
|
-
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
30
|
-
.mp u {text-decoration:underline}
|
31
|
-
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
32
|
-
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
33
|
-
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
34
|
-
.mp b.man-ref {font-weight:normal;color:#434241}
|
35
|
-
.mp pre {padding:0 4ex}
|
36
|
-
.mp pre code {font-weight:normal;color:#434241}
|
37
|
-
.mp h2+pre,h3+pre {padding-left:0}
|
38
|
-
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
39
|
-
ol.man-decor {width:100%}
|
40
|
-
ol.man-decor li.tl {text-align:left}
|
41
|
-
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
42
|
-
ol.man-decor li.tr {text-align:right;float:right}
|
43
|
-
</style>
|
44
|
-
<style type='text/css' media='all'>
|
45
|
-
/* style: toc */
|
46
|
-
.man-navigation {display:block !important;position:fixed;top:0;left:113ex;height:100%;width:100%;padding:48px 0 0 0;border-left:1px solid #dbdbdb;background:#eee}
|
47
|
-
.man-navigation a,.man-navigation a:hover,.man-navigation a:link,.man-navigation a:visited {display:block;margin:0;padding:5px 2px 5px 30px;color:#999;text-decoration:none}
|
48
|
-
.man-navigation a:hover {color:#111;text-decoration:underline}
|
49
|
-
</style>
|
50
|
-
<style type='text/css' media='all'>
|
51
|
-
/* style: 80c */
|
52
|
-
.mp {max-width:86ex}
|
53
|
-
|
54
|
-
.man-navigation {left:101ex}
|
55
|
-
</style>
|
56
|
-
</head>
|
57
|
-
<!--
|
58
|
-
The following styles are deprecated and will be removed at some point:
|
59
|
-
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
60
|
-
|
61
|
-
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
62
|
-
.man-navigation should be used instead.
|
63
|
-
-->
|
64
|
-
<body id='manpage'>
|
65
|
-
<div class='mp' id='man'>
|
66
|
-
|
67
|
-
<div class='man-navigation' style='display:none'>
|
68
|
-
<a href="#NAME">NAME</a>
|
69
|
-
<a href="#SYNOPSIS">SYNOPSIS</a>
|
70
|
-
<a href="#DESCRIPTION">DESCRIPTION</a>
|
71
|
-
<a href="#OPTIONS">OPTIONS</a>
|
72
|
-
<a href="#EXAMPLES">EXAMPLES</a>
|
73
|
-
<a href="#HACKING">HACKING</a>
|
74
|
-
<a href="#VERSIONS">VERSIONS</a>
|
75
|
-
<a href="#AUTHORS">AUTHORS</a>
|
76
|
-
<a href="#CREDITS">CREDITS</a>
|
77
|
-
<a href="#LICENSE">LICENSE</a>
|
78
|
-
<a href="#SEE-ALSO">SEE ALSO</a>
|
79
|
-
</div>
|
80
|
-
|
81
|
-
<ol class='man-decor man-head man head'>
|
82
|
-
<li class='tl'>rumai(1)</li>
|
83
|
-
<li class='tc'>Version 3.3.0</li>
|
84
|
-
<li class='tr'>rumai(1)</li>
|
85
|
-
</ol>
|
86
|
-
|
87
|
-
<h2 id="NAME">NAME</h2>
|
88
|
-
<p class="man-name">
|
89
|
-
<code>rumai</code> - <span class="man-whatis">Ruby interface to the wmii window manager</span>
|
90
|
-
</p>
|
91
|
-
|
92
|
-
<p>Rumai is a pure <a href="http://ruby-lang.org">Ruby</a> interface to the <a href="http://wmii.suckless.org">wmii</a> window manager. Its name is a
|
93
|
-
portmanteau of "<em>Ru</em>by" and "w<em>mi</em>i" (which I pronounce as "vim eye").</p>
|
94
|
-
|
95
|
-
<h3 id="Features">Features</h3>
|
96
|
-
|
97
|
-
<ul>
|
98
|
-
<li><p>Provides an interactive shell for live experimentation.</p></li>
|
99
|
-
<li><p>Arranges clients, columns, views, and tags dynamically.</p></li>
|
100
|
-
<li><p>Talks directly to wmii's <a href="http://libs.suckless.org/libixp">IXP filesystem interface</a>.</p></li>
|
101
|
-
<li><p>Includes a pure Ruby client for the <a href="http://cm.bell-labs.com/magic/man2html/5/intro">9P2000 protocol</a>.</p></li>
|
102
|
-
<li><p>Powers <a href="http://github.com/sunaku/wmiirc">my personal</a> wmiirc and
|
103
|
-
<a href="http://github.com/sunaku/wmiirc/network">many others</a> like it.</p></li>
|
104
|
-
</ul>
|
105
|
-
|
106
|
-
|
107
|
-
<h3 id="Resources">Resources</h3>
|
108
|
-
|
109
|
-
<dl>
|
110
|
-
<dt>Issue tracker (report bugs, request features, get help)</dt><dd><p><a href="http://github.com/sunaku/rumai/issues" data-bare-link="true">http://github.com/sunaku/rumai/issues</a></p></dd>
|
111
|
-
<dt>Source code (browse online or obtain with <a href="http://git-scm.com">Git</a>)</dt><dd><p><a href="http://github.com/sunaku/rumai" data-bare-link="true">http://github.com/sunaku/rumai</a></p></dd>
|
112
|
-
<dt>API documentation</dt><dd><p><a href="http://snk.tuxfamily.org/lib/rumai/api/" data-bare-link="true">http://snk.tuxfamily.org/lib/rumai/api/</a></p></dd>
|
113
|
-
<dt>Announcements feed</dt><dd><p><a href="http://snk.tuxfamily.org/lib/rumai/ann.xml" data-bare-link="true">http://snk.tuxfamily.org/lib/rumai/ann.xml</a></p></dd>
|
114
|
-
<dt>Official website</dt><dd><p><a href="http://snk.tuxfamily.org/lib/rumai/" data-bare-link="true">http://snk.tuxfamily.org/lib/rumai/</a></p></dd>
|
115
|
-
</dl>
|
116
|
-
|
117
|
-
|
118
|
-
<h3 id="Setup">Setup</h3>
|
119
|
-
|
120
|
-
<p>Prerequisites:</p>
|
121
|
-
|
122
|
-
<ul>
|
123
|
-
<li><p><a href="http://ruby-lang.org">Ruby</a> 1.8.6 or newer.</p></li>
|
124
|
-
<li><p><a href="http://rubygems.org">RubyGems</a> 1.3.6 or newer.</p></li>
|
125
|
-
<li><p><a href="http://wmii.suckless.org">wmii</a> 3.9 or newer.</p></li>
|
126
|
-
</ul>
|
127
|
-
|
128
|
-
|
129
|
-
<p>Installing:</p>
|
130
|
-
|
131
|
-
<pre><code>gem install rumai
|
132
|
-
</code></pre>
|
133
|
-
|
134
|
-
<p>Upgrading:</p>
|
135
|
-
|
136
|
-
<pre><code>gem update rumai
|
137
|
-
</code></pre>
|
138
|
-
|
139
|
-
<p>Removing:</p>
|
140
|
-
|
141
|
-
<pre><code>gem uninstall rumai
|
142
|
-
</code></pre>
|
143
|
-
|
144
|
-
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
145
|
-
|
146
|
-
<p><code>rumai</code> [<var>OPTIONS</var>] [<var>IRB_OPTIONS</var>]</p>
|
147
|
-
|
148
|
-
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
149
|
-
|
150
|
-
<p>Starts an interactive Ruby shell (IRB) session by passing the given
|
151
|
-
<var>IRB_OPTIONS</var> to <span class="man-ref">irb<span class="s">(1)</span></span>. This puts you at a command prompt as follows:</p>
|
152
|
-
|
153
|
-
<pre><code>irb(Rumai):001:0>
|
154
|
-
</code></pre>
|
155
|
-
|
156
|
-
<p>The <code>irb(Rumai)</code> token in the command prompt indicates that commands will be
|
157
|
-
evaluated <em>inside</em> the <code>Rumai</code> module. As a result, you can omit the "Rumai"
|
158
|
-
prefix from your commands if you wish.</p>
|
159
|
-
|
160
|
-
<p>For example, to get the currently selected client, you can type <code>curr_client</code>
|
161
|
-
instead of <code>Rumai.curr_client</code> at the prompt. Both commands achieve the same
|
162
|
-
effect.</p>
|
163
|
-
|
164
|
-
<p>The next thing to notice is that <em>TAB completion</em> is enabled. So you can type
|
165
|
-
part of a command and press the TAB key to see a list of possible completions.</p>
|
166
|
-
|
167
|
-
<h2 id="OPTIONS">OPTIONS</h2>
|
168
|
-
|
169
|
-
<dl>
|
170
|
-
<dt><code>-h</code>, <code>--help</code></dt><dd><p>Display this manual and exit.</p></dd>
|
171
|
-
<dt><code>-v</code>, <code>--version</code></dt><dd><p>Print version number and exit.</p></dd>
|
172
|
-
</dl>
|
173
|
-
|
174
|
-
|
175
|
-
<h2 id="EXAMPLES">EXAMPLES</h2>
|
176
|
-
|
177
|
-
<p>Now that you know how to start the interactive shell (see <strong>DESCRIPTION</strong>
|
178
|
-
above) let us walk through a series of examples that highlight the main
|
179
|
-
features of Rumai. You can follow along by copying & pasting the presented
|
180
|
-
commands into the interactive shell.</p>
|
181
|
-
|
182
|
-
<h3 id="Automated-client-arrangement">Automated client arrangement</h3>
|
183
|
-
|
184
|
-
<p>Launch a few terminals so that we have something to work with:</p>
|
185
|
-
|
186
|
-
<pre><code>colors = %w[ red green blue black orange brown gray navy gold ]
|
187
|
-
colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
|
188
|
-
</code></pre>
|
189
|
-
|
190
|
-
<p>Arrange all clients in a grid:</p>
|
191
|
-
|
192
|
-
<pre><code>curr_view.arrange_in_grid
|
193
|
-
</code></pre>
|
194
|
-
|
195
|
-
<p>Arrange all clients in a diamond shape:</p>
|
196
|
-
|
197
|
-
<pre><code>curr_view.arrange_in_diamond
|
198
|
-
</code></pre>
|
199
|
-
|
200
|
-
<p>Arrange all clients like LarsWM does:</p>
|
201
|
-
|
202
|
-
<pre><code>curr_view.arrange_as_larswm
|
203
|
-
</code></pre>
|
204
|
-
|
205
|
-
<p>Close the terminals we launched earlier:</p>
|
206
|
-
|
207
|
-
<pre><code>terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
208
|
-
terms.each {|c| c.kill }
|
209
|
-
</code></pre>
|
210
|
-
|
211
|
-
<h3 id="Multiple-client-grouping">Multiple client grouping</h3>
|
212
|
-
|
213
|
-
<p>Launch a few terminals so that we have something to work with:</p>
|
214
|
-
|
215
|
-
<pre><code>colors = %w[ red green blue black orange brown gray navy gold ]
|
216
|
-
colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
|
217
|
-
</code></pre>
|
218
|
-
|
219
|
-
<p>Add the red, green, and blue terminals into the "grouping":</p>
|
220
|
-
|
221
|
-
<pre><code>terms = curr_view.clients.select do |c|
|
222
|
-
%w[red green blue].include? c.label.read
|
223
|
-
end
|
224
|
-
terms.each {|c| c.group }
|
225
|
-
</code></pre>
|
226
|
-
|
227
|
-
<p>You should now see a new button labelled as "@" on the left-hand side of
|
228
|
-
wmii's bar, indicating that there is now a new view labelled "@" in wmii.
|
229
|
-
Let us inspect what clients this mysterious view contains:</p>
|
230
|
-
|
231
|
-
<pre><code>v = View.new "@"
|
232
|
-
puts v.clients.map {|c| c.label.read }
|
233
|
-
</code></pre>
|
234
|
-
|
235
|
-
<p>Aha! The mysterious view contains the red, green, and blue clients we
|
236
|
-
recently "grouped". Thus, by adding a client to the "grouping", we are
|
237
|
-
simply tagging the client with the "@" token.</p>
|
238
|
-
|
239
|
-
<p>Now that we have put some clients into the "grouping", let us move all
|
240
|
-
clients in the grouping to the floating area in the current view:</p>
|
241
|
-
|
242
|
-
<pre><code>grouping.each {|c| c.send "toggle" }
|
243
|
-
</code></pre>
|
244
|
-
|
245
|
-
<p>Neat! Let us bring them back into the managed area:</p>
|
246
|
-
|
247
|
-
<pre><code>grouping.each {|c| c.send "toggle" }
|
248
|
-
</code></pre>
|
249
|
-
|
250
|
-
<p>Close the terminals we launched earlier:</p>
|
251
|
-
|
252
|
-
<pre><code>terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
253
|
-
terms.each {|c| c.kill }
|
254
|
-
</code></pre>
|
255
|
-
|
256
|
-
<p>In summary, you can select multiple clients (by adding them to the
|
257
|
-
"grouping") and perform operations on them. This is useful when you want
|
258
|
-
to do something with a group of clients but do not want to manually focus
|
259
|
-
one, perform the action, focus the next one, and so on.</p>
|
260
|
-
|
261
|
-
<p>Another important aspect is that selected clients stay selected until they
|
262
|
-
are unselected. This allows you to continue performing tasks on the
|
263
|
-
selection without having to reselect the same clients after every
|
264
|
-
operation.</p>
|
265
|
-
|
266
|
-
<h3 id="Easy-column-manipulation">Easy column manipulation</h3>
|
267
|
-
|
268
|
-
<p>Launch a few terminals so that we have something to work with:</p>
|
269
|
-
|
270
|
-
<pre><code>colors = %w[ red green blue black orange brown gray navy gold ]
|
271
|
-
colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
|
272
|
-
</code></pre>
|
273
|
-
|
274
|
-
<p>You can insert a group of clients to the top, bottom, or after the
|
275
|
-
currently focused client of <em>any</em> column using Array-like methods.</p>
|
276
|
-
|
277
|
-
<p>Give each client its own column (one client per column):</p>
|
278
|
-
|
279
|
-
<pre><code>curr_view.each_column {|c| c.length = 1 }
|
280
|
-
</code></pre>
|
281
|
-
|
282
|
-
<p>Put (at most) three clients in every column:</p>
|
283
|
-
|
284
|
-
<pre><code>curr_view.each_column {|c| c.length = 3 }
|
285
|
-
</code></pre>
|
286
|
-
|
287
|
-
<p>Move the red, green, and blue clients into the floating area:</p>
|
288
|
-
|
289
|
-
<pre><code>rgb = %w[red green blue]
|
290
|
-
terms = curr_view.clients.select {|c| rgb.include? c.label.read }
|
291
|
-
curr_view.areas[0].push terms
|
292
|
-
</code></pre>
|
293
|
-
|
294
|
-
<p>Slurp all floating clients into the last column:</p>
|
295
|
-
|
296
|
-
<pre><code>list = curr_view.areas
|
297
|
-
a, b = list.first, list.last
|
298
|
-
b.concat a
|
299
|
-
</code></pre>
|
300
|
-
|
301
|
-
<p>Set the last column's layout to stacking mode:</p>
|
302
|
-
|
303
|
-
<pre><code>b.layout = 'stack'
|
304
|
-
</code></pre>
|
305
|
-
|
306
|
-
<p>Move the red, green, and blue clients to the top of the second column:</p>
|
307
|
-
|
308
|
-
<pre><code>curr_view.areas[2].unshift terms
|
309
|
-
</code></pre>
|
310
|
-
|
311
|
-
<p>Move the red, green, and blue clients to the bottom of the third column:</p>
|
312
|
-
|
313
|
-
<pre><code>curr_view.areas[3].push terms
|
314
|
-
</code></pre>
|
315
|
-
|
316
|
-
<p>Close the terminals we launched earlier:</p>
|
317
|
-
|
318
|
-
<pre><code>terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
319
|
-
terms.each {|c| c.kill }
|
320
|
-
</code></pre>
|
321
|
-
|
322
|
-
<h3 id="Easy-client-manipulation">Easy client manipulation</h3>
|
323
|
-
|
324
|
-
<p>Launch a few terminals so that we have something to work with:</p>
|
325
|
-
|
326
|
-
<pre><code>colors = %w[ red green blue black orange brown gray navy gold ]
|
327
|
-
colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
|
328
|
-
</code></pre>
|
329
|
-
|
330
|
-
<p>Obtain a reference to the red client:</p>
|
331
|
-
|
332
|
-
<pre><code>red = curr_view.clients.find {|c| c.label.read == "red" }
|
333
|
-
</code></pre>
|
334
|
-
|
335
|
-
<p>Show the red client's current tags:</p>
|
336
|
-
|
337
|
-
<pre><code>red.tags
|
338
|
-
</code></pre>
|
339
|
-
|
340
|
-
<p>Add the "foo" and "bar" tags to the red client:</p>
|
341
|
-
|
342
|
-
<pre><code>red.tag "foo", "bar"
|
343
|
-
</code></pre>
|
344
|
-
|
345
|
-
<p>Remove the "bar" tag from the red client:</p>
|
346
|
-
|
347
|
-
<pre><code>red.untag "bar"
|
348
|
-
</code></pre>
|
349
|
-
|
350
|
-
<p>Do complex operations on the red client's tags:</p>
|
351
|
-
|
352
|
-
<pre><code>red.with_tags { concat %w[a b c]; push 'z'; delete 'c' }
|
353
|
-
</code></pre>
|
354
|
-
|
355
|
-
<p>Focus the next client after the red client:</p>
|
356
|
-
|
357
|
-
<pre><code>red.next.focus
|
358
|
-
curr_client == red.next #=> true
|
359
|
-
</code></pre>
|
360
|
-
|
361
|
-
<p>Notice that by focusing a client, we make it the current client.</p>
|
362
|
-
|
363
|
-
<p>Focus the red client on a different view:</p>
|
364
|
-
|
365
|
-
<pre><code>orig = curr_view
|
366
|
-
v = red.views.last
|
367
|
-
red.focus v
|
368
|
-
</code></pre>
|
369
|
-
|
370
|
-
<p>Return to the original view:</p>
|
371
|
-
|
372
|
-
<pre><code>orig.focus
|
373
|
-
</code></pre>
|
374
|
-
|
375
|
-
<p>Send the red client to the last column:</p>
|
376
|
-
|
377
|
-
<pre><code>red.send curr_view.areas.last
|
378
|
-
</code></pre>
|
379
|
-
|
380
|
-
<p>Close the terminals we launched earlier:</p>
|
381
|
-
|
382
|
-
<pre><code>terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
383
|
-
terms.each {|c| c.kill }
|
384
|
-
</code></pre>
|
385
|
-
|
386
|
-
<h3 id="Traversing-the-file-system">Traversing the file system</h3>
|
387
|
-
|
388
|
-
<p>Show the root node of wmii's IXP file system:</p>
|
389
|
-
|
390
|
-
<pre><code>fs
|
391
|
-
</code></pre>
|
392
|
-
|
393
|
-
<p>Show the names of all files at the root level:</p>
|
394
|
-
|
395
|
-
<pre><code>fs.entries
|
396
|
-
</code></pre>
|
397
|
-
|
398
|
-
<p>Show the parent of the root node:</p>
|
399
|
-
|
400
|
-
<pre><code>fs.parent
|
401
|
-
</code></pre>
|
402
|
-
|
403
|
-
<p>Show the children of the root node:</p>
|
404
|
-
|
405
|
-
<pre><code>fs.children
|
406
|
-
</code></pre>
|
407
|
-
|
408
|
-
<p>Navigate into to the <code>/lbar/</code> directory:</p>
|
409
|
-
|
410
|
-
<pre><code>n1 = fs.lbar
|
411
|
-
n2 = fs['lbar']
|
412
|
-
n1 == n2 #=> true
|
413
|
-
left_bar = n1
|
414
|
-
</code></pre>
|
415
|
-
|
416
|
-
<p>Notice that you can traverse the file system hierarchy by simply calling
|
417
|
-
methods on node objects. Alternatively, you can traverse by specifying an
|
418
|
-
arbitrary sub-path (relative path) using the <code>[]</code> operator on a node.</p>
|
419
|
-
|
420
|
-
<p>Create a new temporary button:</p>
|
421
|
-
|
422
|
-
<pre><code>b = left_bar.rumai_example # path of new button
|
423
|
-
b.exist? #=> false
|
424
|
-
b.create
|
425
|
-
b.exist? #=> true
|
426
|
-
</code></pre>
|
427
|
-
|
428
|
-
<p>You should now see an empty button on the left-hand side of the wmii bar.</p>
|
429
|
-
|
430
|
-
<p>Color the button black-on-white and label it as "hello world":</p>
|
431
|
-
|
432
|
-
<pre><code>content = "#000000 #ffffff #000000 hello world"
|
433
|
-
b.write content
|
434
|
-
b.read == content #=> true
|
435
|
-
</code></pre>
|
436
|
-
|
437
|
-
<p>Remove the temporary button:</p>
|
438
|
-
|
439
|
-
<pre><code>b.remove
|
440
|
-
b.exist? #=> false
|
441
|
-
</code></pre>
|
442
|
-
|
443
|
-
<h2 id="HACKING">HACKING</h2>
|
444
|
-
|
445
|
-
<p>This section is meant for people who want to develop Rumai's source code.</p>
|
446
|
-
|
447
|
-
<h3 id="Prerequisites">Prerequisites</h3>
|
448
|
-
|
449
|
-
<p>Install Ruby libraries necessary for development:</p>
|
450
|
-
|
451
|
-
<pre><code>gem install rumai --development
|
452
|
-
</code></pre>
|
453
|
-
|
454
|
-
<h3 id="Infrastructure">Infrastructure</h3>
|
455
|
-
|
456
|
-
<p><a href="http://snk.tuxfamily.org/lib/inochi/">Inochi</a> serves as the project infrastructure for Rumai. It handles tasks
|
457
|
-
such as building this help manual and API documentation, and packaging,
|
458
|
-
announcing, and publishing new releases. See its help manual and list of
|
459
|
-
tasks to get started:</p>
|
460
|
-
|
461
|
-
<pre><code>inochi --help # display help manual
|
462
|
-
inochi --tasks # list available tasks
|
463
|
-
</code></pre>
|
464
|
-
|
465
|
-
<h3 id="-LOAD_PATH-setup">$LOAD_PATH setup</h3>
|
466
|
-
|
467
|
-
<p>Ensure that the <code>lib/</code> directory is listed in Ruby's <code>$LOAD_PATH</code> before you
|
468
|
-
use any libraries therein or run any executables in the <code>bin/</code> directory.</p>
|
469
|
-
|
470
|
-
<p>This can be achieved by passing an option to Ruby:</p>
|
471
|
-
|
472
|
-
<pre><code>ruby -Ilib bin/rumai
|
473
|
-
irb -Ilib -r rumai
|
474
|
-
</code></pre>
|
475
|
-
|
476
|
-
<p>Or by setting the <code>$RUBYLIB</code> environment variable:</p>
|
477
|
-
|
478
|
-
<pre><code>export RUBYLIB=lib # bash, ksh, zsh
|
479
|
-
setenv RUBYLIB lib # csh
|
480
|
-
set -x RUBYLIB lib # fish
|
481
|
-
|
482
|
-
ruby bin/rumai
|
483
|
-
irb -r rumai
|
484
|
-
</code></pre>
|
485
|
-
|
486
|
-
<p>Or by installing the <a href="http://github.com/chneukirchen/rup">ruby-wrapper</a> tool.</p>
|
487
|
-
|
488
|
-
<h3 id="RubyGems-setup">RubyGems setup</h3>
|
489
|
-
|
490
|
-
<p>If you use Ruby 1.8 or older, then ensure that RubyGems is activated before
|
491
|
-
you use any libraries in the <code>lib/</code> directory or run any executables in the
|
492
|
-
<code>bin/</code> directory.</p>
|
493
|
-
|
494
|
-
<p>This can be achieved by passing an option to Ruby:</p>
|
495
|
-
|
496
|
-
<pre><code>ruby -rubygems bin/rumai
|
497
|
-
irb -rubygems -r rumai
|
498
|
-
</code></pre>
|
499
|
-
|
500
|
-
<p>Or by setting the <code>$RUBYOPT</code> environment variable:</p>
|
501
|
-
|
502
|
-
<pre><code>export RUBYOPT=-rubygems # bash, ksh, zsh
|
503
|
-
setenv RUBYOPT -rubygems # csh
|
504
|
-
set -x RUBYOPT -rubygems # fish
|
505
|
-
</code></pre>
|
506
|
-
|
507
|
-
<h3 id="Running-tests">Running tests</h3>
|
508
|
-
|
509
|
-
<p>Simply execute the included test runner, which sets up Ruby's <code>$LOAD_PATH</code> for
|
510
|
-
testing, loads the included <code>test/test_helper.rb</code> file, and then evaluates all
|
511
|
-
<code>test/**/*_test.rb</code> files:</p>
|
512
|
-
|
513
|
-
<pre><code>test/runner
|
514
|
-
</code></pre>
|
515
|
-
|
516
|
-
<p>Its exit status will indicate whether all tests have passed. It may also
|
517
|
-
print additional pass/fail information depending on the testing library used
|
518
|
-
in the <code>test/test_helper.rb</code> file.</p>
|
519
|
-
|
520
|
-
<h3 id="Contributing">Contributing</h3>
|
521
|
-
|
522
|
-
<p>Fork this project on GitHub (see <strong>Resources</strong> above) and send a pull request.</p>
|
523
|
-
|
524
|
-
<h2 id="VERSIONS">VERSIONS</h2>
|
525
|
-
|
526
|
-
<p>This section contains release notes of current and past releases.</p>
|
527
|
-
|
528
|
-
<h3 id="Version-3-3-0-2010-07-16-">Version 3.3.0 (2010-07-16)</h3>
|
529
|
-
|
530
|
-
<p>This release adds support for growing and nudging clients, adds an
|
531
|
-
abstraction for status bar applets, and beautifies the source code.</p>
|
532
|
-
|
533
|
-
<p>New features:</p>
|
534
|
-
|
535
|
-
<ul>
|
536
|
-
<li><p>Add <code>Rumai::Barlet</code> class for easier status bar applets. It exposes the
|
537
|
-
new, independent <code>colors</code> and <code>label</code> attributes introduced into the bar
|
538
|
-
file format by wmii-hg2743. It is also backwards-compatible with older
|
539
|
-
wmii versions where the aforementioned attributes were conjoined.</p></li>
|
540
|
-
<li><p>Add <code>Rumai::Client#grow</code> and <code>Rumai::Client#nudge</code> methods <a href="http://github.com/sunaku/rumai/issues/6">requested</a> by Nathan Neff. See "The
|
541
|
-
/tag/ Hierarchy" in the wmii manpage for usage information.</p></li>
|
542
|
-
</ul>
|
543
|
-
|
544
|
-
|
545
|
-
<p>Housekeeping:</p>
|
546
|
-
|
547
|
-
<ul>
|
548
|
-
<li><p>Add workaround for <a href="http://code.google.com/p/wmii/issues/detail?id=206">wmii-hg2734 color tuple bug</a> in the test suite.</p></li>
|
549
|
-
<li><p>Found real names for some anonymous contributors.</p></li>
|
550
|
-
<li><p>Clean up the source code formatting and organization.</p></li>
|
551
|
-
</ul>
|
552
|
-
|
553
|
-
|
554
|
-
<h3 id="Version-3-2-4-2010-06-06-">Version 3.2.4 (2010-06-06)</h3>
|
555
|
-
|
556
|
-
<p>This release fixes an IXP transport layer bug under Ruby 1.8.7.</p>
|
557
|
-
|
558
|
-
<p>Bug fixes:</p>
|
559
|
-
|
560
|
-
<ul>
|
561
|
-
<li><p><code>IO#ungetc</code> does not accept a one-character string in Ruby 1.8.7.</p>
|
562
|
-
|
563
|
-
<p>Thanks to Sebastian Chmielewski for reporting <a href="http://github.com/sunaku/rumai/issues/3">this issue</a>.</p></li>
|
564
|
-
</ul>
|
565
|
-
|
566
|
-
|
567
|
-
<h3 id="Version-3-2-3-2010-04-28-">Version 3.2.3 (2010-04-28)</h3>
|
568
|
-
|
569
|
-
<p>This release adds a UNIX manual page and requires wmii 3.9 or newer.</p>
|
570
|
-
|
571
|
-
<p>Bug fixes:</p>
|
572
|
-
|
573
|
-
<ul>
|
574
|
-
<li><p><code>Rumai::Area#unshift</code> needs wmii 3.9 or newer.
|
575
|
-
The help manual has been corrected accordingly.</p>
|
576
|
-
|
577
|
-
<p>Thanks to Mattia Gheda for reporting <a href="http://github.com/sunaku/wmiirc/issues/8">this issue</a>.</p></li>
|
578
|
-
</ul>
|
579
|
-
|
580
|
-
|
581
|
-
<p>Housekeeping:</p>
|
582
|
-
|
583
|
-
<ul>
|
584
|
-
<li><p>Upgrade to Inochi 3.0.0. Run <code>rumai --help</code> to see the UNIX manual page!</p></li>
|
585
|
-
<li><p>Move IRB session creation code from <a class="man-ref" href="rumai.1.html">rumai<span class="s">(1)</span></a> into <code>rumai/irb</code> sub-library.</p></li>
|
586
|
-
</ul>
|
587
|
-
|
588
|
-
|
589
|
-
<h3 id="Version-3-2-2-2010-04-01-">Version 3.2.2 (2010-04-01)</h3>
|
590
|
-
|
591
|
-
<p>This release fixes some warnings that appeared during installation and
|
592
|
-
performs some minor housekeeping.</p>
|
593
|
-
|
594
|
-
<p>Bug fixes:</p>
|
595
|
-
|
596
|
-
<dl>
|
597
|
-
<dt>Warnings of the following form appeared during gem installation:</dt><dd><p></p>
|
598
|
-
|
599
|
-
<pre><code>Unrecognized directive '...' in lib/rumai/inochi.yaml
|
600
|
-
</code></pre>
|
601
|
-
|
602
|
-
<p>Thanks to Mattia Gheda for reporting this.</p></dd>
|
603
|
-
</dl>
|
604
|
-
|
605
|
-
|
606
|
-
<p>Housekeeping:</p>
|
607
|
-
|
608
|
-
<ul>
|
609
|
-
<li>Upgrade to Inochi 2.0.0-rc2 for managing this project.</li>
|
610
|
-
</ul>
|
611
|
-
|
612
|
-
|
613
|
-
<h3 id="Version-3-2-1-2010-03-22-">Version 3.2.1 (2010-03-22)</h3>
|
614
|
-
|
615
|
-
<p>This release improves multi-threading support in Rumai's pure-Ruby
|
616
|
-
implementation of the <a href="http://libs.suckless.org/libixp">IXP file-system interface</a>.</p>
|
617
|
-
|
618
|
-
<p>Thank you:</p>
|
619
|
-
|
620
|
-
<ul>
|
621
|
-
<li>Kenneth De Winter reported the issue of status bar applets not refreshing
|
622
|
-
according to their prescribed schedule (this is particularly noticable
|
623
|
-
in the clock applet) and verified my fix for the problem.</li>
|
624
|
-
</ul>
|
625
|
-
|
626
|
-
|
627
|
-
<p>Bug fixes:</p>
|
628
|
-
|
629
|
-
<ul>
|
630
|
-
<li>Perform a blocking I/O read to recieve a 9P2000 message in
|
631
|
-
<code>Rumai::IXP::Agent#recv</code> only if recieve buffer is empty. This gives
|
632
|
-
other threads a chance to check the recieve buffer for their response.
|
633
|
-
instead of being blocked by us as we greedily hold on to the 9P2000
|
634
|
-
message stream until our expected response arrives.</li>
|
635
|
-
</ul>
|
636
|
-
|
637
|
-
|
638
|
-
<p>Housekeeping:</p>
|
639
|
-
|
640
|
-
<ul>
|
641
|
-
<li>Upgrade to Inochi 2.0.0-rc1 and Dfect 2.0.0.</li>
|
642
|
-
</ul>
|
643
|
-
|
644
|
-
|
645
|
-
<h3 id="Version-3-2-0-2009-11-17-">Version 3.2.0 (2009-11-17)</h3>
|
646
|
-
|
647
|
-
<p>This release adds a new automated view arrangement, simplifies the IXP
|
648
|
-
transport layer, and cleans up the code and API documentation.</p>
|
649
|
-
|
650
|
-
<p>New features:</p>
|
651
|
-
|
652
|
-
<ul>
|
653
|
-
<li><p>Add <code>Rumai::View#arrange_in_stacks</code> automated view arrangement.</p></li>
|
654
|
-
<li><p>Convert <code>:stack</code> and <code>:max</code> arguments into wmii 3.9 syntax in
|
655
|
-
<code>Rumai::Area#layout=</code>.</p></li>
|
656
|
-
</ul>
|
657
|
-
|
658
|
-
|
659
|
-
<p>Bug fixes:</p>
|
660
|
-
|
661
|
-
<ul>
|
662
|
-
<li>Rewrote IXP transport layer (<code>Rumai::IXP::Agent</code>) to <em>not</em> use a
|
663
|
-
background thread, according to <a href="http://www.x.org/releases/X11R7.5/doc/libxcb/tutorial/#requestsreplies">the XCB cookie approach</a>.</li>
|
664
|
-
</ul>
|
665
|
-
|
666
|
-
|
667
|
-
<p>Housekeeping:</p>
|
668
|
-
|
669
|
-
<ul>
|
670
|
-
<li><p>Clean up some code and API docs.</p></li>
|
671
|
-
<li><p>Reduce amount of string concatenation in <code>Struct#to_9p</code>.</p></li>
|
672
|
-
</ul>
|
673
|
-
|
674
|
-
|
675
|
-
<h3 id="Version-3-1-1-2009-11-16-">Version 3.1.1 (2009-11-16)</h3>
|
676
|
-
|
677
|
-
<p>This release fixes bugs in automated view arrangements and updates the user
|
678
|
-
manual.</p>
|
679
|
-
|
680
|
-
<p>Thank you:</p>
|
681
|
-
|
682
|
-
<ul>
|
683
|
-
<li>Nathan Neff reported the client ordering bug in automated view
|
684
|
-
arrangements.</li>
|
685
|
-
</ul>
|
686
|
-
|
687
|
-
|
688
|
-
<p>Bug fixes:</p>
|
689
|
-
|
690
|
-
<ul>
|
691
|
-
<li><p>The relative order of clients was not being preserved during view
|
692
|
-
arrangements.</p></li>
|
693
|
-
<li><p>Focus on the current view was lost after automated view arrangement was
|
694
|
-
applied if the current view was not the first view on which the initially
|
695
|
-
focused (before the automated arrangement was applied) client appeared.</p></li>
|
696
|
-
</ul>
|
697
|
-
|
698
|
-
|
699
|
-
<h3 id="Version-3-1-0-2009-10-02-">Version 3.1.0 (2009-10-02)</h3>
|
700
|
-
|
701
|
-
<p>This release adds new methods, fixes some bugs, and revises the manual.</p>
|
702
|
-
|
703
|
-
<p>New features:</p>
|
704
|
-
|
705
|
-
<ul>
|
706
|
-
<li><p>Add <code>Client#float</code> methods to manipulate floating status.</p></li>
|
707
|
-
<li><p>Add <code>Client#manage</code> methods to manipulate managed status.</p></li>
|
708
|
-
<li><p>The <code>Client#tags=</code> method now accepts '~' and '!' tag prefixes.</p></li>
|
709
|
-
</ul>
|
710
|
-
|
711
|
-
|
712
|
-
<p>Bug fixes:</p>
|
713
|
-
|
714
|
-
<ul>
|
715
|
-
<li><p>There is no <code>View#move_focus</code> method, only <code>View#select</code>.</p></li>
|
716
|
-
<li><p>Assertion failure in test suite because all files in <code>/rbar</code>
|
717
|
-
(inside wmii's IXP filesystem) contain an automatic color header when
|
718
|
-
read.</p></li>
|
719
|
-
</ul>
|
720
|
-
|
721
|
-
|
722
|
-
<p>Housekeeping:</p>
|
723
|
-
|
724
|
-
<ul>
|
725
|
-
<li><p>Use simpler Copyright reminder at the top of every file.</p></li>
|
726
|
-
<li><p>Open source is for fun, so <a href="http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html">be
|
727
|
-
nice</a>:
|
728
|
-
speak of "related works" instead of "competitors".</p></li>
|
729
|
-
</ul>
|
730
|
-
|
731
|
-
|
732
|
-
<h3 id="Version-3-0-0-2009-05-11-">Version 3.0.0 (2009-05-11)</h3>
|
733
|
-
|
734
|
-
<p>This release revises method names, adds new methods, and fixes a bug.</p>
|
735
|
-
|
736
|
-
<p>Incompatible changes:</p>
|
737
|
-
|
738
|
-
<ul>
|
739
|
-
<li><p>Rename <code>#toggle_</code> methods to use <code>!</code> suffix in their names.</p></li>
|
740
|
-
<li><p>Rename <code>#float</code> methods to <code>#floating</code>.</p></li>
|
741
|
-
<li><p>Rename <code>View#floater</code> method to <code>View#floating_area</code>.</p></li>
|
742
|
-
</ul>
|
743
|
-
|
744
|
-
|
745
|
-
<p>New features:</p>
|
746
|
-
|
747
|
-
<ul>
|
748
|
-
<li><p>Add <code>Client#stick</code> methods to manipulate sticky status.</p></li>
|
749
|
-
<li><p>Add <code>Client#fullscreen</code> methods to manipulate fullscreen status.</p></li>
|
750
|
-
<li><p>Add <code>Client#slay</code> method which is a forceful version of <code>#kill</code>.</p></li>
|
751
|
-
<li><p>Add <code>View#select</code> method to move focus relatively inside a view.</p></li>
|
752
|
-
<li><p>Add <code>Area::floating</code> method for symmetry with <code>Area::curr</code>.</p></li>
|
753
|
-
<li><p>Add <code>View#managed_area</code> aliases for <code>View#column</code> methods.</p></li>
|
754
|
-
</ul>
|
755
|
-
|
756
|
-
|
757
|
-
<p>Bug fixes:</p>
|
758
|
-
|
759
|
-
<ul>
|
760
|
-
<li><p>Fix error when unzooming clients from temporary view.</p></li>
|
761
|
-
<li><p>Fix code that launches temporary terminals in the Tutorial.</p>
|
762
|
-
|
763
|
-
<p>Use the <code>/bin/sh</code> version of the <strong>read</strong> command for portability.</p></li>
|
764
|
-
</ul>
|
765
|
-
|
766
|
-
|
767
|
-
<p>Housekeeping:</p>
|
768
|
-
|
769
|
-
<ul>
|
770
|
-
<li><p>Use <code>Client#send</code> instead of <code>#swap</code> in automated arrangements because
|
771
|
-
it causes less traffic on /event/.</p></li>
|
772
|
-
<li><p>Add old release notes from blog to user manual.</p></li>
|
773
|
-
</ul>
|
774
|
-
|
775
|
-
|
776
|
-
<h3 id="Version-2-1-0-2009-05-09-">Version 2.1.0 (2009-05-09)</h3>
|
777
|
-
|
778
|
-
<p>This release improves client arrangement, fixes several bugs, and cleans up
|
779
|
-
the code.</p>
|
780
|
-
|
781
|
-
<p>Thank you:</p>
|
782
|
-
|
783
|
-
<ul>
|
784
|
-
<li>Simon Hafner reported several bugs.</li>
|
785
|
-
<li>Michael Andrus verified bug fixes.</li>
|
786
|
-
</ul>
|
787
|
-
|
788
|
-
|
789
|
-
<p>New features:</p>
|
790
|
-
|
791
|
-
<ul>
|
792
|
-
<li><p>Focus is now restored on the initially focused client after applying
|
793
|
-
automated client arrangements.</p></li>
|
794
|
-
<li><p>The push(), insert(), and unshift() instance methods of the
|
795
|
-
<code>Rumai::Area</code> class now preserve the order of inserted clients.</p></li>
|
796
|
-
<li><p>The <code>Rumai::View#arrange_in_grid()</code> method now accepts 1 as a parameter.
|
797
|
-
This invocation causes every column to contain at most 1 client.</p></li>
|
798
|
-
</ul>
|
799
|
-
|
800
|
-
|
801
|
-
<p>Bug fixes:</p>
|
802
|
-
|
803
|
-
<ul>
|
804
|
-
<li><p>Fix error caused by focusing the top/bottom client in the destination
|
805
|
-
area before sending new clients into that area.</p></li>
|
806
|
-
<li><p>Fix error when importing clients into an empty area.</p></li>
|
807
|
-
</ul>
|
808
|
-
|
809
|
-
|
810
|
-
<p>Housekeeping:</p>
|
811
|
-
|
812
|
-
<ul>
|
813
|
-
<li><p>Use snake_case instead of camelCase for variable names.</p></li>
|
814
|
-
<li><p>Add copyright notice at the top of every file.</p></li>
|
815
|
-
<li><p>Plenty of code formatting and beautification.</p></li>
|
816
|
-
</ul>
|
817
|
-
|
818
|
-
|
819
|
-
<h3 id="Version-2-0-2-2009-02-26-">Version 2.0.2 (2009-02-26)</h3>
|
820
|
-
|
821
|
-
<p>This release fixes a connection bug.</p>
|
822
|
-
|
823
|
-
<p>Thank you:</p>
|
824
|
-
|
825
|
-
<ul>
|
826
|
-
<li>Simon Hafner reported and helped debug the <code>$DISPLAY</code> bug.</li>
|
827
|
-
</ul>
|
828
|
-
|
829
|
-
|
830
|
-
<p>Bug fixes:</p>
|
831
|
-
|
832
|
-
<ul>
|
833
|
-
<li>wmii omits the fractional portion of <code>$DISPLAY</code> in its socket file path.
|
834
|
-
Rumai was trying to connect with the entire <code>$DISPLAY</code> value (including
|
835
|
-
the fractional portion) and thus could not find wmii's socket file.</li>
|
836
|
-
</ul>
|
837
|
-
|
838
|
-
|
839
|
-
<h3 id="Version-2-0-1-2009-01-25-">Version 2.0.1 (2009-01-25)</h3>
|
840
|
-
|
841
|
-
<p>This release simplifies project administrivia using <a href="http://snk.tuxfamily.org/lib/inochi/">Inochi</a>, improves the unit tests, and revises the user
|
842
|
-
manual.</p>
|
843
|
-
|
844
|
-
<p>Bug fixes:</p>
|
845
|
-
|
846
|
-
<ul>
|
847
|
-
<li>The rumai/ixp/message library's unit test failed if
|
848
|
-
<code>/rbar/status</code> did not already exist in wmii.</li>
|
849
|
-
</ul>
|
850
|
-
|
851
|
-
|
852
|
-
<p>Housekeeping:</p>
|
853
|
-
|
854
|
-
<ul>
|
855
|
-
<li><p>Store IXP socket address in <code>Rumai::IXP_SOCK_ADDR</code>.</p></li>
|
856
|
-
<li><p>Added missing test cases for (TR)create and (TR)remove messages in the
|
857
|
-
unit test for the rumai/ixp/message library.</p></li>
|
858
|
-
</ul>
|
859
|
-
|
860
|
-
|
861
|
-
<h3 id="Version-2-0-0-2008-02-04-">Version 2.0.0 (2008-02-04)</h3>
|
862
|
-
|
863
|
-
<p>This release adds support for wmii 3.6, improves the performance of the IXP
|
864
|
-
library, and fixes some bugs.</p>
|
865
|
-
|
866
|
-
<p>Thank you:</p>
|
867
|
-
|
868
|
-
<ul>
|
869
|
-
<li>Christoph Blank tested Rumai 1.0.0 under wmii 3.6 and reported bugs.</li>
|
870
|
-
</ul>
|
871
|
-
|
872
|
-
|
873
|
-
<p>Incompatible changes:</p>
|
874
|
-
|
875
|
-
<ul>
|
876
|
-
<li><p>wmii version 3.6 or newer is now required.</p></li>
|
877
|
-
<li><p>The <code>Rumai::IXP::Agent::FidStream#read_partial</code> method has been replaced
|
878
|
-
by <code>Rumai::IXP::Agent::FidStream#read(true)</code> for efficiency.</p></li>
|
879
|
-
<li><p>The <code>Rumai::IXP::Agent::FidStream#write</code> method no longer writes to
|
880
|
-
the beginning of the stream. Instead, it writes to the current position
|
881
|
-
in the stream.</p></li>
|
882
|
-
<li><p>The <code>Rumai::View#floating_area</code> method has been renamed to
|
883
|
-
<code>Rumai::View#floater</code> for brevity.</p></li>
|
884
|
-
</ul>
|
885
|
-
|
886
|
-
|
887
|
-
<p>New features:</p>
|
888
|
-
|
889
|
-
<ul>
|
890
|
-
<li><p>Added several more methods (such as rewind, pos=, eof?, and so on) from
|
891
|
-
Ruby's IO class to the <code>Rumai::IXP::Agent::FidStream</code> class.</p></li>
|
892
|
-
<li><p>Added the <code>Rumai::Client#kill</code> method to simplify client termination.</p></li>
|
893
|
-
</ul>
|
894
|
-
|
895
|
-
|
896
|
-
<p>Bug fixes:</p>
|
897
|
-
|
898
|
-
<ul>
|
899
|
-
<li>Fixed a race condition in <code>Rumai::Agent#talk</code> which would cause Rumai to
|
900
|
-
hang when multiple threads used it.</li>
|
901
|
-
</ul>
|
902
|
-
|
903
|
-
|
904
|
-
<h3 id="Version-1-0-0-2008-01-26-">Version 1.0.0 (2008-01-26)</h3>
|
905
|
-
|
906
|
-
<p>This is the first release of Rumai, the evolution of
|
907
|
-
<a href="http://article.gmane.org/gmane.comp.window-managers.wmii/1704">wmii-irb</a>,
|
908
|
-
which lets you manipulate the <a href="http://wmii.suckless.org">wmii</a> window manager through <a href="http://ruby-lang.org">Ruby</a>. Enjoy!</p>
|
909
|
-
|
910
|
-
<h2 id="AUTHORS">AUTHORS</h2>
|
911
|
-
|
912
|
-
<p>Suraj N. Kurapati</p>
|
913
|
-
|
914
|
-
<h2 id="CREDITS">CREDITS</h2>
|
915
|
-
|
916
|
-
<p>Christoph Blank,
|
917
|
-
Kenneth De Winter,
|
918
|
-
Mattia Gheda,
|
919
|
-
Michael Andrus,
|
920
|
-
Nathan Neff,
|
921
|
-
Sebastian Chmielewski,
|
922
|
-
Simon Hafner</p>
|
923
|
-
|
924
|
-
<h2 id="LICENSE">LICENSE</h2>
|
925
|
-
|
926
|
-
<p>(the ISC license)</p>
|
927
|
-
|
928
|
-
<p>Copyright 2006 Suraj N. Kurapati <a href="mailto:sunaku@gmail.com" data-bare-link="true">sunaku@gmail.com</a></p>
|
929
|
-
|
930
|
-
<p>Permission to use, copy, modify, and/or distribute this software for any
|
931
|
-
purpose with or without fee is hereby granted, provided that the above
|
932
|
-
copyright notice and this permission notice appear in all copies.</p>
|
933
|
-
|
934
|
-
<p>THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
935
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
936
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
937
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
938
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
939
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
940
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p>
|
941
|
-
|
942
|
-
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
943
|
-
|
944
|
-
<p><span class="man-ref">irb<span class="s">(1)</span></span>,
|
945
|
-
<span class="man-ref">wmiir<span class="s">(1)</span></span>,
|
946
|
-
<span class="man-ref">wmii<span class="s">(1)</span></span></p>
|
947
|
-
|
948
|
-
|
949
|
-
<ol class='man-decor man-foot man foot'>
|
950
|
-
<li class='tl'></li>
|
951
|
-
<li class='tc'>July 2010</li>
|
952
|
-
<li class='tr'>rumai(1)</li>
|
953
|
-
</ol>
|
954
|
-
|
955
|
-
</div>
|
956
|
-
</body>
|
957
|
-
</html>
|