rumai 3.3.0 → 3.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.
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
- - 0
10
- version: 3.3.0
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-07-16 00:00:00 -07:00
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
- - 3
32
- - 0
29
+ - 5
33
30
  - 0
34
- version: 3.0.0
31
+ - 2
32
+ version: 5.0.2
35
33
  - - <
36
34
  - !ruby/object:Gem::Version
37
- hash: 11
38
35
  segments:
39
- - 4
40
- version: "4"
36
+ - 6
37
+ version: "6"
41
38
  type: :development
42
39
  version_requirements: *id001
43
40
  - !ruby/object:Gem::Dependency
44
- name: dfect
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
- - 2
54
- version: "2"
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 is a portmanteau of "Ruby" and "wmii" (which I pronounce as "vim eye").
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.html
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&gt;
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 &amp; 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 &amp;" }
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 &amp;" }
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 &amp;" }
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 &amp;" }
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 #=&gt; 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 #=&gt; 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? #=&gt; false
424
- b.create
425
- b.exist? #=&gt; 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 #=&gt; true
435
- </code></pre>
436
-
437
- <p>Remove the temporary button:</p>
438
-
439
- <pre><code>b.remove
440
- b.exist? #=&gt; 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="&#x6d;&#x61;&#105;&#108;&#116;&#111;&#x3a;&#x73;&#117;&#x6e;&#97;&#x6b;&#x75;&#64;&#x67;&#x6d;&#97;&#x69;&#x6c;&#46;&#99;&#x6f;&#x6d;" data-bare-link="true">&#x73;&#117;&#110;&#x61;&#x6b;&#x75;&#x40;&#x67;&#109;&#97;&#105;&#x6c;&#x2e;&#99;&#111;&#109;</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>