rumai 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +13 -23
- data/Rakefile +8 -58
- data/bin/rumai +21 -22
- data/doc/api/IO.html +53 -0
- data/doc/api/Integer.html +102 -0
- data/doc/api/Object.html +23 -0
- data/doc/api/Rumai.html +1218 -0
- data/doc/api/Rumai/Area.html +1088 -0
- data/doc/api/Rumai/Chain.html +230 -0
- data/doc/api/Rumai/Client.html +1264 -0
- data/doc/api/Rumai/ClientContainer.html +227 -0
- data/doc/api/Rumai/ExportInstMethods.html +115 -0
- data/doc/api/Rumai/IXP.html +23 -0
- data/doc/api/Rumai/IXP/Agent.html +1222 -0
- data/doc/api/Rumai/IXP/Agent/FidStream.html +602 -0
- data/doc/api/Rumai/IXP/Agent/RangedPool.html +263 -0
- data/doc/api/Rumai/IXP/Error.html +32 -0
- data/doc/api/Rumai/IXP/Fcall.html +398 -0
- data/doc/api/Rumai/IXP/Qid.html +99 -0
- data/doc/api/Rumai/IXP/Rattach.html +71 -0
- data/doc/api/Rumai/IXP/Rauth.html +71 -0
- data/doc/api/Rumai/IXP/Rclunk.html +71 -0
- data/doc/api/Rumai/IXP/Rcreate.html +71 -0
- data/doc/api/Rumai/IXP/Rerror.html +71 -0
- data/doc/api/Rumai/IXP/Rflush.html +71 -0
- data/doc/api/Rumai/IXP/Ropen.html +71 -0
- data/doc/api/Rumai/IXP/Rread.html +71 -0
- data/doc/api/Rumai/IXP/Rremove.html +71 -0
- data/doc/api/Rumai/IXP/Rstat.html +71 -0
- data/doc/api/Rumai/IXP/Rversion.html +71 -0
- data/doc/api/Rumai/IXP/Rwalk.html +71 -0
- data/doc/api/Rumai/IXP/Rwrite.html +71 -0
- data/doc/api/Rumai/IXP/Rwstat.html +71 -0
- data/doc/api/Rumai/IXP/Stat.html +188 -0
- data/doc/api/Rumai/IXP/Stream.html +112 -0
- data/doc/api/Rumai/IXP/Struct.html +348 -0
- data/doc/api/Rumai/IXP/Struct/ClassField.html +177 -0
- data/doc/api/Rumai/IXP/Struct/Field.html +549 -0
- data/doc/api/Rumai/IXP/Struct/Field/CounteeField.html +175 -0
- data/doc/api/Rumai/IXP/Struct/Field/CounterField.html +95 -0
- data/doc/api/Rumai/IXP/Struct/Integer8Field.html +181 -0
- data/doc/api/Rumai/IXP/Struct/StringField.html +128 -0
- data/doc/api/Rumai/IXP/Tattach.html +71 -0
- data/doc/api/Rumai/IXP/Tauth.html +71 -0
- data/doc/api/Rumai/IXP/Tclunk.html +71 -0
- data/doc/api/Rumai/IXP/Tcreate.html +71 -0
- data/doc/api/Rumai/IXP/Terror.html +156 -0
- data/doc/api/Rumai/IXP/Tflush.html +71 -0
- data/doc/api/Rumai/IXP/Topen.html +113 -0
- data/doc/api/Rumai/IXP/Tread.html +71 -0
- data/doc/api/Rumai/IXP/Tremove.html +71 -0
- data/doc/api/Rumai/IXP/Tstat.html +71 -0
- data/doc/api/Rumai/IXP/Tversion.html +83 -0
- data/doc/api/Rumai/IXP/Twalk.html +71 -0
- data/doc/api/Rumai/IXP/Twrite.html +71 -0
- data/doc/api/Rumai/IXP/Twstat.html +71 -0
- data/doc/api/Rumai/Node.html +1139 -0
- data/doc/api/Rumai/View.html +1280 -0
- data/doc/api/Rumai/WidgetImpl.html +196 -0
- data/doc/api/Rumai/WidgetNode.html +184 -0
- data/doc/api/String.html +180 -0
- data/doc/api/StringIO.html +53 -0
- data/doc/api/Time.html +175 -0
- data/doc/api/all-methods.html +1436 -0
- data/doc/api/all-namespaces.html +140 -0
- data/doc/api/app.js +18 -0
- data/doc/api/index.html +16 -22
- data/doc/api/jquery.js +11 -0
- data/doc/api/readme.html +35 -0
- data/doc/api/style.css +68 -0
- data/doc/api/syntax_highlight.css +21 -0
- data/doc/history.erb +17 -0
- data/doc/index.erb +13 -0
- data/doc/index.xhtml +1235 -0
- data/doc/intro.erb +86 -0
- data/doc/setup.erb +55 -0
- data/doc/theory.erb +3 -0
- data/doc/usage.erb +285 -0
- data/lib/rumai.rb +10 -7
- data/lib/rumai/fs.rb +13 -15
- data/lib/rumai/ixp.rb +2 -7
- data/lib/rumai/ixp/message.rb +0 -3
- data/lib/rumai/ixp/transport.rb +1 -4
- data/lib/rumai/wm.rb +6 -6
- data/test/rumai/ixp/message.rb +249 -0
- metadata +104 -263
- data/README +0 -1
- data/doc/api/classes/IO.html +0 -120
- data/doc/api/classes/Integer.html +0 -142
- data/doc/api/classes/Integer.src/M000002.html +0 -18
- data/doc/api/classes/Object.html +0 -113
- data/doc/api/classes/Rumai.html +0 -530
- data/doc/api/classes/Rumai.src/M000007.html +0 -18
- data/doc/api/classes/Rumai.src/M000008.html +0 -18
- data/doc/api/classes/Rumai.src/M000009.html +0 -18
- data/doc/api/classes/Rumai.src/M000010.html +0 -18
- data/doc/api/classes/Rumai.src/M000011.html +0 -18
- data/doc/api/classes/Rumai.src/M000012.html +0 -18
- data/doc/api/classes/Rumai.src/M000013.html +0 -18
- data/doc/api/classes/Rumai.src/M000014.html +0 -20
- data/doc/api/classes/Rumai.src/M000015.html +0 -18
- data/doc/api/classes/Rumai.src/M000016.html +0 -18
- data/doc/api/classes/Rumai.src/M000017.html +0 -18
- data/doc/api/classes/Rumai.src/M000018.html +0 -18
- data/doc/api/classes/Rumai.src/M000019.html +0 -18
- data/doc/api/classes/Rumai.src/M000020.html +0 -18
- data/doc/api/classes/Rumai.src/M000021.html +0 -18
- data/doc/api/classes/Rumai.src/M000022.html +0 -18
- data/doc/api/classes/Rumai.src/M000023.html +0 -18
- data/doc/api/classes/Rumai.src/M000024.html +0 -18
- data/doc/api/classes/Rumai.src/M000025.html +0 -18
- data/doc/api/classes/Rumai.src/M000026.html +0 -18
- data/doc/api/classes/Rumai/Area.html +0 -461
- data/doc/api/classes/Rumai/Area.src/M000079.html +0 -19
- data/doc/api/classes/Rumai/Area.src/M000080.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000081.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000082.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000083.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000084.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000085.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000086.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000087.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000088.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000089.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000090.html +0 -22
- data/doc/api/classes/Rumai/Area.src/M000092.html +0 -23
- data/doc/api/classes/Rumai/Area.src/M000093.html +0 -28
- data/doc/api/classes/Rumai/Area.src/M000094.html +0 -18
- data/doc/api/classes/Rumai/Area.src/M000095.html +0 -31
- data/doc/api/classes/Rumai/Chain.html +0 -179
- data/doc/api/classes/Rumai/Chain.src/M000076.html +0 -18
- data/doc/api/classes/Rumai/Chain.src/M000077.html +0 -18
- data/doc/api/classes/Rumai/Chain.src/M000078.html +0 -18
- data/doc/api/classes/Rumai/Client.html +0 -481
- data/doc/api/classes/Rumai/Client.src/M000113.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000114.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000115.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000116.html +0 -39
- data/doc/api/classes/Rumai/Client.src/M000117.html +0 -19
- data/doc/api/classes/Rumai/Client.src/M000118.html +0 -19
- data/doc/api/classes/Rumai/Client.src/M000119.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000120.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000121.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000122.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000123.html +0 -19
- data/doc/api/classes/Rumai/Client.src/M000124.html +0 -20
- data/doc/api/classes/Rumai/Client.src/M000125.html +0 -20
- data/doc/api/classes/Rumai/Client.src/M000126.html +0 -22
- data/doc/api/classes/Rumai/Client.src/M000127.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000128.html +0 -20
- data/doc/api/classes/Rumai/Client.src/M000129.html +0 -18
- data/doc/api/classes/Rumai/Client.src/M000130.html +0 -22
- data/doc/api/classes/Rumai/ClientContainer.html +0 -180
- data/doc/api/classes/Rumai/ClientContainer.src/M000027.html +0 -18
- data/doc/api/classes/Rumai/ClientContainer.src/M000028.html +0 -18
- data/doc/api/classes/Rumai/ClientContainer.src/M000029.html +0 -18
- data/doc/api/classes/Rumai/ExportInstMethods.html +0 -119
- data/doc/api/classes/Rumai/IXP.html +0 -149
- data/doc/api/classes/Rumai/IXP/Agent.html +0 -447
- data/doc/api/classes/Rumai/IXP/Agent.src/M000044.html +0 -53
- data/doc/api/classes/Rumai/IXP/Agent.src/M000045.html +0 -36
- data/doc/api/classes/Rumai/IXP/Agent.src/M000046.html +0 -39
- data/doc/api/classes/Rumai/IXP/Agent.src/M000047.html +0 -20
- data/doc/api/classes/Rumai/IXP/Agent.src/M000048.html +0 -22
- data/doc/api/classes/Rumai/IXP/Agent.src/M000049.html +0 -20
- data/doc/api/classes/Rumai/IXP/Agent.src/M000050.html +0 -33
- data/doc/api/classes/Rumai/IXP/Agent.src/M000051.html +0 -19
- data/doc/api/classes/Rumai/IXP/Agent.src/M000052.html +0 -18
- data/doc/api/classes/Rumai/IXP/Agent.src/M000053.html +0 -21
- data/doc/api/classes/Rumai/IXP/Agent.src/M000054.html +0 -20
- data/doc/api/classes/Rumai/IXP/Agent.src/M000055.html +0 -20
- data/doc/api/classes/Rumai/IXP/Agent.src/M000056.html +0 -22
- data/doc/api/classes/Rumai/IXP/Agent.src/M000057.html +0 -23
- data/doc/api/classes/Rumai/IXP/Agent.src/M000058.html +0 -19
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.html +0 -312
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000060.html +0 -23
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000061.html +0 -19
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000062.html +0 -22
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000063.html +0 -18
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000064.html +0 -45
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000065.html +0 -36
- data/doc/api/classes/Rumai/IXP/Agent/MODES.html +0 -130
- data/doc/api/classes/Rumai/IXP/Agent/MODES.src/M000059.html +0 -22
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.html +0 -203
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000067.html +0 -22
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000068.html +0 -36
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000069.html +0 -18
- data/doc/api/classes/Rumai/IXP/Error.html +0 -117
- data/doc/api/classes/Rumai/IXP/Fcall.html +0 -261
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000070.html +0 -20
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000071.html +0 -25
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000072.html +0 -18
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000073.html +0 -18
- data/doc/api/classes/Rumai/IXP/Qid.html +0 -184
- data/doc/api/classes/Rumai/IXP/Rattach.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rauth.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rclunk.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rcreate.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rerror.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rflush.html +0 -119
- data/doc/api/classes/Rumai/IXP/Ropen.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rread.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rremove.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rstat.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rversion.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rwalk.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rwrite.html +0 -119
- data/doc/api/classes/Rumai/IXP/Rwstat.html +0 -119
- data/doc/api/classes/Rumai/IXP/Stat.html +0 -248
- data/doc/api/classes/Rumai/IXP/Stat.src/M000075.html +0 -18
- data/doc/api/classes/Rumai/IXP/Stream.html +0 -158
- data/doc/api/classes/Rumai/IXP/Stream.src/M000043.html +0 -18
- data/doc/api/classes/Rumai/IXP/Struct.html +0 -221
- data/doc/api/classes/Rumai/IXP/Struct.src/M000030.html +0 -19
- data/doc/api/classes/Rumai/IXP/Struct.src/M000031.html +0 -18
- data/doc/api/classes/Rumai/IXP/Struct.src/M000032.html +0 -20
- data/doc/api/classes/Rumai/IXP/Struct.src/M000033.html +0 -57
- data/doc/api/classes/Rumai/IXP/Struct/Field.html +0 -296
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000034.html +0 -21
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000035.html +0 -21
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000036.html +0 -20
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000037.html +0 -29
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000038.html +0 -18
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000039.html +0 -18
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.html +0 -152
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/M000041.html +0 -24
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/M000042.html +0 -25
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounterField.html +0 -137
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounterField.src/M000040.html +0 -18
- data/doc/api/classes/Rumai/IXP/Tattach.html +0 -120
- data/doc/api/classes/Rumai/IXP/Tauth.html +0 -119
- data/doc/api/classes/Rumai/IXP/Tclunk.html +0 -119
- data/doc/api/classes/Rumai/IXP/Tcreate.html +0 -120
- data/doc/api/classes/Rumai/IXP/Terror.html +0 -145
- data/doc/api/classes/Rumai/IXP/Terror.src/M000074.html +0 -18
- data/doc/api/classes/Rumai/IXP/Tflush.html +0 -119
- data/doc/api/classes/Rumai/IXP/Topen.html +0 -193
- data/doc/api/classes/Rumai/IXP/Tread.html +0 -119
- data/doc/api/classes/Rumai/IXP/Tremove.html +0 -119
- data/doc/api/classes/Rumai/IXP/Tstat.html +0 -119
- data/doc/api/classes/Rumai/IXP/Tversion.html +0 -137
- data/doc/api/classes/Rumai/IXP/Twalk.html +0 -120
- data/doc/api/classes/Rumai/IXP/Twrite.html +0 -120
- data/doc/api/classes/Rumai/IXP/Twstat.html +0 -119
- data/doc/api/classes/Rumai/Node.html +0 -461
- data/doc/api/classes/Rumai/Node.src/M000096.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000097.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000098.html +0 -22
- data/doc/api/classes/Rumai/Node.src/M000099.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000100.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000101.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000102.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000103.html +0 -22
- data/doc/api/classes/Rumai/Node.src/M000104.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000105.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000106.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000107.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000108.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000109.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000110.html +0 -18
- data/doc/api/classes/Rumai/Node.src/M000111.html +0 -20
- data/doc/api/classes/Rumai/Node.src/M000112.html +0 -27
- data/doc/api/classes/Rumai/View.html +0 -436
- data/doc/api/classes/Rumai/View.src/M000131.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000132.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000133.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000134.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000135.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000136.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000137.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000138.html +0 -28
- data/doc/api/classes/Rumai/View.src/M000139.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000140.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000141.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000142.html +0 -18
- data/doc/api/classes/Rumai/View.src/M000143.html +0 -29
- data/doc/api/classes/Rumai/View.src/M000144.html +0 -20
- data/doc/api/classes/Rumai/View.src/M000145.html +0 -33
- data/doc/api/classes/Rumai/View.src/M000146.html +0 -50
- data/doc/api/classes/String.html +0 -169
- data/doc/api/classes/String.src/M000005.html +0 -18
- data/doc/api/classes/String.src/M000006.html +0 -18
- data/doc/api/classes/StringIO.html +0 -120
- data/doc/api/classes/Time.html +0 -163
- data/doc/api/classes/Time.src/M000003.html +0 -18
- data/doc/api/classes/Time.src/M000004.html +0 -18
- data/doc/api/created.rid +0 -1
- data/doc/api/files/lib/rumai/fs_rb.html +0 -115
- data/doc/api/files/lib/rumai/ixp/message_rb.html +0 -120
- data/doc/api/files/lib/rumai/ixp/message_spec_rb.html +0 -175
- data/doc/api/files/lib/rumai/ixp/message_spec_rb.src/M000001.html +0 -37
- data/doc/api/files/lib/rumai/ixp/transport_rb.html +0 -115
- data/doc/api/files/lib/rumai/ixp_rb.html +0 -116
- data/doc/api/files/lib/rumai/nfo_rb.html +0 -107
- data/doc/api/files/lib/rumai/wm_rb.html +0 -115
- data/doc/api/files/lib/rumai_rb.html +0 -115
- data/doc/api/fr_class_index.html +0 -82
- data/doc/api/fr_file_index.html +0 -34
- data/doc/api/fr_method_index.html +0 -172
- data/doc/api/rdoc-style.css +0 -208
- data/doc/guide.erb +0 -390
- data/doc/guide.html +0 -2043
- data/lib/rumai/ixp/message_spec.rb +0 -247
- data/lib/rumai/nfo.rb +0 -24
data/doc/guide.erb
DELETED
@@ -1,390 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
require 'lib/rumai/nfo'
|
3
|
-
|
4
|
-
# local variables for this document
|
5
|
-
download_url = 'http://rubyforge.org/frs/?group_id=5005'
|
6
|
-
source_repo_url = File.join(Rumai::NFO[:website], 'src')
|
7
|
-
feed_url = File.join(Rumai::NFO[:website], 'news.xml')
|
8
|
-
|
9
|
-
ruby_url = 'http://ruby-lang.org'
|
10
|
-
wmii_url = 'http://www.suckless.org/wiki/wmii'
|
11
|
-
wmii_ixp_url = 'http://www.suckless.org/wiki/libs/libixp'
|
12
|
-
p9p_url = 'http://cm.bell-labs.com/magic/man2html/5/intro'
|
13
|
-
|
14
|
-
# parameters for the HTML format
|
15
|
-
$title = "#{Rumai::NFO} user guide"
|
16
|
-
$authors = { 'Suraj N. Kurapati' => 'http://snk.tuxfamily.org' }
|
17
|
-
$feeds = { feed_url => :rss }
|
18
|
-
|
19
|
-
# parameters for Gerbil
|
20
|
-
$unindent = ' '
|
21
|
-
%>
|
22
|
-
|
23
|
-
<% chapter "Introduction" do %>
|
24
|
-
Rumai is a library for manipulating the "wmii":<%= wmii_url %> window manager through "Ruby":<%= ruby_url %>. It excels at *dynamic arrangement* of clients, columns, views, and tags.
|
25
|
-
|
26
|
-
Rumai also provides (1) an <%= xref 'shell', 'interactive shell' %> for live entertainment, and (2) a *pure Ruby client* for the "9P2000 protocol":<%= p9p_url %>, which it uses to communicate with wmii's "IXP file-system interface":<%= wmii_ixp_url %>.
|
27
|
-
|
28
|
-
Rumai is *open-source software* (see <%= xref "License" %>) so feel free to contribute your improvements to and discuss your ideas with the author. You can obtain the source code from the project "Darcs":http://darcs.net repository by running the following command:
|
29
|
-
|
30
|
-
darcs get <%= source_repo_url %> rumai
|
31
|
-
|
32
|
-
<% section "Resources" do %>
|
33
|
-
* "News feed":<%= feed_url %>
|
34
|
-
- project news and release announcements.
|
35
|
-
* "Download area":<%= download_url %>
|
36
|
-
- place to obtain release packages.
|
37
|
-
* "API reference":api/index.html
|
38
|
-
- documentation for all provided Ruby code.
|
39
|
-
* Support / feedback
|
40
|
-
- send an e-mail to the author (see address in <%= xref "License" %>).
|
41
|
-
<% end %>
|
42
|
-
|
43
|
-
<% section "License" do %>
|
44
|
-
<%=h File.read('LICENSE') %>
|
45
|
-
<% end %>
|
46
|
-
<% end %>
|
47
|
-
|
48
|
-
<% chapter "Setup" do %>
|
49
|
-
<% section "Requirements" do %>
|
50
|
-
Your system needs the following software to run Rumai.
|
51
|
-
|
52
|
-
|_. Software |_. Notes |
|
53
|
-
| "Ruby":<%= ruby_url %> | Version 1.8.x is required. |
|
54
|
-
| "wmii":<%= wmii_url %> | Version 3.6 or newer is required. |
|
55
|
-
<% end %>
|
56
|
-
|
57
|
-
<% section "Installation" do %>
|
58
|
-
If your system has "RubyGems":http://rubygems.org/, then you can install Rumai by running the following commands:
|
59
|
-
|
60
|
-
gem install rumai
|
61
|
-
rumai -v
|
62
|
-
|
63
|
-
Otherwise, follow these instructions:
|
64
|
-
# Download the newest release package from "the download area":<%= download_url %>.
|
65
|
-
# Extract the release package anywhere you want on your system.
|
66
|
-
# Go inside the extracted directory and run the following command:
|
67
|
-
|
68
|
-
ruby bin/rumai -v
|
69
|
-
|
70
|
-
If the installation was successful, then you will see output like this: <pre><%=h `ruby bin/rumai -v` %></pre>
|
71
|
-
|
72
|
-
Otherwise, you can e-mail the author (see address in <%= xref "License" %>) for help.
|
73
|
-
<% end %>
|
74
|
-
|
75
|
-
<% section "Manifest" do %>
|
76
|
-
Now that Rumai is installed on your system, let us examine its installation directory.
|
77
|
-
* If you installed Rumai manually, then you already know the location of its installation directory.
|
78
|
-
* If you installed Rumai using RubyGems, then run <pre>rumai -v</pre> and select the right-most item in the output--that is the path of Rumai's installation directory.
|
79
|
-
|
80
|
-
Inside Rumai's installation directory, you will see (among other things) the following items:
|
81
|
-
* <tt>bin/</tt> - contains executable programs.
|
82
|
-
** <tt>rumai</tt> - the interactive shell.
|
83
|
-
* <tt>lib/</tt>
|
84
|
-
** <tt>rumai.rb</tt> - the main Rumai library.
|
85
|
-
** <tt>rumai/</tt>
|
86
|
-
*** <tt>ixp.rb</tt> - the pure Ruby client for the "9P2000 protocol":<%= p9p_url %>.
|
87
|
-
* <tt>doc/</tt> - contains the user guide and other documentation.
|
88
|
-
** <tt>guide.erb</tt> - the source file of this user guide.
|
89
|
-
** <tt>api/</tt> - contains API reference documentation.
|
90
|
-
* <tt>LICENSE</tt> - the project license and copyright notice.
|
91
|
-
<% end %>
|
92
|
-
|
93
|
-
<% section 'Version numbering system' do %>
|
94
|
-
Rumai uses the "RubyGems rational versioning policy":http://www.rubygems.org/read/chapter/7 to number its releases. This *major.minor.patch* numbering policy "is summarized":http://ablog.apress.com/?p=738 as follows.
|
95
|
-
|
96
|
-
| Version number components: |_. Major |_. Minor |_. Patch |
|
97
|
-
|_. Backwards compatible? | no | yes | yes |
|
98
|
-
|_. New features? | yes | yes | no |
|
99
|
-
|_. Bug fixes? | yes | yes | yes |
|
100
|
-
<% end %>
|
101
|
-
<% end %>
|
102
|
-
|
103
|
-
<% chapter "Usage" do %>
|
104
|
-
<% section "Concepts" do %>
|
105
|
-
If you wish to wield the power of Rumai more effectively, you should understand the following basic concepts:
|
106
|
-
* A *client* is any graphical program that is running in your X session. In other words, any *window* in your wmii session is a *client*.
|
107
|
-
* A *tag* is an arbitrary string (a label) that can be associated with one or more clients.
|
108
|
-
* A *view* is a graphical representation of a *tag*. It shows all clients associated with a particular tag.
|
109
|
-
* An *area* is a region inside a *view*. It contains clients.
|
110
|
-
** A *managed area* or *column* is a region where clients cannot overlap each other.
|
111
|
-
** The *floating area* is an area whose clients (1) can overlap each other and (2) _float above_ the managed areas.
|
112
|
-
<% end %>
|
113
|
-
|
114
|
-
<% section "Interactive shell", 'shell' do %>
|
115
|
-
Run the following command to start Rumai's interactive shell (IRB):
|
116
|
-
|
117
|
-
rumai
|
118
|
-
|
119
|
-
You should now see a command prompt like this:
|
120
|
-
|
121
|
-
irb(Rumai):001:0>
|
122
|
-
|
123
|
-
The "irb(*Rumai*)" token in the prompt indicates that commands will be evaluated _inside_ the @Rumai@ module. As a result, you can omit the "Rumai" prefix from your commands if you wish.
|
124
|
-
|
125
|
-
For example, to get the current client object, you can type @curr_client@ instead of having to type @Rumai.curr_client@ at the prompt. However, note that both commands both achieve the same effect and are thereby equivalent.
|
126
|
-
|
127
|
-
The next thing to note is that *tab completion* is enabled by default. Consequently, you can type part of a command and press the TAB key to see a list of possible completions.
|
128
|
-
|
129
|
-
Finally, the interactive shell is a standard IRB session. As a result your <tt>~/.irbrc</tt> file is read and processed by default. Furthermore, you can pass the standard IRB command-line options to the *rumai* command.
|
130
|
-
|
131
|
-
<% section "Live demonstration" do %>
|
132
|
-
Now that you have a command prompt, let us walk through a quick demonstration that highlights the main features of Rumai. You can follow along by copying & pasting the presented commands into the interactive shell.
|
133
|
-
|
134
|
-
<%
|
135
|
-
open_terms = %q{
|
136
|
-
Launch a few terminals so that we have something to work with:
|
137
|
-
<code>
|
138
|
-
colors = %w[ red green blue black orange brown gray navy gold ]
|
139
|
-
colors.each {|c| system "xterm -bg #{c} -title #{c} -e read &" }
|
140
|
-
</code>
|
141
|
-
}.gsub(/^\s+/, '')
|
142
|
-
|
143
|
-
close_terms = %q{
|
144
|
-
Close the terminals we launched earlier:
|
145
|
-
<code>
|
146
|
-
terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
147
|
-
terms.each {|c| c.kill }
|
148
|
-
</code>
|
149
|
-
}.gsub(/^\s+/, '')
|
150
|
-
%>
|
151
|
-
|
152
|
-
<% section "Automated client arrangement" do %>
|
153
|
-
<%= open_terms %>
|
154
|
-
|
155
|
-
Arrange all clients in a grid:
|
156
|
-
<code>
|
157
|
-
curr_view.arrange_in_grid
|
158
|
-
</code>
|
159
|
-
|
160
|
-
Arrange all clients in a diamond shape:
|
161
|
-
<code>
|
162
|
-
curr_view.arrange_in_diamond
|
163
|
-
</code>
|
164
|
-
|
165
|
-
Arrange all clients like LarsWM does:
|
166
|
-
<code>
|
167
|
-
curr_view.arrange_as_larswm
|
168
|
-
</code>
|
169
|
-
|
170
|
-
<%= close_terms %>
|
171
|
-
<% end %>
|
172
|
-
|
173
|
-
<% section "Multiple client grouping" do %>
|
174
|
-
<%= open_terms %>
|
175
|
-
|
176
|
-
Add the red, green, and blue terminals into the "grouping":
|
177
|
-
<code>
|
178
|
-
terms = curr_view.clients.select {|c| %w[red green blue].include? c.label.read }
|
179
|
-
terms.each {|c| c.group }
|
180
|
-
</code>
|
181
|
-
|
182
|
-
You should now see a new button labelled as "<notextile>@</notextile>" on the left-hand side of wmii's bar, indicating that there is now a new view labelled "<notextile>@</notextile>" in wmii. Let us inspect what clients this mysterious view contains:
|
183
|
-
<code>
|
184
|
-
v = View.new "@"
|
185
|
-
puts v.clients.map {|c| c.label.read }
|
186
|
-
</code>
|
187
|
-
|
188
|
-
Aha! The mysterious view contains the red, green, and blue clients we recently "grouped". Thus, by adding a client to the "grouping", we are simply tagging the client with the "@" token.
|
189
|
-
|
190
|
-
Now that we have put some clients into the "grouping", let us move all clients in the grouping to the floating area in the current view:
|
191
|
-
<code>
|
192
|
-
grouping.each {|c| c.send "toggle" }
|
193
|
-
</code>
|
194
|
-
|
195
|
-
Neat! Let us bring them back into the managed area:
|
196
|
-
<code>
|
197
|
-
grouping.each {|c| c.send "toggle" }
|
198
|
-
</code>
|
199
|
-
|
200
|
-
<%= close_terms %>
|
201
|
-
|
202
|
-
In summary, you can select multiple clients (by adding them to the "grouping") and perform operations on them. This is useful when you want to do something with a group of clients but do not want to manually focus one, perform the action, focus the next one, and so on.
|
203
|
-
|
204
|
-
Another important aspect is that selected clients stay selected until they are unselected. This allows you to continue performing tasks on the selection without having to reselect the same clients after every operation.
|
205
|
-
<% end %>
|
206
|
-
|
207
|
-
<% section "Easy column manipulation" do %>
|
208
|
-
<%= open_terms %>
|
209
|
-
|
210
|
-
You can insert a group of clients to the top, bottom, or after the currently focused client of _any_ column using Array-like methods.
|
211
|
-
|
212
|
-
Give each client its own column (one client per column):
|
213
|
-
<code>
|
214
|
-
curr_view.each_column {|c| c.length = 1 }
|
215
|
-
</code>
|
216
|
-
|
217
|
-
Put (at most) three clients in every column:
|
218
|
-
<code>
|
219
|
-
curr_view.each_column {|c| c.length = 3 }
|
220
|
-
</code>
|
221
|
-
|
222
|
-
Move the red, green, and blue clients into the floating area:
|
223
|
-
<code>
|
224
|
-
terms = curr_view.clients.select {|c| %w[red green blue].include? c.label.read }
|
225
|
-
curr_view.areas[0].push terms
|
226
|
-
</code>
|
227
|
-
|
228
|
-
Slurp all floating clients into the last column:
|
229
|
-
<code>
|
230
|
-
list = curr_view.areas
|
231
|
-
a, b = list.first, list.last
|
232
|
-
b.concat a
|
233
|
-
</code>
|
234
|
-
|
235
|
-
Set the last column's layout to stacking mode:
|
236
|
-
<code>
|
237
|
-
b.layout = 'stack'
|
238
|
-
</code>
|
239
|
-
|
240
|
-
Move the red, green, and blue clients to the top of the second column:
|
241
|
-
<code>
|
242
|
-
curr_view.areas[2].unshift terms
|
243
|
-
</code>
|
244
|
-
|
245
|
-
Move the red, green, and blue clients to the bottom of the third column:
|
246
|
-
<code>
|
247
|
-
curr_view.areas[3].push terms
|
248
|
-
</code>
|
249
|
-
|
250
|
-
<%= close_terms %>
|
251
|
-
<% end %>
|
252
|
-
|
253
|
-
<% section "Easy client manipulation" do %>
|
254
|
-
<%= open_terms %>
|
255
|
-
|
256
|
-
Obtain a reference to the red client:
|
257
|
-
<code>
|
258
|
-
red = curr_view.clients.find {|c| c.label.read == "red" }
|
259
|
-
</code>
|
260
|
-
|
261
|
-
Show the red client's current tags:
|
262
|
-
<code>
|
263
|
-
red.tags
|
264
|
-
</code>
|
265
|
-
|
266
|
-
Add the "foo" and "bar" tags to the red client:
|
267
|
-
<code>
|
268
|
-
red.tag "foo", "bar"
|
269
|
-
</code>
|
270
|
-
|
271
|
-
Remove the "bar" tag from the red client:
|
272
|
-
<code>
|
273
|
-
red.untag "bar"
|
274
|
-
</code>
|
275
|
-
|
276
|
-
Do complex operations on the red client's tags:
|
277
|
-
<code>
|
278
|
-
red.with_tags { concat %w[a b c]; push 'z'; delete 'c' }
|
279
|
-
</code>
|
280
|
-
|
281
|
-
Focus the next client after the red client:
|
282
|
-
<code>
|
283
|
-
red.next.focus ; curr_client == red.next #=> true
|
284
|
-
</code>
|
285
|
-
|
286
|
-
Notice that by focusing a client, we make it the current client.
|
287
|
-
|
288
|
-
Focus the red client on a different view:
|
289
|
-
<code>
|
290
|
-
orig = curr_view
|
291
|
-
v = red.views.last
|
292
|
-
red.focus v
|
293
|
-
</code>
|
294
|
-
|
295
|
-
Return to the original view:
|
296
|
-
<code>
|
297
|
-
orig.focus
|
298
|
-
</code>
|
299
|
-
|
300
|
-
Send the red client to the last column:
|
301
|
-
<code>
|
302
|
-
red.send curr_view.areas.last
|
303
|
-
</code>
|
304
|
-
|
305
|
-
<%= close_terms %>
|
306
|
-
<% end %>
|
307
|
-
|
308
|
-
<% section "Traversing the file system" do %>
|
309
|
-
Show the root node of wmii's IXP file system:
|
310
|
-
<code>
|
311
|
-
fs
|
312
|
-
</code>
|
313
|
-
|
314
|
-
Show the names of all files at the root level:
|
315
|
-
<code>
|
316
|
-
fs.entries
|
317
|
-
</code>
|
318
|
-
|
319
|
-
Show the parent of the root node:
|
320
|
-
<code>
|
321
|
-
fs.parent
|
322
|
-
</code>
|
323
|
-
|
324
|
-
Show the children of the root node:
|
325
|
-
<code>
|
326
|
-
fs.children
|
327
|
-
</code>
|
328
|
-
|
329
|
-
Navigate into to the <tt>/lbar/</tt> directory:
|
330
|
-
<code>
|
331
|
-
n1 = fs.lbar
|
332
|
-
n2 = fs['lbar']
|
333
|
-
n1 == n2 #=> true
|
334
|
-
left_bar = n1
|
335
|
-
</code>
|
336
|
-
|
337
|
-
Notice that you can traverse the file system hierarchy by simply calling methods on node objects. Alternatively, you can traverse by specifying an arbitrary sub-path (relative path) using the @[]@ operator on a node.
|
338
|
-
|
339
|
-
Create a new temporary button:
|
340
|
-
<code>
|
341
|
-
b = left_bar.rumai_example # path of new button
|
342
|
-
b.exist? #=> false
|
343
|
-
b.create
|
344
|
-
b.exist? #=> true
|
345
|
-
</code>
|
346
|
-
|
347
|
-
You should now see an empty button on the left-hand side of the wmii bar.
|
348
|
-
|
349
|
-
Color the button black-on-white and label it as "hello world":
|
350
|
-
<code>
|
351
|
-
content = "#000000 #ffffff #000000 hello world"
|
352
|
-
b.write content
|
353
|
-
b.read == content #=> true
|
354
|
-
</code>
|
355
|
-
|
356
|
-
Remove the temporary button:
|
357
|
-
<code>
|
358
|
-
b.remove
|
359
|
-
b.exist? #=> false
|
360
|
-
</code>
|
361
|
-
<% end %>
|
362
|
-
<% end %>
|
363
|
-
|
364
|
-
<% section "Available commands" do %>
|
365
|
-
The following table lists all methods provided by the @Rumai@ module and its subordinates. See the "API documentation":api/index.html for more extensive documentation.
|
366
|
-
|
367
|
-
|_. Method declaration |_. Description |
|
368
|
-
<%
|
369
|
-
# load library for parsing method documentation
|
370
|
-
require 'gerbil/rdoc'
|
371
|
-
|
372
|
-
Dir['lib/rumai/*.rb'].each do |f|
|
373
|
-
RDoc::TopLevel.parse_file f
|
374
|
-
end
|
375
|
-
|
376
|
-
RDoc::TopLevel.all_methods.sort_by {|m| m.full_name }.each do |m|
|
377
|
-
%>
|
378
|
-
| <code><%= m.decl %></code> | <noformat><%= m.comment_html %></noformat> |
|
379
|
-
<% end %>
|
380
|
-
<% end %>
|
381
|
-
<% end %>
|
382
|
-
|
383
|
-
<% section "Scripting your wmiirc", 'wmiirc' do %>
|
384
|
-
One important application of Rumai is the support of Ruby-based <tt>wmiirc</tt> configuration files. For a solid example of such application, take a look at my personal <tt>wmiirc</tt> which uses Rumai extensively:
|
385
|
-
|
386
|
-
darcs get http://snk.tuxfamily.org/src/wmiirc
|
387
|
-
|
388
|
-
Alternatively, you can "browse the contents of the above repository":http://snk.tuxfamily.org/src/wmiirc in your web browser.
|
389
|
-
<% end %>
|
390
|
-
<% end %>
|
data/doc/guide.html
DELETED
@@ -1,2043 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
|
5
|
-
<meta name="date" content="04 February 2008"/>
|
6
|
-
<meta name="author" content="Suraj N. Kurapati"/>
|
7
|
-
<meta name="generator" content="Gerbil 2.0.0"/>
|
8
|
-
<link rel="alternate" type="application/rss+xml" href="http://rumai.rubyforge.org/news.xml"/>
|
9
|
-
<title>Rumai 2.0.0 user guide</title>
|
10
|
-
|
11
|
-
<style type="text/css" media="screen">
|
12
|
-
body
|
13
|
-
{
|
14
|
-
color : #000000;
|
15
|
-
background-color : #FFFFFF;
|
16
|
-
line-height : 1.5em;
|
17
|
-
font-family : Calibri, Verdana, sans-serif;
|
18
|
-
}
|
19
|
-
|
20
|
-
/* emphasis */
|
21
|
-
|
22
|
-
em,
|
23
|
-
blockquote
|
24
|
-
{
|
25
|
-
font-family : Cambria, Georgia, serif;
|
26
|
-
}
|
27
|
-
|
28
|
-
/* headings */
|
29
|
-
|
30
|
-
h1,
|
31
|
-
h2,
|
32
|
-
h3,
|
33
|
-
h4,
|
34
|
-
h5,
|
35
|
-
h6,
|
36
|
-
.title
|
37
|
-
{
|
38
|
-
font-weight : lighter;
|
39
|
-
font-family : Constantia, "Book Antiqua", "URW Bookman L", serif;
|
40
|
-
}
|
41
|
-
|
42
|
-
#lof h1,
|
43
|
-
#lof h2,
|
44
|
-
#lof h3,
|
45
|
-
#lof h4,
|
46
|
-
#lof h5,
|
47
|
-
#lof h6
|
48
|
-
{
|
49
|
-
margin-top : 1.25em;
|
50
|
-
}
|
51
|
-
|
52
|
-
#content h1,
|
53
|
-
#content h2,
|
54
|
-
#content h3,
|
55
|
-
#content h4,
|
56
|
-
#content h5,
|
57
|
-
#content h6
|
58
|
-
{
|
59
|
-
margin-top : 2.5em;
|
60
|
-
line-height : 1.25em;
|
61
|
-
}
|
62
|
-
|
63
|
-
#content h1
|
64
|
-
{
|
65
|
-
font-size : 2.0em;
|
66
|
-
}
|
67
|
-
|
68
|
-
#content h2
|
69
|
-
{
|
70
|
-
font-size : 1.8em;
|
71
|
-
}
|
72
|
-
|
73
|
-
#content h3
|
74
|
-
{
|
75
|
-
font-size : 1.6em;
|
76
|
-
}
|
77
|
-
|
78
|
-
#content h4
|
79
|
-
{
|
80
|
-
font-size : 1.4em;
|
81
|
-
}
|
82
|
-
|
83
|
-
#content h5
|
84
|
-
{
|
85
|
-
font-size : 1.2em;
|
86
|
-
}
|
87
|
-
|
88
|
-
#content h6
|
89
|
-
{
|
90
|
-
font-size : 1.0em;
|
91
|
-
}
|
92
|
-
|
93
|
-
/* tables */
|
94
|
-
|
95
|
-
table
|
96
|
-
{
|
97
|
-
border : none;
|
98
|
-
margin : auto; /* center horizontally */
|
99
|
-
margin-top : 1em;
|
100
|
-
}
|
101
|
-
|
102
|
-
th,
|
103
|
-
td
|
104
|
-
{
|
105
|
-
padding : 1em;
|
106
|
-
border : 1px solid #C0C0C0;
|
107
|
-
vertical-align : top;
|
108
|
-
background-color : #FFFFFF;
|
109
|
-
}
|
110
|
-
|
111
|
-
th
|
112
|
-
{
|
113
|
-
background-color : #F5F5F5;
|
114
|
-
}
|
115
|
-
|
116
|
-
/* document structure */
|
117
|
-
|
118
|
-
#header
|
119
|
-
{
|
120
|
-
margin-bottom : 5em;
|
121
|
-
text-align : center;
|
122
|
-
}
|
123
|
-
|
124
|
-
#abstract
|
125
|
-
{
|
126
|
-
margin-bottom : 5em;
|
127
|
-
}
|
128
|
-
|
129
|
-
#toc li
|
130
|
-
{
|
131
|
-
list-style-type : none;
|
132
|
-
}
|
133
|
-
|
134
|
-
#toc li ul
|
135
|
-
{
|
136
|
-
padding-bottom : 1em;
|
137
|
-
border-left : thick solid #F5F5F5;
|
138
|
-
_border-left : none; /* for IE6 */
|
139
|
-
}
|
140
|
-
|
141
|
-
#toc li ul:hover
|
142
|
-
{
|
143
|
-
border-color : #DCDCDC;
|
144
|
-
}
|
145
|
-
|
146
|
-
#toc > ul
|
147
|
-
{
|
148
|
-
padding-left : 1em;
|
149
|
-
}
|
150
|
-
|
151
|
-
#references
|
152
|
-
{
|
153
|
-
margin-top : 5em;
|
154
|
-
}
|
155
|
-
|
156
|
-
#footer
|
157
|
-
{
|
158
|
-
border-top : thick dotted #DCDCDC;
|
159
|
-
padding-top : 1em;
|
160
|
-
margin-top : 5em;
|
161
|
-
text-align : center;
|
162
|
-
}
|
163
|
-
|
164
|
-
/* document nodes */
|
165
|
-
|
166
|
-
.part > .title,
|
167
|
-
.chapter > .title
|
168
|
-
{
|
169
|
-
padding-bottom : 0.5em;
|
170
|
-
}
|
171
|
-
|
172
|
-
.part > .title > big,
|
173
|
-
.chapter > .title > big
|
174
|
-
{
|
175
|
-
display : block;
|
176
|
-
margin-top : 0.25em;
|
177
|
-
}
|
178
|
-
|
179
|
-
.part .title big,
|
180
|
-
.chapter .title big
|
181
|
-
{
|
182
|
-
_display : block; /* for IE6 */
|
183
|
-
_margin-top : 0.25em; /* for IE6 */
|
184
|
-
_margin-bottom : 0.75em; /* for IE6 */
|
185
|
-
}
|
186
|
-
|
187
|
-
.paragraph > .title,
|
188
|
-
.tip > .title,
|
189
|
-
.note > .title,
|
190
|
-
.caution > .title,
|
191
|
-
.warning > .title,
|
192
|
-
.important > .title,
|
193
|
-
.figure > .title,
|
194
|
-
.table > .title,
|
195
|
-
.example > .title,
|
196
|
-
.equation > .title,
|
197
|
-
.procedure > .title
|
198
|
-
{
|
199
|
-
font-size : large;
|
200
|
-
margin-top : 2em;
|
201
|
-
}
|
202
|
-
|
203
|
-
.paragraph .title,
|
204
|
-
.tip .title,
|
205
|
-
.note .title,
|
206
|
-
.caution .title,
|
207
|
-
.warning .title,
|
208
|
-
.important .title,
|
209
|
-
.figure .title,
|
210
|
-
.table .title,
|
211
|
-
.example .title,
|
212
|
-
.equation .title,
|
213
|
-
.procedure .title
|
214
|
-
{
|
215
|
-
_font-size : large; /* for IE6 */
|
216
|
-
_font-weight : bold; /* large is not bold in IE6 */
|
217
|
-
_margin-top : 2em; /* for IE6 */
|
218
|
-
}
|
219
|
-
|
220
|
-
.tip ,
|
221
|
-
.note ,
|
222
|
-
.caution ,
|
223
|
-
.warning ,
|
224
|
-
.important,
|
225
|
-
.figure ,
|
226
|
-
.table ,
|
227
|
-
.example ,
|
228
|
-
.equation ,
|
229
|
-
.procedure
|
230
|
-
{
|
231
|
-
margin : 3em;
|
232
|
-
}
|
233
|
-
|
234
|
-
.tip > .icon,
|
235
|
-
.note > .icon,
|
236
|
-
.caution > .icon,
|
237
|
-
.warning > .icon,
|
238
|
-
.important > .icon
|
239
|
-
{
|
240
|
-
float : left;
|
241
|
-
margin : 0 1em 1em 0; /* top right bottom left */
|
242
|
-
}
|
243
|
-
|
244
|
-
.tip .icon,
|
245
|
-
.note .icon,
|
246
|
-
.caution .icon,
|
247
|
-
.warning .icon,
|
248
|
-
.important .icon
|
249
|
-
{
|
250
|
-
_display : none; /* IE6 cannot display embedded images */
|
251
|
-
}
|
252
|
-
|
253
|
-
.figure > .title
|
254
|
-
{
|
255
|
-
text-align : center;
|
256
|
-
}
|
257
|
-
|
258
|
-
.figure .title
|
259
|
-
{
|
260
|
-
_text-align : center; /* for IE6 */
|
261
|
-
}
|
262
|
-
|
263
|
-
.figure > .content img
|
264
|
-
{
|
265
|
-
display : block;
|
266
|
-
margin : auto;
|
267
|
-
}
|
268
|
-
|
269
|
-
.figure .content img
|
270
|
-
{
|
271
|
-
_display : block; /* for IE6 */
|
272
|
-
_margin : auto; /* for IE6 */
|
273
|
-
}
|
274
|
-
|
275
|
-
body
|
276
|
-
{
|
277
|
-
margin : auto;
|
278
|
-
padding : 0.5em;
|
279
|
-
max-width : 36em;
|
280
|
-
}
|
281
|
-
|
282
|
-
/* hyperlinks */
|
283
|
-
|
284
|
-
a
|
285
|
-
{
|
286
|
-
color : #0000FF;
|
287
|
-
text-decoration : none;
|
288
|
-
}
|
289
|
-
|
290
|
-
a:visited
|
291
|
-
{
|
292
|
-
color : #800080;
|
293
|
-
}
|
294
|
-
|
295
|
-
a:hover
|
296
|
-
{
|
297
|
-
color : #FF0000;
|
298
|
-
text-decoration : underline;
|
299
|
-
}
|
300
|
-
|
301
|
-
a:target
|
302
|
-
{
|
303
|
-
color : #FF0000;
|
304
|
-
text-decoration : underline;
|
305
|
-
}
|
306
|
-
|
307
|
-
a.toc:link,
|
308
|
-
a.toc:visited
|
309
|
-
{
|
310
|
-
text-decoration : none;
|
311
|
-
z-index : 1;
|
312
|
-
}
|
313
|
-
|
314
|
-
a img
|
315
|
-
{
|
316
|
-
border : none;
|
317
|
-
}
|
318
|
-
|
319
|
-
/*
|
320
|
-
mark external links with a symbol to help the user
|
321
|
-
distinguish between internal and external links
|
322
|
-
*/
|
323
|
-
a:after
|
324
|
-
{
|
325
|
-
content: "∗";
|
326
|
-
}
|
327
|
-
|
328
|
-
a[href^="#"]:after
|
329
|
-
{
|
330
|
-
content: "";
|
331
|
-
}
|
332
|
-
|
333
|
-
/* source code */
|
334
|
-
|
335
|
-
tt,
|
336
|
-
code,
|
337
|
-
pre
|
338
|
-
{
|
339
|
-
font-family : Consolas, "Lucida Console", monospace;
|
340
|
-
}
|
341
|
-
|
342
|
-
tt
|
343
|
-
{
|
344
|
-
font-weight : bold;
|
345
|
-
color : #A52A2A;
|
346
|
-
background-color : #FFFAF0;
|
347
|
-
}
|
348
|
-
|
349
|
-
/* output of syntax colorizer */
|
350
|
-
.code
|
351
|
-
{
|
352
|
-
background-color : #FFFFF0;
|
353
|
-
}
|
354
|
-
|
355
|
-
pre
|
356
|
-
{
|
357
|
-
line-height : normal;
|
358
|
-
border : 1px dashed #C0C0C0;
|
359
|
-
background-color : #F5FFDF;
|
360
|
-
padding : 1em;
|
361
|
-
overflow : auto;
|
362
|
-
cursor : text;
|
363
|
-
}
|
364
|
-
|
365
|
-
/*
|
366
|
-
pre:hover
|
367
|
-
{
|
368
|
-
border : none;
|
369
|
-
position : fixed;
|
370
|
-
z-index : 1;
|
371
|
-
margin : 0;
|
372
|
-
top : 0;
|
373
|
-
left : 0;
|
374
|
-
right : 0;
|
375
|
-
bottom : 0;
|
376
|
-
overflow : auto;
|
377
|
-
cursor : text;
|
378
|
-
}
|
379
|
-
*/
|
380
|
-
|
381
|
-
/* emphasis */
|
382
|
-
|
383
|
-
blockquote
|
384
|
-
{
|
385
|
-
margin : 1em;
|
386
|
-
border : 5px dotted #C0C0C0;
|
387
|
-
padding : 1em;
|
388
|
-
color : #444;
|
389
|
-
}
|
390
|
-
|
391
|
-
hr
|
392
|
-
{
|
393
|
-
color : #FF0000; /* for IE6 */
|
394
|
-
background-color : #FF0000; /* for Firefox */
|
395
|
-
}
|
396
|
-
|
397
|
-
</style>
|
398
|
-
<style type="text/css" media="print">
|
399
|
-
body
|
400
|
-
{
|
401
|
-
color : #000000;
|
402
|
-
background-color : #FFFFFF;
|
403
|
-
line-height : 1.5em;
|
404
|
-
font-family : Calibri, Verdana, sans-serif;
|
405
|
-
}
|
406
|
-
|
407
|
-
/* emphasis */
|
408
|
-
|
409
|
-
em,
|
410
|
-
blockquote
|
411
|
-
{
|
412
|
-
font-family : Cambria, Georgia, serif;
|
413
|
-
}
|
414
|
-
|
415
|
-
/* headings */
|
416
|
-
|
417
|
-
h1,
|
418
|
-
h2,
|
419
|
-
h3,
|
420
|
-
h4,
|
421
|
-
h5,
|
422
|
-
h6,
|
423
|
-
.title
|
424
|
-
{
|
425
|
-
font-weight : lighter;
|
426
|
-
font-family : Constantia, "Book Antiqua", "URW Bookman L", serif;
|
427
|
-
}
|
428
|
-
|
429
|
-
#lof h1,
|
430
|
-
#lof h2,
|
431
|
-
#lof h3,
|
432
|
-
#lof h4,
|
433
|
-
#lof h5,
|
434
|
-
#lof h6
|
435
|
-
{
|
436
|
-
margin-top : 1.25em;
|
437
|
-
}
|
438
|
-
|
439
|
-
#content h1,
|
440
|
-
#content h2,
|
441
|
-
#content h3,
|
442
|
-
#content h4,
|
443
|
-
#content h5,
|
444
|
-
#content h6
|
445
|
-
{
|
446
|
-
margin-top : 2.5em;
|
447
|
-
line-height : 1.25em;
|
448
|
-
}
|
449
|
-
|
450
|
-
#content h1
|
451
|
-
{
|
452
|
-
font-size : 2.0em;
|
453
|
-
}
|
454
|
-
|
455
|
-
#content h2
|
456
|
-
{
|
457
|
-
font-size : 1.8em;
|
458
|
-
}
|
459
|
-
|
460
|
-
#content h3
|
461
|
-
{
|
462
|
-
font-size : 1.6em;
|
463
|
-
}
|
464
|
-
|
465
|
-
#content h4
|
466
|
-
{
|
467
|
-
font-size : 1.4em;
|
468
|
-
}
|
469
|
-
|
470
|
-
#content h5
|
471
|
-
{
|
472
|
-
font-size : 1.2em;
|
473
|
-
}
|
474
|
-
|
475
|
-
#content h6
|
476
|
-
{
|
477
|
-
font-size : 1.0em;
|
478
|
-
}
|
479
|
-
|
480
|
-
/* tables */
|
481
|
-
|
482
|
-
table
|
483
|
-
{
|
484
|
-
border : none;
|
485
|
-
margin : auto; /* center horizontally */
|
486
|
-
margin-top : 1em;
|
487
|
-
}
|
488
|
-
|
489
|
-
th,
|
490
|
-
td
|
491
|
-
{
|
492
|
-
padding : 1em;
|
493
|
-
border : 1px solid #C0C0C0;
|
494
|
-
vertical-align : top;
|
495
|
-
background-color : #FFFFFF;
|
496
|
-
}
|
497
|
-
|
498
|
-
th
|
499
|
-
{
|
500
|
-
background-color : #F5F5F5;
|
501
|
-
}
|
502
|
-
|
503
|
-
/* document structure */
|
504
|
-
|
505
|
-
#header
|
506
|
-
{
|
507
|
-
margin-bottom : 5em;
|
508
|
-
text-align : center;
|
509
|
-
}
|
510
|
-
|
511
|
-
#abstract
|
512
|
-
{
|
513
|
-
margin-bottom : 5em;
|
514
|
-
}
|
515
|
-
|
516
|
-
#toc li
|
517
|
-
{
|
518
|
-
list-style-type : none;
|
519
|
-
}
|
520
|
-
|
521
|
-
#toc li ul
|
522
|
-
{
|
523
|
-
padding-bottom : 1em;
|
524
|
-
border-left : thick solid #F5F5F5;
|
525
|
-
_border-left : none; /* for IE6 */
|
526
|
-
}
|
527
|
-
|
528
|
-
#toc li ul:hover
|
529
|
-
{
|
530
|
-
border-color : #DCDCDC;
|
531
|
-
}
|
532
|
-
|
533
|
-
#toc > ul
|
534
|
-
{
|
535
|
-
padding-left : 1em;
|
536
|
-
}
|
537
|
-
|
538
|
-
#references
|
539
|
-
{
|
540
|
-
margin-top : 5em;
|
541
|
-
}
|
542
|
-
|
543
|
-
#footer
|
544
|
-
{
|
545
|
-
border-top : thick dotted #DCDCDC;
|
546
|
-
padding-top : 1em;
|
547
|
-
margin-top : 5em;
|
548
|
-
text-align : center;
|
549
|
-
}
|
550
|
-
|
551
|
-
/* document nodes */
|
552
|
-
|
553
|
-
.part > .title,
|
554
|
-
.chapter > .title
|
555
|
-
{
|
556
|
-
padding-bottom : 0.5em;
|
557
|
-
}
|
558
|
-
|
559
|
-
.part > .title > big,
|
560
|
-
.chapter > .title > big
|
561
|
-
{
|
562
|
-
display : block;
|
563
|
-
margin-top : 0.25em;
|
564
|
-
}
|
565
|
-
|
566
|
-
.part .title big,
|
567
|
-
.chapter .title big
|
568
|
-
{
|
569
|
-
_display : block; /* for IE6 */
|
570
|
-
_margin-top : 0.25em; /* for IE6 */
|
571
|
-
_margin-bottom : 0.75em; /* for IE6 */
|
572
|
-
}
|
573
|
-
|
574
|
-
.paragraph > .title,
|
575
|
-
.tip > .title,
|
576
|
-
.note > .title,
|
577
|
-
.caution > .title,
|
578
|
-
.warning > .title,
|
579
|
-
.important > .title,
|
580
|
-
.figure > .title,
|
581
|
-
.table > .title,
|
582
|
-
.example > .title,
|
583
|
-
.equation > .title,
|
584
|
-
.procedure > .title
|
585
|
-
{
|
586
|
-
font-size : large;
|
587
|
-
margin-top : 2em;
|
588
|
-
}
|
589
|
-
|
590
|
-
.paragraph .title,
|
591
|
-
.tip .title,
|
592
|
-
.note .title,
|
593
|
-
.caution .title,
|
594
|
-
.warning .title,
|
595
|
-
.important .title,
|
596
|
-
.figure .title,
|
597
|
-
.table .title,
|
598
|
-
.example .title,
|
599
|
-
.equation .title,
|
600
|
-
.procedure .title
|
601
|
-
{
|
602
|
-
_font-size : large; /* for IE6 */
|
603
|
-
_font-weight : bold; /* large is not bold in IE6 */
|
604
|
-
_margin-top : 2em; /* for IE6 */
|
605
|
-
}
|
606
|
-
|
607
|
-
.tip ,
|
608
|
-
.note ,
|
609
|
-
.caution ,
|
610
|
-
.warning ,
|
611
|
-
.important,
|
612
|
-
.figure ,
|
613
|
-
.table ,
|
614
|
-
.example ,
|
615
|
-
.equation ,
|
616
|
-
.procedure
|
617
|
-
{
|
618
|
-
margin : 3em;
|
619
|
-
}
|
620
|
-
|
621
|
-
.tip > .icon,
|
622
|
-
.note > .icon,
|
623
|
-
.caution > .icon,
|
624
|
-
.warning > .icon,
|
625
|
-
.important > .icon
|
626
|
-
{
|
627
|
-
float : left;
|
628
|
-
margin : 0 1em 1em 0; /* top right bottom left */
|
629
|
-
}
|
630
|
-
|
631
|
-
.tip .icon,
|
632
|
-
.note .icon,
|
633
|
-
.caution .icon,
|
634
|
-
.warning .icon,
|
635
|
-
.important .icon
|
636
|
-
{
|
637
|
-
_display : none; /* IE6 cannot display embedded images */
|
638
|
-
}
|
639
|
-
|
640
|
-
.figure > .title
|
641
|
-
{
|
642
|
-
text-align : center;
|
643
|
-
}
|
644
|
-
|
645
|
-
.figure .title
|
646
|
-
{
|
647
|
-
_text-align : center; /* for IE6 */
|
648
|
-
}
|
649
|
-
|
650
|
-
.figure > .content img
|
651
|
-
{
|
652
|
-
display : block;
|
653
|
-
margin : auto;
|
654
|
-
}
|
655
|
-
|
656
|
-
.figure .content img
|
657
|
-
{
|
658
|
-
_display : block; /* for IE6 */
|
659
|
-
_margin : auto; /* for IE6 */
|
660
|
-
}
|
661
|
-
|
662
|
-
/* headings */
|
663
|
-
|
664
|
-
h1,
|
665
|
-
h2,
|
666
|
-
h3,
|
667
|
-
h4,
|
668
|
-
h5,
|
669
|
-
h6
|
670
|
-
{
|
671
|
-
font-weight : normal;
|
672
|
-
}
|
673
|
-
|
674
|
-
/* hyperlinks */
|
675
|
-
|
676
|
-
a:link,
|
677
|
-
a:visited,
|
678
|
-
a:active
|
679
|
-
{
|
680
|
-
color : #0000FF;
|
681
|
-
font-weight : bold;
|
682
|
-
text-decoration : underline;
|
683
|
-
}
|
684
|
-
|
685
|
-
a:after
|
686
|
-
{
|
687
|
-
content : " (" attr(href) ")";
|
688
|
-
font-family : sans-serif;
|
689
|
-
font-weight : normal;
|
690
|
-
font-size : 90%;
|
691
|
-
}
|
692
|
-
|
693
|
-
a[href^="#"]:after
|
694
|
-
{
|
695
|
-
content : "";
|
696
|
-
}
|
697
|
-
|
698
|
-
a[href^="#"]
|
699
|
-
{
|
700
|
-
color : #A52A2A;
|
701
|
-
font-weight : lighter;
|
702
|
-
text-decoration : none;
|
703
|
-
font-style : italic;
|
704
|
-
}
|
705
|
-
|
706
|
-
a.toc:link,
|
707
|
-
a.toc:visited
|
708
|
-
{
|
709
|
-
color : inherit;
|
710
|
-
.color : #000000; /* for IE6 and IE7 */
|
711
|
-
font-weight : inherit;
|
712
|
-
text-decoration : none;
|
713
|
-
font-style : normal;
|
714
|
-
}
|
715
|
-
|
716
|
-
/* source code */
|
717
|
-
|
718
|
-
tt
|
719
|
-
{
|
720
|
-
color : inherit;
|
721
|
-
background-color : inherit;
|
722
|
-
font-weight : normal;
|
723
|
-
}
|
724
|
-
|
725
|
-
pre,
|
726
|
-
.code
|
727
|
-
{
|
728
|
-
border : none;
|
729
|
-
overflow : visible;
|
730
|
-
background-color : inherit;
|
731
|
-
}
|
732
|
-
|
733
|
-
/* document structure */
|
734
|
-
|
735
|
-
#lof
|
736
|
-
{
|
737
|
-
display : none;
|
738
|
-
}
|
739
|
-
|
740
|
-
/* document nodes */
|
741
|
-
|
742
|
-
.part > .title > big,
|
743
|
-
.chapter > .title > big
|
744
|
-
{
|
745
|
-
padding-bottom : 0.5em;
|
746
|
-
}
|
747
|
-
|
748
|
-
.part .title big,
|
749
|
-
.chapter .title big
|
750
|
-
{
|
751
|
-
_padding-bottom : 0.5em; /* for IE6 */
|
752
|
-
}
|
753
|
-
|
754
|
-
</style>
|
755
|
-
</head>
|
756
|
-
<body>
|
757
|
-
|
758
|
-
<div id="header">
|
759
|
-
|
760
|
-
|
761
|
-
<h1 class="title">Rumai 2.0.0 user guide</h1>
|
762
|
-
<h2 class="authors"><a href="http://snk.tuxfamily.org">Suraj N. Kurapati</a></h2>
|
763
|
-
<h3 class="date">04 February 2008</h3>
|
764
|
-
|
765
|
-
</div>
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
<div id="toc"><h1>Contents</h1> <ul><li>1 <a id="a-606974828" href="#Introduction">Introduction</a><ul><li>1.1 <a id="a-606979088" href="#Resources">Resources</a></li><li>1.2 <a id="a-606982558" href="#License">License</a></li></ul></li><li>2 <a id="a-606985268" href="#Setup">Setup</a><ul><li>2.1 <a id="a-606986748" href="#Requirements">Requirements</a></li><li>2.2 <a id="a-606988778" href="#Installation">Installation</a></li><li>2.3 <a id="a-606992388" href="#Manifest">Manifest</a></li><li>2.4 <a id="a-606994568" href="#Version-numbering-system">Version numbering system</a></li></ul></li><li>3 <a id="a-606997088" href="#Usage">Usage</a><ul><li>3.1 <a id="a-606998598" href="#Concepts">Concepts</a></li><li>3.2 <a id="a-607000638" href="#shell">Interactive shell</a><ul><li>3.2.1 <a id="a-607002378" href="#Live-demonstration">Live demonstration</a><ul><li>3.2.1.1 <a id="a-607004068" href="#Automated-client-arrangement">Automated client arrangement</a></li><li>3.2.1.2 <a id="a-607006288" href="#Multiple-client-grouping">Multiple client grouping</a></li><li>3.2.1.3 <a id="a-607008668" href="#Easy-column-manipulation">Easy column manipulation</a></li><li>3.2.1.4 <a id="a-607011198" href="#Easy-client-manipulation">Easy client manipulation</a></li><li>3.2.1.5 <a id="a-607013848" href="#Traversing-the-file-system">Traversing the file system</a></li></ul></li><li>3.2.2 <a id="a-607016918" href="#Available-commands">Available commands</a></li></ul></li><li>3.3 <a id="a-607024218" href="#wmiirc">Scripting your wmiirc</a></li></ul></li></ul></div>
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
<div id="content">
|
774
|
-
<div class="chapter">
|
775
|
-
<h1 class="title">
|
776
|
-
Chapter
|
777
|
-
<a class="toc" id="Introduction" href="#a-606974828">1</a>
|
778
|
-
|
779
|
-
<br/>
|
780
|
-
|
781
|
-
<big>Introduction</big>
|
782
|
-
</h1>
|
783
|
-
|
784
|
-
<div class="content"><p>Rumai is a library for manipulating the <a href="http://www.suckless.org/wiki/wmii">wmii</a> window manager through <a href="http://ruby-lang.org">Ruby</a>. It excels at <strong>dynamic arrangement</strong> of clients, columns, views, and tags.</p>
|
785
|
-
|
786
|
-
|
787
|
-
<p>Rumai also provides (1) an <a class="xref" href="#shell">interactive shell</a> for live entertainment, and (2) a <strong>pure Ruby client</strong> for the <a href="http://cm.bell-labs.com/magic/man2html/5/intro">9P2000 protocol</a>, which it uses to communicate with wmii’s <a href="http://www.suckless.org/wiki/libs/libixp">IXP file-system interface</a>.</p>
|
788
|
-
|
789
|
-
|
790
|
-
<p>Rumai is <strong>open-source software</strong> (see <a class="xref" href="#License">Section 1.2: <em>License</em></a>) so feel free to contribute your improvements to and discuss your ideas with the author. You can obtain the source code from the project <a href="http://darcs.net">Darcs</a> repository by running the following command:</p>
|
791
|
-
|
792
|
-
|
793
|
-
<pre>darcs get http://rumai.rubyforge.org/src rumai</pre>
|
794
|
-
|
795
|
-
|
796
|
-
<p><div class="section">
|
797
|
-
<h2 class="title">
|
798
|
-
<a class="toc" id="Resources" href="#a-606979088">1.1</a> Resources
|
799
|
-
</h2>
|
800
|
-
<div class="content"><ul>
|
801
|
-
<li><a href="http://rumai.rubyforge.org/news.xml">News feed</a>
|
802
|
-
– project news and release announcements.</li>
|
803
|
-
<li><a href="http://rubyforge.org/frs/?group_id=5005">Download area</a>
|
804
|
-
– place to obtain release packages.</li>
|
805
|
-
<li><a href="api/index.html">API reference</a>
|
806
|
-
– documentation for all provided Ruby code.</li>
|
807
|
-
<li>Support / feedback
|
808
|
-
– send an e-mail to the author (see address in <a class="xref" href="#License">Section 1.2: <em>License</em></a>).</li>
|
809
|
-
</ul></div>
|
810
|
-
</div>
|
811
|
-
<div class="section">
|
812
|
-
<h2 class="title">
|
813
|
-
<a class="toc" id="License" href="#a-606982558">1.2</a> License
|
814
|
-
</h2>
|
815
|
-
<div class="content"><p>Copyright 2006 Suraj N. Kurapati <SNK at GNA dot ORG></p>
|
816
|
-
|
817
|
-
|
818
|
-
<p>Permission is hereby granted, free of charge, to any person obtaining a
|
819
|
-
copy of this software and associated documentation files (the "Software"),
|
820
|
-
to deal in the Software without restriction, including without limitation
|
821
|
-
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
822
|
-
and/or sell copies of the Software, and to permit persons to whom the
|
823
|
-
Software is furnished to do so, subject to the following conditions:</p>
|
824
|
-
|
825
|
-
|
826
|
-
<ul>
|
827
|
-
<li>All copies and substantial portions of the Software (the "Derivatives")
|
828
|
-
and their corresponding machine-readable source code (the "Code") must
|
829
|
-
include the above copyright notice and this permission notice.</li>
|
830
|
-
</ul>
|
831
|
-
|
832
|
-
|
833
|
-
<ul>
|
834
|
-
<li>Upon distribution, the Derivatives must be accompanied either by the Code
|
835
|
-
or—provided that the Code is obtainable for no more than the cost of
|
836
|
-
distribution plus a nominal fee—by information on how to obtain the Code.</li>
|
837
|
-
</ul>
|
838
|
-
|
839
|
-
|
840
|
-
<p><span class="caps">THE SOFTWARE IS PROVIDED</span> "AS IS", <span class="caps">WITHOUT WARRANTY OF ANY KIND</span>, EXPRESS OR
|
841
|
-
IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY</span>, FITNESS
|
842
|
-
<span class="caps">FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT</span>. IN <span class="caps">NO EVENT SHALL THE AUTHORS OR</span>
|
843
|
-
<span class="caps">COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM</span>, DAMAGES <span class="caps">OR OTHER LIABILITY</span>, WHETHER
|
844
|
-
<span class="caps">IN AN ACTION OF CONTRACT</span>, TORT <span class="caps">OR OTHERWISE</span>, ARISING FROM, OUT <span class="caps">OF OR IN</span>
|
845
|
-
<span class="caps">CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE</span>.</p></div>
|
846
|
-
</div></p></div>
|
847
|
-
</div>
|
848
|
-
<div class="chapter">
|
849
|
-
<h1 class="title">
|
850
|
-
Chapter
|
851
|
-
<a class="toc" id="Setup" href="#a-606985268">2</a>
|
852
|
-
|
853
|
-
<br/>
|
854
|
-
|
855
|
-
<big>Setup</big>
|
856
|
-
</h1>
|
857
|
-
|
858
|
-
<div class="content"><div class="section">
|
859
|
-
<h2 class="title">
|
860
|
-
<a class="toc" id="Requirements" href="#a-606986748">2.1</a> Requirements
|
861
|
-
</h2>
|
862
|
-
<div class="content">Your system needs the following software to run Rumai.
|
863
|
-
|
864
|
-
|
865
|
-
<table border="1">
|
866
|
-
<tr>
|
867
|
-
<th>Software </th>
|
868
|
-
<th>Notes </th>
|
869
|
-
</tr>
|
870
|
-
<tr>
|
871
|
-
<td> <a href="http://ruby-lang.org">Ruby</a> </td>
|
872
|
-
<td> Version 1.8.x is required. </td>
|
873
|
-
</tr>
|
874
|
-
<tr>
|
875
|
-
<td> <a href="http://www.suckless.org/wiki/wmii">wmii</a> </td>
|
876
|
-
<td> Version 3.6 or newer is required. </td>
|
877
|
-
</tr>
|
878
|
-
</table></div>
|
879
|
-
</div>
|
880
|
-
<div class="section">
|
881
|
-
<h2 class="title">
|
882
|
-
<a class="toc" id="Installation" href="#a-606988778">2.2</a> Installation
|
883
|
-
</h2>
|
884
|
-
<div class="content"><p>If your system has <a href="http://rubygems.org/">RubyGems</a>, then you can install Rumai by running the following commands:</p>
|
885
|
-
|
886
|
-
|
887
|
-
<pre>gem install rumai
|
888
|
-
rumai -v</pre>
|
889
|
-
|
890
|
-
|
891
|
-
Otherwise, follow these instructions:
|
892
|
-
<ol>
|
893
|
-
<li>Download the newest release package from <a href="http://rubyforge.org/frs/?group_id=5005">the download area</a>.</li>
|
894
|
-
<li>Extract the release package anywhere you want on your system.</li>
|
895
|
-
<li>Go inside the extracted directory and run the following command:</li>
|
896
|
-
</ol>
|
897
|
-
|
898
|
-
|
899
|
-
<pre>ruby bin/rumai -v</pre>
|
900
|
-
|
901
|
-
|
902
|
-
<p>If the installation was successful, then you will see output like this: <pre>Rumai 2.0.0 (2008-02-04) http://rumai.rubyforge.org /home/sun/src/rumai
|
903
|
-
</pre></p>
|
904
|
-
|
905
|
-
|
906
|
-
<p>Otherwise, you can e-mail the author (see address in <a class="xref" href="#License">Section 1.2: <em>License</em></a>) for help.</p></div>
|
907
|
-
</div>
|
908
|
-
<div class="section">
|
909
|
-
<h2 class="title">
|
910
|
-
<a class="toc" id="Manifest" href="#a-606992388">2.3</a> Manifest
|
911
|
-
</h2>
|
912
|
-
<div class="content">Now that Rumai is installed on your system, let us examine its installation directory.
|
913
|
-
<ul>
|
914
|
-
<li>If you installed Rumai manually, then you already know the location of its installation directory.</li>
|
915
|
-
<li>If you installed Rumai using RubyGems, then run <pre>rumai -v</pre> and select the right-most item in the output—that is the path of Rumai’s installation directory.</li>
|
916
|
-
</ul>
|
917
|
-
|
918
|
-
|
919
|
-
Inside Rumai’s installation directory, you will see (among other things) the following items:
|
920
|
-
<ul>
|
921
|
-
<li><tt>bin/</tt> – contains executable programs.
|
922
|
-
<ul>
|
923
|
-
<li><tt>rumai</tt> – the interactive shell.</li>
|
924
|
-
</ul>
|
925
|
-
</li>
|
926
|
-
<li><tt>lib/</tt>
|
927
|
-
<ul>
|
928
|
-
<li><tt>rumai.rb</tt> – the main Rumai library.</li>
|
929
|
-
<li><tt>rumai/</tt>
|
930
|
-
<ul>
|
931
|
-
<li><tt>ixp.rb</tt> – the pure Ruby client for the <a href="http://cm.bell-labs.com/magic/man2html/5/intro">9P2000 protocol</a>.</li>
|
932
|
-
</ul>
|
933
|
-
</li>
|
934
|
-
</ul>
|
935
|
-
</li>
|
936
|
-
<li><tt>doc/</tt> – contains the user guide and other documentation.
|
937
|
-
<ul>
|
938
|
-
<li><tt>guide.erb</tt> – the source file of this user guide.</li>
|
939
|
-
<li><tt>api/</tt> – contains API reference documentation.</li>
|
940
|
-
</ul>
|
941
|
-
</li>
|
942
|
-
<li><tt>LICENSE</tt> – the project license and copyright notice.</li>
|
943
|
-
</ul></div>
|
944
|
-
</div>
|
945
|
-
<div class="section">
|
946
|
-
<h2 class="title">
|
947
|
-
<a class="toc" id="Version-numbering-system" href="#a-606994568">2.4</a> Version numbering system
|
948
|
-
</h2>
|
949
|
-
<div class="content">Rumai uses the <a href="http://www.rubygems.org/read/chapter/7">RubyGems rational versioning policy</a> to number its releases. This <strong>major.minor.patch</strong> numbering policy <a href="http://ablog.apress.com/?p=738">is summarized</a> as follows.
|
950
|
-
|
951
|
-
|
952
|
-
<table border="1">
|
953
|
-
<tr>
|
954
|
-
<td> Version number components: </td>
|
955
|
-
<th>Major </th>
|
956
|
-
<th>Minor </th>
|
957
|
-
<th>Patch </th>
|
958
|
-
</tr>
|
959
|
-
<tr>
|
960
|
-
<th>Backwards compatible? </th>
|
961
|
-
<td> no </td>
|
962
|
-
<td> yes </td>
|
963
|
-
<td> yes </td>
|
964
|
-
</tr>
|
965
|
-
<tr>
|
966
|
-
<th>New features? </th>
|
967
|
-
<td> yes </td>
|
968
|
-
<td> yes </td>
|
969
|
-
<td> no </td>
|
970
|
-
</tr>
|
971
|
-
<tr>
|
972
|
-
<th>Bug fixes? </th>
|
973
|
-
<td> yes </td>
|
974
|
-
<td> yes </td>
|
975
|
-
<td> yes </td>
|
976
|
-
</tr>
|
977
|
-
</table></div>
|
978
|
-
</div></div>
|
979
|
-
</div>
|
980
|
-
<div class="chapter">
|
981
|
-
<h1 class="title">
|
982
|
-
Chapter
|
983
|
-
<a class="toc" id="Usage" href="#a-606997088">3</a>
|
984
|
-
|
985
|
-
<br/>
|
986
|
-
|
987
|
-
<big>Usage</big>
|
988
|
-
</h1>
|
989
|
-
|
990
|
-
<div class="content"><div class="section">
|
991
|
-
<h2 class="title">
|
992
|
-
<a class="toc" id="Concepts" href="#a-606998598">3.1</a> Concepts
|
993
|
-
</h2>
|
994
|
-
<div class="content">If you wish to wield the power of Rumai more effectively, you should understand the following basic concepts:
|
995
|
-
<ul>
|
996
|
-
<li>A <strong>client</strong> is any graphical program that is running in your X session. In other words, any <strong>window</strong> in your wmii session is a <strong>client</strong>.</li>
|
997
|
-
<li>A <strong>tag</strong> is an arbitrary string (a label) that can be associated with one or more clients.</li>
|
998
|
-
<li>A <strong>view</strong> is a graphical representation of a <strong>tag</strong>. It shows all clients associated with a particular tag.</li>
|
999
|
-
<li>An <strong>area</strong> is a region inside a <strong>view</strong>. It contains clients.
|
1000
|
-
<ul>
|
1001
|
-
<li>A <strong>managed area</strong> or <strong>column</strong> is a region where clients cannot overlap each other.</li>
|
1002
|
-
<li>The <strong>floating area</strong> is an area whose clients (1) can overlap each other and (2) <em>float above</em> the managed areas.</li>
|
1003
|
-
</ul></li>
|
1004
|
-
</ul></div>
|
1005
|
-
</div>
|
1006
|
-
<div class="section">
|
1007
|
-
<h2 class="title">
|
1008
|
-
<a class="toc" id="shell" href="#a-607000638">3.2</a> Interactive shell
|
1009
|
-
</h2>
|
1010
|
-
<div class="content"><p>Run the following command to start Rumai’s interactive shell (IRB):</p>
|
1011
|
-
|
1012
|
-
|
1013
|
-
<pre>rumai</pre>
|
1014
|
-
|
1015
|
-
|
1016
|
-
<p>You should now see a command prompt like this:</p>
|
1017
|
-
|
1018
|
-
|
1019
|
-
<pre>irb(Rumai):001:0></pre>
|
1020
|
-
|
1021
|
-
|
1022
|
-
<p>The “irb(<strong>Rumai</strong>)” token in the prompt indicates that commands will be evaluated <em>inside</em> the <code class="code"><span style="color:#036; font-weight:bold">Rumai</span></code> module. As a result, you can omit the “Rumai” prefix from your commands if you wish.</p>
|
1023
|
-
|
1024
|
-
|
1025
|
-
<p>For example, to get the current client object, you can type <code class="code">curr_client</code> instead of having to type <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>.curr_client</code> at the prompt. However, note that both commands both achieve the same effect and are thereby equivalent.</p>
|
1026
|
-
|
1027
|
-
|
1028
|
-
<p>The next thing to note is that <strong>tab completion</strong> is enabled by default. Consequently, you can type part of a command and press the TAB key to see a list of possible completions.</p>
|
1029
|
-
|
1030
|
-
|
1031
|
-
<p>Finally, the interactive shell is a standard IRB session. As a result your <tt>~/.irbrc</tt> file is read and processed by default. Furthermore, you can pass the standard IRB command-line options to the <strong>rumai</strong> command.</p>
|
1032
|
-
|
1033
|
-
|
1034
|
-
<p><div class="section">
|
1035
|
-
<h3 class="title">
|
1036
|
-
<a class="toc" id="Live-demonstration" href="#a-607002378">3.2.1</a> Live demonstration
|
1037
|
-
</h3>
|
1038
|
-
<div class="content"><p>Now that you have a command prompt, let us walk through a quick demonstration that highlights the main features of Rumai. You can follow along by copying & pasting the presented commands into the interactive shell.</p>
|
1039
|
-
|
1040
|
-
|
1041
|
-
<p><div class="section">
|
1042
|
-
<h4 class="title">
|
1043
|
-
<a class="toc" id="Automated-client-arrangement" href="#a-607004068">3.2.1.1</a> Automated client arrangement
|
1044
|
-
</h4>
|
1045
|
-
<div class="content"><p>Launch a few terminals so that we have something to work with:
|
1046
|
-
<pre class="code">
|
1047
|
-
colors = <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20"> red green blue black orange brown gray navy gold </span><span style="color:#710">]</span></span>
|
1048
|
-
colors.each {|c| system <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">xterm -bg </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -title </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -e read &</span><span style="color:#710">"</span></span> }
|
1049
|
-
</pre></p>
|
1050
|
-
|
1051
|
-
|
1052
|
-
<p>Arrange all clients in a grid:
|
1053
|
-
<pre class="code">
|
1054
|
-
curr_view.arrange_in_grid
|
1055
|
-
</pre></p>
|
1056
|
-
|
1057
|
-
|
1058
|
-
<p>Arrange all clients in a diamond shape:
|
1059
|
-
<pre class="code">
|
1060
|
-
curr_view.arrange_in_diamond
|
1061
|
-
</pre></p>
|
1062
|
-
|
1063
|
-
|
1064
|
-
<p>Arrange all clients like LarsWM does:
|
1065
|
-
<pre class="code">
|
1066
|
-
curr_view.arrange_as_larswm
|
1067
|
-
</pre></p>
|
1068
|
-
|
1069
|
-
|
1070
|
-
<p>Close the terminals we launched earlier:
|
1071
|
-
<pre class="code">
|
1072
|
-
terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
1073
|
-
terms.each {|c| c.kill }
|
1074
|
-
</pre></p></div>
|
1075
|
-
</div>
|
1076
|
-
<div class="section">
|
1077
|
-
<h4 class="title">
|
1078
|
-
<a class="toc" id="Multiple-client-grouping" href="#a-607006288">3.2.1.2</a> Multiple client grouping
|
1079
|
-
</h4>
|
1080
|
-
<div class="content"><p>Launch a few terminals so that we have something to work with:
|
1081
|
-
<pre class="code">
|
1082
|
-
colors = <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20"> red green blue black orange brown gray navy gold </span><span style="color:#710">]</span></span>
|
1083
|
-
colors.each {|c| system <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">xterm -bg </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -title </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -e read &</span><span style="color:#710">"</span></span> }
|
1084
|
-
</pre></p>
|
1085
|
-
|
1086
|
-
|
1087
|
-
<p>Add the red, green, and blue terminals into the “grouping”:
|
1088
|
-
<pre class="code">
|
1089
|
-
terms = curr_view.clients.select {|c| <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20">red green blue</span><span style="color:#710">]</span></span>.include? c.label.read }
|
1090
|
-
terms.each {|c| c.group }
|
1091
|
-
</pre></p>
|
1092
|
-
|
1093
|
-
|
1094
|
-
<p>You should now see a new button labelled as “@” on the left-hand side of wmii’s bar, indicating that there is now a new view labelled “@” in wmii. Let us inspect what clients this mysterious view contains:
|
1095
|
-
<pre class="code">
|
1096
|
-
v = <span style="color:#036; font-weight:bold">View</span>.new <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">@</span><span style="color:#710">"</span></span>
|
1097
|
-
puts v.clients.map {|c| c.label.read }
|
1098
|
-
</pre></p>
|
1099
|
-
|
1100
|
-
|
1101
|
-
<p>Aha! The mysterious view contains the red, green, and blue clients we recently “grouped”. Thus, by adding a client to the “grouping”, we are simply tagging the client with the ”@” token.</p>
|
1102
|
-
|
1103
|
-
|
1104
|
-
<p>Now that we have put some clients into the “grouping”, let us move all clients in the grouping to the floating area in the current view:
|
1105
|
-
<pre class="code">
|
1106
|
-
grouping.each {|c| c.send <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">toggle</span><span style="color:#710">"</span></span> }
|
1107
|
-
</pre></p>
|
1108
|
-
|
1109
|
-
|
1110
|
-
<p>Neat! Let us bring them back into the managed area:
|
1111
|
-
<pre class="code">
|
1112
|
-
grouping.each {|c| c.send <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">toggle</span><span style="color:#710">"</span></span> }
|
1113
|
-
</pre></p>
|
1114
|
-
|
1115
|
-
|
1116
|
-
<p>Close the terminals we launched earlier:
|
1117
|
-
<pre class="code">
|
1118
|
-
terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
1119
|
-
terms.each {|c| c.kill }
|
1120
|
-
</pre></p>
|
1121
|
-
|
1122
|
-
|
1123
|
-
<p>In summary, you can select multiple clients (by adding them to the “grouping”) and perform operations on them. This is useful when you want to do something with a group of clients but do not want to manually focus one, perform the action, focus the next one, and so on.</p>
|
1124
|
-
|
1125
|
-
|
1126
|
-
<p>Another important aspect is that selected clients stay selected until they are unselected. This allows you to continue performing tasks on the selection without having to reselect the same clients after every operation.</p></div>
|
1127
|
-
</div>
|
1128
|
-
<div class="section">
|
1129
|
-
<h4 class="title">
|
1130
|
-
<a class="toc" id="Easy-column-manipulation" href="#a-607008668">3.2.1.3</a> Easy column manipulation
|
1131
|
-
</h4>
|
1132
|
-
<div class="content"><p>Launch a few terminals so that we have something to work with:
|
1133
|
-
<pre class="code">
|
1134
|
-
colors = <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20"> red green blue black orange brown gray navy gold </span><span style="color:#710">]</span></span>
|
1135
|
-
colors.each {|c| system <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">xterm -bg </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -title </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -e read &</span><span style="color:#710">"</span></span> }
|
1136
|
-
</pre></p>
|
1137
|
-
|
1138
|
-
|
1139
|
-
<p>You can insert a group of clients to the top, bottom, or after the currently focused client of <em>any</em> column using Array-like methods.</p>
|
1140
|
-
|
1141
|
-
|
1142
|
-
<p>Give each client its own column (one client per column):
|
1143
|
-
<pre class="code">
|
1144
|
-
curr_view.each_column {|c| c.length = <span style="color:#00D; font-weight:bold">1</span> }
|
1145
|
-
</pre></p>
|
1146
|
-
|
1147
|
-
|
1148
|
-
<p>Put (at most) three clients in every column:
|
1149
|
-
<pre class="code">
|
1150
|
-
curr_view.each_column {|c| c.length = <span style="color:#00D; font-weight:bold">3</span> }
|
1151
|
-
</pre></p>
|
1152
|
-
|
1153
|
-
|
1154
|
-
<p>Move the red, green, and blue clients into the floating area:
|
1155
|
-
<pre class="code">
|
1156
|
-
terms = curr_view.clients.select {|c| <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20">red green blue</span><span style="color:#710">]</span></span>.include? c.label.read }
|
1157
|
-
curr_view.areas[<span style="color:#00D; font-weight:bold">0</span>].push terms
|
1158
|
-
</pre></p>
|
1159
|
-
|
1160
|
-
|
1161
|
-
<p>Slurp all floating clients into the last column:
|
1162
|
-
<pre class="code">
|
1163
|
-
list = curr_view.areas
|
1164
|
-
a, b = list.first, list.last
|
1165
|
-
b.concat a
|
1166
|
-
</pre></p>
|
1167
|
-
|
1168
|
-
|
1169
|
-
<p>Set the last column’s layout to stacking mode:
|
1170
|
-
<pre class="code">
|
1171
|
-
b.layout = <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">stack</span><span style="color:#710">'</span></span>
|
1172
|
-
</pre></p>
|
1173
|
-
|
1174
|
-
|
1175
|
-
<p>Move the red, green, and blue clients to the top of the second column:
|
1176
|
-
<pre class="code">
|
1177
|
-
curr_view.areas[<span style="color:#00D; font-weight:bold">2</span>].unshift terms
|
1178
|
-
</pre></p>
|
1179
|
-
|
1180
|
-
|
1181
|
-
<p>Move the red, green, and blue clients to the bottom of the third column:
|
1182
|
-
<pre class="code">
|
1183
|
-
curr_view.areas[<span style="color:#00D; font-weight:bold">3</span>].push terms
|
1184
|
-
</pre></p>
|
1185
|
-
|
1186
|
-
|
1187
|
-
<p>Close the terminals we launched earlier:
|
1188
|
-
<pre class="code">
|
1189
|
-
terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
1190
|
-
terms.each {|c| c.kill }
|
1191
|
-
</pre></p></div>
|
1192
|
-
</div>
|
1193
|
-
<div class="section">
|
1194
|
-
<h4 class="title">
|
1195
|
-
<a class="toc" id="Easy-client-manipulation" href="#a-607011198">3.2.1.4</a> Easy client manipulation
|
1196
|
-
</h4>
|
1197
|
-
<div class="content"><p>Launch a few terminals so that we have something to work with:
|
1198
|
-
<pre class="code">
|
1199
|
-
colors = <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20"> red green blue black orange brown gray navy gold </span><span style="color:#710">]</span></span>
|
1200
|
-
colors.each {|c| system <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">xterm -bg </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -title </span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>c<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> -e read &</span><span style="color:#710">"</span></span> }
|
1201
|
-
</pre></p>
|
1202
|
-
|
1203
|
-
|
1204
|
-
<p>Obtain a reference to the red client:
|
1205
|
-
<pre class="code">
|
1206
|
-
red = curr_view.clients.find {|c| c.label.read == <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">red</span><span style="color:#710">"</span></span> }
|
1207
|
-
</pre></p>
|
1208
|
-
|
1209
|
-
|
1210
|
-
<p>Show the red client’s current tags:
|
1211
|
-
<pre class="code">
|
1212
|
-
red.tags
|
1213
|
-
</pre></p>
|
1214
|
-
|
1215
|
-
|
1216
|
-
<p>Add the “foo” and “bar” tags to the red client:
|
1217
|
-
<pre class="code">
|
1218
|
-
red.tag <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">foo</span><span style="color:#710">"</span></span>, <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">bar</span><span style="color:#710">"</span></span>
|
1219
|
-
</pre></p>
|
1220
|
-
|
1221
|
-
|
1222
|
-
<p>Remove the “bar” tag from the red client:
|
1223
|
-
<pre class="code">
|
1224
|
-
red.untag <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">bar</span><span style="color:#710">"</span></span>
|
1225
|
-
</pre></p>
|
1226
|
-
|
1227
|
-
|
1228
|
-
<p>Do complex operations on the red client’s tags:
|
1229
|
-
<pre class="code">
|
1230
|
-
red.with_tags { concat <span style="background-color:#fff0f0"><span style="color:#710">%w[</span><span style="color:#D20">a b c</span><span style="color:#710">]</span></span>; push <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">z</span><span style="color:#710">'</span></span>; delete <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">c</span><span style="color:#710">'</span></span> }
|
1231
|
-
</pre></p>
|
1232
|
-
|
1233
|
-
|
1234
|
-
<p>Focus the next client after the red client:
|
1235
|
-
<pre class="code">
|
1236
|
-
red.next.focus ; curr_client == red.next <span style="color:#888">#=> true</span>
|
1237
|
-
</pre></p>
|
1238
|
-
|
1239
|
-
|
1240
|
-
<p>Notice that by focusing a client, we make it the current client.</p>
|
1241
|
-
|
1242
|
-
|
1243
|
-
<p>Focus the red client on a different view:
|
1244
|
-
<pre class="code">
|
1245
|
-
orig = curr_view
|
1246
|
-
v = red.views.last
|
1247
|
-
red.focus v
|
1248
|
-
</pre></p>
|
1249
|
-
|
1250
|
-
|
1251
|
-
<p>Return to the original view:
|
1252
|
-
<pre class="code">
|
1253
|
-
orig.focus
|
1254
|
-
</pre></p>
|
1255
|
-
|
1256
|
-
|
1257
|
-
<p>Send the red client to the last column:
|
1258
|
-
<pre class="code">
|
1259
|
-
red.send curr_view.areas.last
|
1260
|
-
</pre></p>
|
1261
|
-
|
1262
|
-
|
1263
|
-
<p>Close the terminals we launched earlier:
|
1264
|
-
<pre class="code">
|
1265
|
-
terms = curr_view.clients.select {|c| colors.include? c.label.read }
|
1266
|
-
terms.each {|c| c.kill }
|
1267
|
-
</pre></p></div>
|
1268
|
-
</div>
|
1269
|
-
<div class="section">
|
1270
|
-
<h4 class="title">
|
1271
|
-
<a class="toc" id="Traversing-the-file-system" href="#a-607013848">3.2.1.5</a> Traversing the file system
|
1272
|
-
</h4>
|
1273
|
-
<div class="content"><p>Show the root node of wmii’s IXP file system:
|
1274
|
-
<pre class="code">
|
1275
|
-
fs
|
1276
|
-
</pre></p>
|
1277
|
-
|
1278
|
-
|
1279
|
-
<p>Show the names of all files at the root level:
|
1280
|
-
<pre class="code">
|
1281
|
-
fs.entries
|
1282
|
-
</pre></p>
|
1283
|
-
|
1284
|
-
|
1285
|
-
<p>Show the parent of the root node:
|
1286
|
-
<pre class="code">
|
1287
|
-
fs.parent
|
1288
|
-
</pre></p>
|
1289
|
-
|
1290
|
-
|
1291
|
-
<p>Show the children of the root node:
|
1292
|
-
<pre class="code">
|
1293
|
-
fs.children
|
1294
|
-
</pre></p>
|
1295
|
-
|
1296
|
-
|
1297
|
-
<p>Navigate into to the <tt>/lbar/</tt> directory:
|
1298
|
-
<pre class="code">
|
1299
|
-
n1 = fs.lbar
|
1300
|
-
n2 = fs[<span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">lbar</span><span style="color:#710">'</span></span>]
|
1301
|
-
n1 == n2 <span style="color:#888">#=> true</span>
|
1302
|
-
left_bar = n1
|
1303
|
-
</pre></p>
|
1304
|
-
|
1305
|
-
|
1306
|
-
<p>Notice that you can traverse the file system hierarchy by simply calling methods on node objects. Alternatively, you can traverse by specifying an arbitrary sub-path (relative path) using the <code class="code">[]</code> operator on a node.</p>
|
1307
|
-
|
1308
|
-
|
1309
|
-
<p>Create a new temporary button:
|
1310
|
-
<pre class="code">
|
1311
|
-
b = left_bar.rumai_example <span style="color:#888"># path of new button</span>
|
1312
|
-
b.exist? <span style="color:#888">#=> false</span>
|
1313
|
-
b.create
|
1314
|
-
b.exist? <span style="color:#888">#=> true</span>
|
1315
|
-
</pre></p>
|
1316
|
-
|
1317
|
-
|
1318
|
-
<p>You should now see an empty button on the left-hand side of the wmii bar.</p>
|
1319
|
-
|
1320
|
-
|
1321
|
-
<p>Color the button black-on-white and label it as “hello world”:
|
1322
|
-
<pre class="code">
|
1323
|
-
content = <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">#000000 #ffffff #000000 hello world</span><span style="color:#710">"</span></span>
|
1324
|
-
b.write content
|
1325
|
-
b.read == content <span style="color:#888">#=> true</span>
|
1326
|
-
</pre></p>
|
1327
|
-
|
1328
|
-
|
1329
|
-
<p>Remove the temporary button:
|
1330
|
-
<pre class="code">
|
1331
|
-
b.remove
|
1332
|
-
b.exist? <span style="color:#888">#=> false</span>
|
1333
|
-
</pre></p></div>
|
1334
|
-
</div></p></div>
|
1335
|
-
</div>
|
1336
|
-
<div class="section">
|
1337
|
-
<h3 class="title">
|
1338
|
-
<a class="toc" id="Available-commands" href="#a-607016918">3.2.2</a> Available commands
|
1339
|
-
</h3>
|
1340
|
-
<div class="content">The following table lists all methods provided by the <code class="code"><span style="color:#036; font-weight:bold">Rumai</span></code> module and its subordinates. See the <a href="api/index.html">API documentation</a> for more extensive documentation.
|
1341
|
-
|
1342
|
-
|
1343
|
-
<table border="1">
|
1344
|
-
<tr>
|
1345
|
-
<th>Method declaration </th>
|
1346
|
-
<th>Description </th>
|
1347
|
-
</tr>
|
1348
|
-
<tr>
|
1349
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#client_ids()</span></code> </td>
|
1350
|
-
<td> <p>
|
1351
|
-
Returns the IDs of the current set of clients.
|
1352
|
-
</p>
|
1353
|
-
</td>
|
1354
|
-
</tr>
|
1355
|
-
<tr>
|
1356
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#curr_area()</span></code> </td>
|
1357
|
-
<td> </td>
|
1358
|
-
</tr>
|
1359
|
-
<tr>
|
1360
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#curr_client()</span></code> </td>
|
1361
|
-
<td> </td>
|
1362
|
-
</tr>
|
1363
|
-
<tr>
|
1364
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#curr_tag()</span></code> </td>
|
1365
|
-
<td> <p>
|
1366
|
-
Returns the name of the currently focused tag.
|
1367
|
-
</p>
|
1368
|
-
</td>
|
1369
|
-
</tr>
|
1370
|
-
<tr>
|
1371
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#curr_view()</span></code> </td>
|
1372
|
-
<td> </td>
|
1373
|
-
</tr>
|
1374
|
-
<tr>
|
1375
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#focus_area(aId)</span></code> </td>
|
1376
|
-
<td> </td>
|
1377
|
-
</tr>
|
1378
|
-
<tr>
|
1379
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#focus_client(aId)</span></code> </td>
|
1380
|
-
<td> </td>
|
1381
|
-
</tr>
|
1382
|
-
<tr>
|
1383
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#focus_view(aId)</span></code> </td>
|
1384
|
-
<td> </td>
|
1385
|
-
</tr>
|
1386
|
-
<tr>
|
1387
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#fs()</span></code> </td>
|
1388
|
-
<td> <p>
|
1389
|
-
Returns the root of IXP file system hierarchy.
|
1390
|
-
</p>
|
1391
|
-
</td>
|
1392
|
-
</tr>
|
1393
|
-
<tr>
|
1394
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#grouping()</span></code> </td>
|
1395
|
-
<td> <p>
|
1396
|
-
Returns a list of all grouped clients in the currently focused view. If
|
1397
|
-
there are no grouped clients, then the currently focused client is returned
|
1398
|
-
in the list.
|
1399
|
-
</p>
|
1400
|
-
</td>
|
1401
|
-
</tr>
|
1402
|
-
<tr>
|
1403
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#next_area()</span></code> </td>
|
1404
|
-
<td> </td>
|
1405
|
-
</tr>
|
1406
|
-
<tr>
|
1407
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#next_client()</span></code> </td>
|
1408
|
-
<td> </td>
|
1409
|
-
</tr>
|
1410
|
-
<tr>
|
1411
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#next_tag()</span></code> </td>
|
1412
|
-
<td> <p>
|
1413
|
-
Returns the name of the next tag.
|
1414
|
-
</p>
|
1415
|
-
</td>
|
1416
|
-
</tr>
|
1417
|
-
<tr>
|
1418
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#next_view()</span></code> </td>
|
1419
|
-
<td> </td>
|
1420
|
-
</tr>
|
1421
|
-
<tr>
|
1422
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#prev_area()</span></code> </td>
|
1423
|
-
<td> </td>
|
1424
|
-
</tr>
|
1425
|
-
<tr>
|
1426
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#prev_client()</span></code> </td>
|
1427
|
-
<td> </td>
|
1428
|
-
</tr>
|
1429
|
-
<tr>
|
1430
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#prev_tag()</span></code> </td>
|
1431
|
-
<td> <p>
|
1432
|
-
Returns the name of the previous tag.
|
1433
|
-
</p>
|
1434
|
-
</td>
|
1435
|
-
</tr>
|
1436
|
-
<tr>
|
1437
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#prev_view()</span></code> </td>
|
1438
|
-
<td> </td>
|
1439
|
-
</tr>
|
1440
|
-
<tr>
|
1441
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#tags()</span></code> </td>
|
1442
|
-
<td> <p>
|
1443
|
-
Returns the current set of tags.
|
1444
|
-
</p>
|
1445
|
-
</td>
|
1446
|
-
</tr>
|
1447
|
-
<tr>
|
1448
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span><span style="color:#888">#views()</span></code> </td>
|
1449
|
-
<td> <p>
|
1450
|
-
Returns the current set of views.
|
1451
|
-
</p>
|
1452
|
-
</td>
|
1453
|
-
</tr>
|
1454
|
-
<tr>
|
1455
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#<<(*aClients)</span></code> </td>
|
1456
|
-
<td> <p>
|
1457
|
-
Alias for push
|
1458
|
-
</p>
|
1459
|
-
</td>
|
1460
|
-
</tr>
|
1461
|
-
<tr>
|
1462
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#chain()</span></code> </td>
|
1463
|
-
<td> </td>
|
1464
|
-
</tr>
|
1465
|
-
<tr>
|
1466
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#client_ids()</span></code> </td>
|
1467
|
-
<td> <p>
|
1468
|
-
Returns the IDs of the clients in this area.
|
1469
|
-
</p>
|
1470
|
-
</td>
|
1471
|
-
</tr>
|
1472
|
-
<tr>
|
1473
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#column?()</span></code> </td>
|
1474
|
-
<td> <p>
|
1475
|
-
Checks if this area is a column in the managed area.
|
1476
|
-
</p>
|
1477
|
-
</td>
|
1478
|
-
</tr>
|
1479
|
-
<tr>
|
1480
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#concat(aArea)</span></code> </td>
|
1481
|
-
<td> <p>
|
1482
|
-
Concatenates the given area to the bottom of this area.
|
1483
|
-
</p>
|
1484
|
-
</td>
|
1485
|
-
</tr>
|
1486
|
-
<tr>
|
1487
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#each(&aBlock)</span></code> </td>
|
1488
|
-
<td> <p>
|
1489
|
-
Iterates through each client in this container.
|
1490
|
-
</p>
|
1491
|
-
</td>
|
1492
|
-
</tr>
|
1493
|
-
<tr>
|
1494
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#exist?()</span></code> </td>
|
1495
|
-
<td> <p>
|
1496
|
-
Checks if this object exists in the chain.
|
1497
|
-
</p>
|
1498
|
-
</td>
|
1499
|
-
</tr>
|
1500
|
-
<tr>
|
1501
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#float?()</span></code> </td>
|
1502
|
-
<td> <p>
|
1503
|
-
Checks if this area is the floating area.
|
1504
|
-
</p>
|
1505
|
-
</td>
|
1506
|
-
</tr>
|
1507
|
-
<tr>
|
1508
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#focus()</span></code> </td>
|
1509
|
-
<td> <p>
|
1510
|
-
Puts focus on this area.
|
1511
|
-
</p>
|
1512
|
-
</td>
|
1513
|
-
</tr>
|
1514
|
-
<tr>
|
1515
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#fringe()</span></code> </td>
|
1516
|
-
<td> <p>
|
1517
|
-
Returns the next area, which may or may not exist.
|
1518
|
-
</p>
|
1519
|
-
</td>
|
1520
|
-
</tr>
|
1521
|
-
<tr>
|
1522
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#import_client(c)</span></code> </td>
|
1523
|
-
<td> <p>
|
1524
|
-
Moves the given client into this area.
|
1525
|
-
</p>
|
1526
|
-
</td>
|
1527
|
-
</tr>
|
1528
|
-
<tr>
|
1529
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#insert(*aClients)</span></code> </td>
|
1530
|
-
<td> <p>
|
1531
|
-
Inserts the given clients after the currently focused client in this area.
|
1532
|
-
</p>
|
1533
|
-
</td>
|
1534
|
-
</tr>
|
1535
|
-
<tr>
|
1536
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#layout=(aMode)</span></code> </td>
|
1537
|
-
<td> <p>
|
1538
|
-
Sets the layout of clients in this column.
|
1539
|
-
</p>
|
1540
|
-
</td>
|
1541
|
-
</tr>
|
1542
|
-
<tr>
|
1543
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#length()</span></code> </td>
|
1544
|
-
<td> <p>
|
1545
|
-
Returns the number of clients in this area.
|
1546
|
-
</p>
|
1547
|
-
</td>
|
1548
|
-
</tr>
|
1549
|
-
<tr>
|
1550
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#length=(aMaxClients)</span></code> </td>
|
1551
|
-
<td> <p>
|
1552
|
-
Ensures that this area has at most the given number of clients. Areas to
|
1553
|
-
the right of this one serve as a buffer into which excess clients are
|
1554
|
-
evicted and from which deficit clients are imported.
|
1555
|
-
</p>
|
1556
|
-
</td>
|
1557
|
-
</tr>
|
1558
|
-
<tr>
|
1559
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#push(*aClients)</span></code> </td>
|
1560
|
-
<td> <p>
|
1561
|
-
Inserts the given clients at the bottom of this area.
|
1562
|
-
</p>
|
1563
|
-
</td>
|
1564
|
-
</tr>
|
1565
|
-
<tr>
|
1566
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span><span style="color:#888">#unshift(*aClients)</span></code> </td>
|
1567
|
-
<td> <p>
|
1568
|
-
Inserts the given clients at the top of this area.
|
1569
|
-
</p>
|
1570
|
-
</td>
|
1571
|
-
</tr>
|
1572
|
-
<tr>
|
1573
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span>::curr()</code> </td>
|
1574
|
-
<td> <p>
|
1575
|
-
Returns the currently focused area.
|
1576
|
-
</p>
|
1577
|
-
</td>
|
1578
|
-
</tr>
|
1579
|
-
<tr>
|
1580
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Area</span>::new(aAreaId, aView = <span style="color:#036; font-weight:bold">View</span>.curr)</code> </td>
|
1581
|
-
<td> <table border="1">
|
1582
|
-
<tr><td valign="top">aView:</td><td>the view which contains this area.
|
1583
|
-
|
1584
|
-
</td></tr>
|
1585
|
-
</table>
|
1586
|
-
</td>
|
1587
|
-
</tr>
|
1588
|
-
<tr>
|
1589
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Chain</span><span style="color:#888">#chain()</span></code> </td>
|
1590
|
-
<td> <p>
|
1591
|
-
Returns an array of objects related to this one.
|
1592
|
-
</p>
|
1593
|
-
</td>
|
1594
|
-
</tr>
|
1595
|
-
<tr>
|
1596
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Chain</span><span style="color:#888">#next()</span></code> </td>
|
1597
|
-
<td> <p>
|
1598
|
-
Returns the object after this one in the chain.
|
1599
|
-
</p>
|
1600
|
-
</td>
|
1601
|
-
</tr>
|
1602
|
-
<tr>
|
1603
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Chain</span><span style="color:#888">#prev()</span></code> </td>
|
1604
|
-
<td> <p>
|
1605
|
-
Returns the object before this one in the chain.
|
1606
|
-
</p>
|
1607
|
-
</td>
|
1608
|
-
</tr>
|
1609
|
-
<tr>
|
1610
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Chain</span><span style="color:#888">#sibling(aOffset)</span></code> </td>
|
1611
|
-
<td> </td>
|
1612
|
-
</tr>
|
1613
|
-
<tr>
|
1614
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#area(aView = View.curr)</span></code> </td>
|
1615
|
-
<td> <p>
|
1616
|
-
Returns the area that contains this client within the given view.
|
1617
|
-
</p>
|
1618
|
-
</td>
|
1619
|
-
</tr>
|
1620
|
-
<tr>
|
1621
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#area_to_id(aAreaOrId)</span></code> </td>
|
1622
|
-
<td> </td>
|
1623
|
-
</tr>
|
1624
|
-
<tr>
|
1625
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#chain()</span></code> </td>
|
1626
|
-
<td> <p>
|
1627
|
-
Returns a list of clients in the current view.
|
1628
|
-
</p>
|
1629
|
-
</td>
|
1630
|
-
</tr>
|
1631
|
-
<tr>
|
1632
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#focus(aView = nil)</span></code> </td>
|
1633
|
-
<td> <p>
|
1634
|
-
Focuses this client within the given view.
|
1635
|
-
</p>
|
1636
|
-
</td>
|
1637
|
-
</tr>
|
1638
|
-
<tr>
|
1639
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#group()</span></code> </td>
|
1640
|
-
<td> <p>
|
1641
|
-
Adds this client to the current grouping.
|
1642
|
-
</p>
|
1643
|
-
</td>
|
1644
|
-
</tr>
|
1645
|
-
<tr>
|
1646
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#group?()</span></code> </td>
|
1647
|
-
<td> <p>
|
1648
|
-
Checks if this client is included in the current grouping.
|
1649
|
-
</p>
|
1650
|
-
</td>
|
1651
|
-
</tr>
|
1652
|
-
<tr>
|
1653
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#kill()</span></code> </td>
|
1654
|
-
<td> <p>
|
1655
|
-
Terminates this client nicely (requests this window to be closed).
|
1656
|
-
</p>
|
1657
|
-
</td>
|
1658
|
-
</tr>
|
1659
|
-
<tr>
|
1660
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#send(aAreaOrId, aView = View.curr)</span></code> </td>
|
1661
|
-
<td> <p>
|
1662
|
-
Sends this client to the given destination within the given view.
|
1663
|
-
</p>
|
1664
|
-
</td>
|
1665
|
-
</tr>
|
1666
|
-
<tr>
|
1667
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#swap(aAreaOrId, aView = View.curr)</span></code> </td>
|
1668
|
-
<td> <p>
|
1669
|
-
Swaps this client with the given destination within the given view.
|
1670
|
-
</p>
|
1671
|
-
</td>
|
1672
|
-
</tr>
|
1673
|
-
<tr>
|
1674
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#tag(*aTags)</span></code> </td>
|
1675
|
-
<td> <p>
|
1676
|
-
Adds the given tags to this client.
|
1677
|
-
</p>
|
1678
|
-
</td>
|
1679
|
-
</tr>
|
1680
|
-
<tr>
|
1681
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#tags()</span></code> </td>
|
1682
|
-
<td> <p>
|
1683
|
-
Returns the tags associated with this client.
|
1684
|
-
</p>
|
1685
|
-
</td>
|
1686
|
-
</tr>
|
1687
|
-
<tr>
|
1688
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#tags=(*aTags)</span></code> </td>
|
1689
|
-
<td> <p>
|
1690
|
-
Modifies the tags associated with this client.
|
1691
|
-
</p>
|
1692
|
-
</td>
|
1693
|
-
</tr>
|
1694
|
-
<tr>
|
1695
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#toggle_group()</span></code> </td>
|
1696
|
-
<td> <p>
|
1697
|
-
Toggles the presence of this client in the current grouping.
|
1698
|
-
</p>
|
1699
|
-
</td>
|
1700
|
-
</tr>
|
1701
|
-
<tr>
|
1702
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#ungroup()</span></code> </td>
|
1703
|
-
<td> <p>
|
1704
|
-
Removes this client to the current grouping.
|
1705
|
-
</p>
|
1706
|
-
</td>
|
1707
|
-
</tr>
|
1708
|
-
<tr>
|
1709
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#untag(*aTags)</span></code> </td>
|
1710
|
-
<td> <p>
|
1711
|
-
Removes the given tags from this client.
|
1712
|
-
</p>
|
1713
|
-
</td>
|
1714
|
-
</tr>
|
1715
|
-
<tr>
|
1716
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#views()</span></code> </td>
|
1717
|
-
<td> <p>
|
1718
|
-
Returns the views that contain this client.
|
1719
|
-
</p>
|
1720
|
-
</td>
|
1721
|
-
</tr>
|
1722
|
-
<tr>
|
1723
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span><span style="color:#888">#with_tags(&aBlock)</span></code> </td>
|
1724
|
-
<td> <p>
|
1725
|
-
Evaluates the given block within the context of this client‘s list of
|
1726
|
-
tags.
|
1727
|
-
</p>
|
1728
|
-
</td>
|
1729
|
-
</tr>
|
1730
|
-
<tr>
|
1731
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span>::curr()</code> </td>
|
1732
|
-
<td> <p>
|
1733
|
-
Returns the currently focused client.
|
1734
|
-
</p>
|
1735
|
-
</td>
|
1736
|
-
</tr>
|
1737
|
-
<tr>
|
1738
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Client</span>::new(aClientId)</code> </td>
|
1739
|
-
<td> </td>
|
1740
|
-
</tr>
|
1741
|
-
<tr>
|
1742
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">ClientContainer</span><span style="color:#888">#client_ids()</span></code> </td>
|
1743
|
-
<td> <p>
|
1744
|
-
Returns the IDs of the clients in this container.
|
1745
|
-
</p>
|
1746
|
-
</td>
|
1747
|
-
</tr>
|
1748
|
-
<tr>
|
1749
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">ClientContainer</span><span style="color:#888">#clients()</span></code> </td>
|
1750
|
-
<td> <p>
|
1751
|
-
Returns the clients contained in this container.
|
1752
|
-
</p>
|
1753
|
-
</td>
|
1754
|
-
</tr>
|
1755
|
-
<tr>
|
1756
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">ClientContainer</span><span style="color:#888">#grouping()</span></code> </td>
|
1757
|
-
<td> <p>
|
1758
|
-
Returns all grouped clients in this container.
|
1759
|
-
</p>
|
1760
|
-
</td>
|
1761
|
-
</tr>
|
1762
|
-
<tr>
|
1763
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#[](aSubPath)</span></code> </td>
|
1764
|
-
<td> <p>
|
1765
|
-
Returns the given sub-path as a Node object.
|
1766
|
-
</p>
|
1767
|
-
</td>
|
1768
|
-
</tr>
|
1769
|
-
<tr>
|
1770
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#children()</span></code> </td>
|
1771
|
-
<td> <p>
|
1772
|
-
Returns all child nodes of this node.
|
1773
|
-
</p>
|
1774
|
-
</td>
|
1775
|
-
</tr>
|
1776
|
-
<tr>
|
1777
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#clear()</span></code> </td>
|
1778
|
-
<td> <p>
|
1779
|
-
Deletes all child nodes.
|
1780
|
-
</p>
|
1781
|
-
</td>
|
1782
|
-
</tr>
|
1783
|
-
<tr>
|
1784
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#create(*aArgs)</span></code> </td>
|
1785
|
-
<td> <p>
|
1786
|
-
Creates a file corresponding to this node on the IXP server. See
|
1787
|
-
Rumai::IXP::Client#create for details.
|
1788
|
-
</p>
|
1789
|
-
</td>
|
1790
|
-
</tr>
|
1791
|
-
<tr>
|
1792
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#directory?()</span></code> </td>
|
1793
|
-
<td> <p>
|
1794
|
-
Tests if this node is a directory.
|
1795
|
-
</p>
|
1796
|
-
</td>
|
1797
|
-
</tr>
|
1798
|
-
<tr>
|
1799
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#each(&aBlock)</span></code> </td>
|
1800
|
-
<td> <p>
|
1801
|
-
Iterates through each child of this directory.
|
1802
|
-
</p>
|
1803
|
-
</td>
|
1804
|
-
</tr>
|
1805
|
-
<tr>
|
1806
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#each_line(&aBlock) {|line| ... }</span></code> </td>
|
1807
|
-
<td> <p>
|
1808
|
-
Invokes the given block for every line in the content of this node.
|
1809
|
-
</p>
|
1810
|
-
</td>
|
1811
|
-
</tr>
|
1812
|
-
<tr>
|
1813
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#entries()</span></code> </td>
|
1814
|
-
<td> <p>
|
1815
|
-
Returns the names of all files in this directory.
|
1816
|
-
</p>
|
1817
|
-
</td>
|
1818
|
-
</tr>
|
1819
|
-
<tr>
|
1820
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#exist?()</span></code> </td>
|
1821
|
-
<td> <p>
|
1822
|
-
Tests if this node exists on the IXP server.
|
1823
|
-
</p>
|
1824
|
-
</td>
|
1825
|
-
</tr>
|
1826
|
-
<tr>
|
1827
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#method_missing(aMeth, *aArgs)</span></code> </td>
|
1828
|
-
<td> <p>
|
1829
|
-
Provides access to child nodes through method calls.
|
1830
|
-
</p>
|
1831
|
-
</td>
|
1832
|
-
</tr>
|
1833
|
-
<tr>
|
1834
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#open(aMode = 'r', &aBlock)</span></code> </td>
|
1835
|
-
<td> <p>
|
1836
|
-
Opens this node for I/O access. See Rumai::IXP::Client#open for details.
|
1837
|
-
</p>
|
1838
|
-
</td>
|
1839
|
-
</tr>
|
1840
|
-
<tr>
|
1841
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#parent()</span></code> </td>
|
1842
|
-
<td> <p>
|
1843
|
-
Returns the parent node of this node.
|
1844
|
-
</p>
|
1845
|
-
</td>
|
1846
|
-
</tr>
|
1847
|
-
<tr>
|
1848
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#read(*aArgs)</span></code> </td>
|
1849
|
-
<td> <p>
|
1850
|
-
Returns the entire content of this node. See Rumai::IXP::Client#read for
|
1851
|
-
details.
|
1852
|
-
</p>
|
1853
|
-
</td>
|
1854
|
-
</tr>
|
1855
|
-
<tr>
|
1856
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#remove()</span></code> </td>
|
1857
|
-
<td> <p>
|
1858
|
-
Deletes the file corresponding to this node on the IXP server.
|
1859
|
-
</p>
|
1860
|
-
</td>
|
1861
|
-
</tr>
|
1862
|
-
<tr>
|
1863
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#stat()</span></code> </td>
|
1864
|
-
<td> <p>
|
1865
|
-
Returns file statistics about this node. See Rumai::IXP::Client#stat for
|
1866
|
-
details.
|
1867
|
-
</p>
|
1868
|
-
</td>
|
1869
|
-
</tr>
|
1870
|
-
<tr>
|
1871
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span><span style="color:#888">#write(aContent)</span></code> </td>
|
1872
|
-
<td> <p>
|
1873
|
-
Writes the given content to this node.
|
1874
|
-
</p>
|
1875
|
-
</td>
|
1876
|
-
</tr>
|
1877
|
-
<tr>
|
1878
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">Node</span>::new(aPath)</code> </td>
|
1879
|
-
<td> </td>
|
1880
|
-
</tr>
|
1881
|
-
<tr>
|
1882
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#area_ids()</span></code> </td>
|
1883
|
-
<td> <p>
|
1884
|
-
Returns the IDs of all areas in this view.
|
1885
|
-
</p>
|
1886
|
-
</td>
|
1887
|
-
</tr>
|
1888
|
-
<tr>
|
1889
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#area_of_client(aClientOrId)</span></code> </td>
|
1890
|
-
<td> <p>
|
1891
|
-
Returns the area which contains the given client in this view.
|
1892
|
-
</p>
|
1893
|
-
</td>
|
1894
|
-
</tr>
|
1895
|
-
<tr>
|
1896
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#areas()</span></code> </td>
|
1897
|
-
<td> <p>
|
1898
|
-
Returns all areas in this view.
|
1899
|
-
</p>
|
1900
|
-
</td>
|
1901
|
-
</tr>
|
1902
|
-
<tr>
|
1903
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#arrange_as_larswm()</span></code> </td>
|
1904
|
-
<td> <p>
|
1905
|
-
Arranges the clients in this view, while maintaining their relative order,
|
1906
|
-
in the tiling fashion of LarsWM. Only the first client in the primary
|
1907
|
-
column is kept; all others are evicted to the <b>top</b> of the secondary
|
1908
|
-
column. Any subsequent columns are squeezed into the <b>bottom</b> of the
|
1909
|
-
secondary column.
|
1910
|
-
</p>
|
1911
|
-
</td>
|
1912
|
-
</tr>
|
1913
|
-
<tr>
|
1914
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#arrange_in_diamond()</span></code> </td>
|
1915
|
-
<td> <p>
|
1916
|
-
Arranges the clients in this view, while maintaining their relative order,
|
1917
|
-
in a (at best) equilateral triangle. However, the resulting arrangement
|
1918
|
-
appears like a diamond because wmii does not waste screen space.
|
1919
|
-
</p>
|
1920
|
-
</td>
|
1921
|
-
</tr>
|
1922
|
-
<tr>
|
1923
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#arrange_in_grid(aMaxClientsPerColumn = nil)</span></code> </td>
|
1924
|
-
<td> <p>
|
1925
|
-
Arranges the clients in this view, while maintaining their relative order,
|
1926
|
-
in a (at best) square grid.
|
1927
|
-
</p>
|
1928
|
-
</td>
|
1929
|
-
</tr>
|
1930
|
-
<tr>
|
1931
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#chain()</span></code> </td>
|
1932
|
-
<td> </td>
|
1933
|
-
</tr>
|
1934
|
-
<tr>
|
1935
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#client_ids(aAreaId = '\S+')</span></code> </td>
|
1936
|
-
<td> <p>
|
1937
|
-
Returns the IDs of the clients contained in the given area within this
|
1938
|
-
view.
|
1939
|
-
</p>
|
1940
|
-
</td>
|
1941
|
-
</tr>
|
1942
|
-
<tr>
|
1943
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#columns()</span></code> </td>
|
1944
|
-
<td> <p>
|
1945
|
-
Returns all columns (managed areas) in this view.
|
1946
|
-
</p>
|
1947
|
-
</td>
|
1948
|
-
</tr>
|
1949
|
-
<tr>
|
1950
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#each(&aBlock)</span></code> </td>
|
1951
|
-
<td> <p>
|
1952
|
-
Iterates through each area in this view.
|
1953
|
-
</p>
|
1954
|
-
</td>
|
1955
|
-
</tr>
|
1956
|
-
<tr>
|
1957
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#each_column(aStartingColumnId = 1) {|a| ... }</span></code> </td>
|
1958
|
-
<td> <p>
|
1959
|
-
Resiliently iterates through possibly destructive changes to each column.
|
1960
|
-
That is, if the given block creates new columns, then those will also be
|
1961
|
-
processed in the iteration.
|
1962
|
-
</p>
|
1963
|
-
</td>
|
1964
|
-
</tr>
|
1965
|
-
<tr>
|
1966
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#floater()</span></code> </td>
|
1967
|
-
<td> <p>
|
1968
|
-
Returns the floating area of this view.
|
1969
|
-
</p>
|
1970
|
-
</td>
|
1971
|
-
</tr>
|
1972
|
-
<tr>
|
1973
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#focus()</span></code> </td>
|
1974
|
-
<td> <p>
|
1975
|
-
Focuses this view.
|
1976
|
-
</p>
|
1977
|
-
</td>
|
1978
|
-
</tr>
|
1979
|
-
<tr>
|
1980
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#manifest()</span></code> </td>
|
1981
|
-
<td> <p>
|
1982
|
-
Returns the manifest of all areas and clients in this view.
|
1983
|
-
</p>
|
1984
|
-
</td>
|
1985
|
-
</tr>
|
1986
|
-
<tr>
|
1987
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#num_managed_clients()</span></code> </td>
|
1988
|
-
<td> <p>
|
1989
|
-
Returns the number of clients in the non-floating areas of this view.
|
1990
|
-
</p>
|
1991
|
-
</td>
|
1992
|
-
</tr>
|
1993
|
-
<tr>
|
1994
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span><span style="color:#888">#squeeze(aAreas)</span></code> </td>
|
1995
|
-
<td> <p>
|
1996
|
-
Smashes the given list of areas into the first one. The relative ordering
|
1997
|
-
of clients is preserved.
|
1998
|
-
</p>
|
1999
|
-
</td>
|
2000
|
-
</tr>
|
2001
|
-
<tr>
|
2002
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span>::curr()</code> </td>
|
2003
|
-
<td> <p>
|
2004
|
-
Returns the currently focused view.
|
2005
|
-
</p>
|
2006
|
-
</td>
|
2007
|
-
</tr>
|
2008
|
-
<tr>
|
2009
|
-
<td> <code class="code"><span style="color:#036; font-weight:bold">Rumai</span>::<span style="color:#036; font-weight:bold">View</span>::new(aViewId)</code> </td>
|
2010
|
-
<td> </td>
|
2011
|
-
</tr>
|
2012
|
-
</table></div>
|
2013
|
-
</div></p></div>
|
2014
|
-
</div>
|
2015
|
-
<div class="section">
|
2016
|
-
<h2 class="title">
|
2017
|
-
<a class="toc" id="wmiirc" href="#a-607024218">3.3</a> Scripting your wmiirc
|
2018
|
-
</h2>
|
2019
|
-
<div class="content"><p>One important application of Rumai is the support of Ruby-based <tt>wmiirc</tt> configuration files. For a solid example of such application, take a look at my personal <tt>wmiirc</tt> which uses Rumai extensively:</p>
|
2020
|
-
|
2021
|
-
|
2022
|
-
<pre>darcs get http://snk.tuxfamily.org/src/wmiirc</pre>
|
2023
|
-
|
2024
|
-
|
2025
|
-
<p>Alternatively, you can <a href="http://snk.tuxfamily.org/src/wmiirc">browse the contents of the above repository</a> in your web browser.</p></div>
|
2026
|
-
</div></div>
|
2027
|
-
</div></div>
|
2028
|
-
|
2029
|
-
|
2030
|
-
<br style="display: none"/>
|
2031
|
-
<hr style="display: none"/>
|
2032
|
-
<br style="display: none"/>
|
2033
|
-
|
2034
|
-
|
2035
|
-
<div id="footer">
|
2036
|
-
|
2037
|
-
Generated on Mon Feb 04 22:22:40 -0800 2008 by <a href="http://gerbil.rubyforge.org">Gerbil</a> 2.0.0.
|
2038
|
-
|
2039
|
-
|
2040
|
-
</div>
|
2041
|
-
|
2042
|
-
</body>
|
2043
|
-
</html>
|