rumai 3.3.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
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>