rumai 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/doc/api/classes/Integer.src/M000002.html +1 -1
- data/doc/api/classes/Rumai.html +1 -1
- data/doc/api/classes/Rumai.src/M000015.html +1 -1
- data/doc/api/classes/Rumai.src/M000016.html +1 -1
- data/doc/api/classes/Rumai.src/M000017.html +1 -1
- data/doc/api/classes/Rumai.src/M000018.html +1 -1
- data/doc/api/classes/Rumai.src/M000019.html +1 -1
- data/doc/api/classes/Rumai.src/M000020.html +1 -1
- data/doc/api/classes/Rumai.src/M000021.html +1 -1
- data/doc/api/classes/Rumai.src/M000022.html +1 -1
- data/doc/api/classes/Rumai.src/M000023.html +1 -1
- data/doc/api/classes/Rumai.src/M000024.html +1 -1
- data/doc/api/classes/Rumai.src/M000025.html +1 -1
- data/doc/api/classes/Rumai.src/M000026.html +1 -1
- data/doc/api/classes/Rumai/Area.html +87 -87
- data/doc/api/classes/Rumai/Area.src/{M000091.html → M000079.html} +5 -8
- data/doc/api/classes/Rumai/Area.src/M000080.html +4 -5
- data/doc/api/classes/Rumai/Area.src/M000081.html +3 -3
- data/doc/api/classes/Rumai/Area.src/M000082.html +5 -5
- data/doc/api/classes/Rumai/Area.src/M000083.html +3 -3
- data/doc/api/classes/Rumai/Area.src/M000084.html +3 -3
- data/doc/api/classes/Rumai/Area.src/M000085.html +4 -4
- data/doc/api/classes/Rumai/Area.src/M000086.html +4 -4
- data/doc/api/classes/Rumai/Area.src/M000087.html +4 -4
- data/doc/api/classes/Rumai/Area.src/M000088.html +4 -4
- data/doc/api/classes/Rumai/Area.src/M000089.html +4 -4
- data/doc/api/classes/Rumai/Area.src/M000090.html +7 -3
- data/doc/api/classes/Rumai/Area.src/M000092.html +23 -0
- data/doc/api/classes/Rumai/Area.src/M000093.html +8 -3
- data/doc/api/classes/Rumai/Area.src/M000094.html +4 -14
- data/doc/api/classes/Rumai/Area.src/M000095.html +17 -4
- data/doc/api/classes/Rumai/Chain.html +18 -18
- data/doc/api/classes/Rumai/Chain.src/{M000079.html → M000076.html} +4 -4
- data/doc/api/classes/Rumai/Chain.src/M000077.html +4 -4
- data/doc/api/classes/Rumai/Chain.src/M000078.html +4 -4
- data/doc/api/classes/Rumai/Client.html +48 -30
- data/doc/api/classes/Rumai/Client.src/M000113.html +18 -0
- data/doc/api/classes/Rumai/Client.src/M000114.html +4 -4
- data/doc/api/classes/Rumai/Client.src/M000115.html +5 -5
- data/doc/api/classes/Rumai/Client.src/M000116.html +26 -5
- data/doc/api/classes/Rumai/Client.src/M000117.html +5 -25
- data/doc/api/classes/Rumai/Client.src/M000118.html +4 -13
- data/doc/api/classes/Rumai/Client.src/M000119.html +4 -5
- data/doc/api/classes/Rumai/Client.src/M000120.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000121.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000122.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000123.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000124.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000125.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000126.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000127.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000128.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000129.html +1 -1
- data/doc/api/classes/Rumai/Client.src/M000130.html +1 -1
- data/doc/api/classes/Rumai/ClientContainer.src/M000027.html +1 -1
- data/doc/api/classes/Rumai/ClientContainer.src/M000028.html +1 -1
- data/doc/api/classes/Rumai/ClientContainer.src/M000029.html +1 -1
- data/doc/api/classes/Rumai/IXP/Agent.html +77 -77
- data/doc/api/classes/Rumai/IXP/Agent.src/M000044.html +53 -0
- data/doc/api/classes/Rumai/IXP/Agent.src/M000045.html +36 -0
- data/doc/api/classes/Rumai/IXP/Agent.src/M000046.html +20 -28
- data/doc/api/classes/Rumai/IXP/Agent.src/M000047.html +5 -29
- data/doc/api/classes/Rumai/IXP/Agent.src/M000048.html +7 -24
- data/doc/api/classes/Rumai/IXP/Agent.src/M000049.html +5 -5
- data/doc/api/classes/Rumai/IXP/Agent.src/M000050.html +18 -7
- data/doc/api/classes/Rumai/IXP/Agent.src/M000051.html +5 -6
- data/doc/api/classes/Rumai/IXP/Agent.src/M000052.html +4 -19
- data/doc/api/classes/Rumai/IXP/Agent.src/M000053.html +7 -5
- data/doc/api/classes/Rumai/IXP/Agent.src/M000054.html +6 -4
- data/doc/api/classes/Rumai/IXP/Agent.src/M000055.html +6 -7
- data/doc/api/classes/Rumai/IXP/Agent.src/M000056.html +8 -6
- data/doc/api/classes/Rumai/IXP/Agent.src/M000057.html +9 -6
- data/doc/api/classes/Rumai/IXP/Agent.src/M000058.html +5 -8
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.html +93 -35
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000060.html +23 -0
- data/doc/api/classes/Rumai/IXP/{Struct/Field.src/M000040.html → Agent/FidStream.src/M000061.html} +5 -4
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000062.html +8 -8
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000063.html +4 -7
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000064.html +12 -9
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000065.html +21 -11
- data/doc/api/classes/Rumai/IXP/Agent/MODES.html +5 -5
- data/doc/api/classes/Rumai/IXP/Agent/MODES.src/{M000061.html → M000059.html} +0 -0
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.html +16 -16
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000067.html +22 -0
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000068.html +21 -8
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000069.html +4 -18
- data/doc/api/classes/Rumai/IXP/Fcall.html +21 -21
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000070.html +20 -0
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000071.html +11 -6
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000072.html +4 -11
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000073.html +3 -3
- data/doc/api/classes/Rumai/IXP/Stat.html +5 -5
- data/doc/api/classes/Rumai/IXP/Stat.src/{M000076.html → M000075.html} +1 -1
- data/doc/api/classes/Rumai/IXP/Stream.html +5 -5
- data/doc/api/classes/Rumai/IXP/Stream.src/{M000045.html → M000043.html} +1 -2
- data/doc/api/classes/Rumai/IXP/Struct.html +11 -47
- data/doc/api/classes/Rumai/IXP/Struct.src/M000030.html +1 -1
- data/doc/api/classes/Rumai/IXP/Struct.src/M000031.html +4 -4
- data/doc/api/classes/Rumai/IXP/Struct.src/M000032.html +5 -3
- data/doc/api/classes/Rumai/IXP/Struct.src/M000033.html +43 -4
- data/doc/api/classes/Rumai/IXP/Struct/Field.html +34 -42
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000034.html +21 -0
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/{M000041.html → M000035.html} +7 -4
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000036.html +6 -7
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000037.html +13 -5
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000038.html +4 -6
- data/doc/api/classes/Rumai/IXP/Struct/Field.src/M000039.html +4 -15
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.html +12 -12
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/{M000043.html → M000041.html} +3 -3
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/{M000044.html → M000042.html} +4 -4
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounterField.html +6 -6
- data/doc/api/classes/Rumai/IXP/Struct/Field/CounterField.src/{M000042.html → M000040.html} +3 -3
- data/doc/api/classes/Rumai/IXP/Terror.html +5 -5
- data/doc/api/classes/Rumai/IXP/Terror.src/{M000075.html → M000074.html} +1 -1
- data/doc/api/classes/Rumai/Node.html +88 -88
- data/doc/api/classes/Rumai/Node.src/M000096.html +18 -0
- data/doc/api/classes/Rumai/Node.src/M000097.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000098.html +8 -4
- data/doc/api/classes/Rumai/Node.src/M000099.html +4 -8
- data/doc/api/classes/Rumai/Node.src/M000100.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000101.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000102.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000103.html +8 -4
- data/doc/api/classes/Rumai/Node.src/M000104.html +4 -8
- data/doc/api/classes/Rumai/Node.src/M000105.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000106.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000107.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000108.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000109.html +4 -4
- data/doc/api/classes/Rumai/Node.src/M000110.html +5 -5
- data/doc/api/classes/Rumai/Node.src/M000111.html +7 -5
- data/doc/api/classes/Rumai/Node.src/M000112.html +12 -5
- data/doc/api/classes/Rumai/View.html +2 -2
- data/doc/api/classes/Rumai/View.src/M000131.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000132.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000133.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000134.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000135.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000136.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000137.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000138.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000139.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000140.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000141.html +3 -3
- data/doc/api/classes/Rumai/View.src/M000142.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000143.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000144.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000145.html +1 -1
- data/doc/api/classes/Rumai/View.src/M000146.html +1 -1
- data/doc/api/classes/String.src/M000005.html +1 -1
- data/doc/api/classes/String.src/M000006.html +2 -3
- data/doc/api/classes/Time.src/M000003.html +1 -1
- data/doc/api/classes/Time.src/M000004.html +1 -1
- data/doc/api/created.rid +1 -1
- data/doc/api/files/lib/rumai/fs_rb.html +1 -1
- data/doc/api/files/lib/rumai/ixp/message_rb.html +1 -1
- data/doc/api/files/lib/rumai/ixp/transport_rb.html +1 -1
- data/doc/api/files/lib/rumai/nfo_rb.html +1 -1
- data/doc/api/files/lib/rumai/wm_rb.html +1 -1
- data/doc/api/fr_method_index.html +91 -91
- data/doc/guide.erb +2 -2
- data/doc/guide.html +49 -41
- data/lib/rumai/fs.rb +3 -3
- data/lib/rumai/ixp/message.rb +19 -36
- data/lib/rumai/ixp/transport.rb +98 -85
- data/lib/rumai/nfo.rb +2 -2
- data/lib/rumai/wm.rb +15 -25
- metadata +24 -25
- data/doc/api/classes/Rumai/Area.src/M000096.html +0 -31
- data/doc/api/classes/Rumai/IXP/Agent.src/M000059.html +0 -23
- data/doc/api/classes/Rumai/IXP/Agent.src/M000060.html +0 -19
- data/doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000066.html +0 -36
- data/doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000070.html +0 -20
- data/doc/api/classes/Rumai/IXP/Fcall.src/M000074.html +0 -18
- data/doc/api/classes/Rumai/IXP/Struct.src/M000034.html +0 -20
- data/doc/api/classes/Rumai/IXP/Struct.src/M000035.html +0 -57
- data/doc/api/classes/Rumai/Node.src/M000113.html +0 -27
- data/doc/index.html +0 -2035
data/lib/rumai/ixp/transport.rb
CHANGED
|
@@ -14,15 +14,21 @@ module Rumai
|
|
|
14
14
|
attr_reader :msize
|
|
15
15
|
|
|
16
16
|
def initialize aStream
|
|
17
|
-
@stream
|
|
18
|
-
@sendLock
|
|
19
|
-
@
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
@stream = aStream
|
|
18
|
+
@sendLock = Mutex.new
|
|
19
|
+
@recvBays = Hash.new {|h,k| h[k] = Queue.new } # tag => Queue(message)
|
|
20
|
+
|
|
21
|
+
# background thread which continuously receives
|
|
22
|
+
# and dispatches messages from the 9P2000 server
|
|
23
|
+
Thread.new do
|
|
24
|
+
while true
|
|
25
|
+
msg = Fcall.from_9p @stream
|
|
26
|
+
@recvBays[msg.tag] << msg
|
|
27
|
+
end
|
|
28
|
+
end.priority = -1
|
|
23
29
|
|
|
24
|
-
@
|
|
25
|
-
@
|
|
30
|
+
@tagPool = RangedPool.new(0...BYTE2_MASK)
|
|
31
|
+
@fidPool = RangedPool.new(0...BYTE4_MASK)
|
|
26
32
|
|
|
27
33
|
# establish connection with 9P2000 server
|
|
28
34
|
req = Tversion.new(
|
|
@@ -48,7 +54,8 @@ module Rumai
|
|
|
48
54
|
|
|
49
55
|
# A finite, thread-safe pool of range members.
|
|
50
56
|
class RangedPool
|
|
51
|
-
# how many new members should be added
|
|
57
|
+
# how many new members should be added
|
|
58
|
+
# to the pool when the pool is empty?
|
|
52
59
|
FILL_RATE = 10
|
|
53
60
|
|
|
54
61
|
def initialize aRange
|
|
@@ -56,35 +63,36 @@ module Rumai
|
|
|
56
63
|
@lim = aRange.last
|
|
57
64
|
@lim = @lim.succ unless aRange.exclude_end?
|
|
58
65
|
|
|
59
|
-
@pool =
|
|
60
|
-
@lock = Mutex.new
|
|
66
|
+
@pool = Queue.new
|
|
61
67
|
end
|
|
62
68
|
|
|
63
69
|
# Returns an unoccupied range member from the pool.
|
|
64
70
|
def obtain
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
begin
|
|
72
|
+
@pool.deq true
|
|
73
|
+
|
|
74
|
+
rescue ThreadError
|
|
75
|
+
# pool is empty, so fill it
|
|
76
|
+
FILL_RATE.times do
|
|
77
|
+
if @pos != @lim
|
|
78
|
+
@pool << @pos
|
|
79
|
+
@pos = @pos.succ
|
|
80
|
+
else
|
|
81
|
+
# range is exhausted, so give other threads
|
|
82
|
+
# a chance to fill the pool before retrying
|
|
83
|
+
Thread.pass
|
|
84
|
+
break
|
|
75
85
|
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
86
|
+
end
|
|
78
87
|
|
|
79
|
-
|
|
88
|
+
retry
|
|
89
|
+
end
|
|
80
90
|
end
|
|
81
91
|
|
|
82
92
|
# Marks the given member as being unoccupied so
|
|
83
93
|
# that it may be occupied again in the future.
|
|
84
94
|
def release aMember
|
|
85
|
-
@
|
|
86
|
-
@pool.push aMember
|
|
87
|
-
end
|
|
95
|
+
@pool << aMember
|
|
88
96
|
end
|
|
89
97
|
end
|
|
90
98
|
|
|
@@ -94,32 +102,24 @@ module Rumai
|
|
|
94
102
|
# worrying about the details of tag collisions and thread safety.
|
|
95
103
|
#
|
|
96
104
|
def talk aRequest
|
|
97
|
-
# send the
|
|
98
|
-
|
|
105
|
+
# send the request
|
|
106
|
+
tag = @tagPool.obtain
|
|
107
|
+
bay = @recvBays[tag]
|
|
99
108
|
|
|
109
|
+
aRequest.tag = tag
|
|
110
|
+
output = aRequest.to_9p
|
|
100
111
|
@sendLock.synchronize do
|
|
101
|
-
@stream <<
|
|
112
|
+
@stream << output
|
|
102
113
|
end
|
|
103
114
|
|
|
104
115
|
# receive the response
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if response = @recvLock.synchronize { @responses.delete ticket }
|
|
108
|
-
@tagPool.release ticket
|
|
109
|
-
|
|
110
|
-
if response.is_a? Rerror
|
|
111
|
-
raise Error, "#{response.ename.inspect} in response to #{aRequest.inspect}"
|
|
112
|
-
else
|
|
113
|
-
return response
|
|
114
|
-
end
|
|
116
|
+
response = bay.shift
|
|
117
|
+
@tagPool.release tag
|
|
115
118
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
@responses[response.tag] = response
|
|
121
|
-
end
|
|
122
|
-
end
|
|
119
|
+
if response.is_a? Rerror
|
|
120
|
+
raise Error, "#{response.ename.inspect} in response to #{aRequest.inspect}"
|
|
121
|
+
else
|
|
122
|
+
return response
|
|
123
123
|
end
|
|
124
124
|
end
|
|
125
125
|
|
|
@@ -170,8 +170,15 @@ module Rumai
|
|
|
170
170
|
end
|
|
171
171
|
|
|
172
172
|
# Encapsulates I/O access over a file handle (fid).
|
|
173
|
+
# NOTE that this class is NOT thread-safe.
|
|
173
174
|
class FidStream
|
|
174
|
-
attr_reader :fid
|
|
175
|
+
attr_reader :fid, :stat
|
|
176
|
+
|
|
177
|
+
attr_reader :eof
|
|
178
|
+
alias eof? eof
|
|
179
|
+
|
|
180
|
+
attr_accessor :pos
|
|
181
|
+
alias tell pos
|
|
175
182
|
|
|
176
183
|
def initialize aAgent, aPathFid, aMessageSize
|
|
177
184
|
@agent = aAgent
|
|
@@ -179,6 +186,13 @@ module Rumai
|
|
|
179
186
|
@msize = aMessageSize
|
|
180
187
|
@stat = @agent.stat_fid @fid
|
|
181
188
|
@closed = false
|
|
189
|
+
rewind
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Rewinds the stream to the beginning.
|
|
193
|
+
def rewind
|
|
194
|
+
@pos = 0
|
|
195
|
+
@eof = false
|
|
182
196
|
end
|
|
183
197
|
|
|
184
198
|
# Closes this stream.
|
|
@@ -186,25 +200,41 @@ module Rumai
|
|
|
186
200
|
unless @closed
|
|
187
201
|
@agent.clunk @fid
|
|
188
202
|
@closed = true
|
|
203
|
+
@eof = true
|
|
189
204
|
end
|
|
190
205
|
end
|
|
191
206
|
|
|
192
|
-
# Returns
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
207
|
+
# Returns true if this stream is closed.
|
|
208
|
+
def closed?
|
|
209
|
+
@closed
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Reads some data from this stream at the current position.
|
|
213
|
+
#
|
|
214
|
+
# aPartial:: When false, the entire content of this stream
|
|
215
|
+
# is read and returned. When true, the maximum
|
|
216
|
+
# amount of content that can fit inside a
|
|
217
|
+
# single 9P2000 message is read and returned.
|
|
218
|
+
#
|
|
219
|
+
# If this stream corresponds to a directory, then an Array of
|
|
220
|
+
# Stat (one for each file in the directory) will be returned.
|
|
221
|
+
#
|
|
222
|
+
def read aPartial = false
|
|
196
223
|
raise 'cannot read from a closed stream' if @closed
|
|
197
224
|
|
|
198
225
|
content = ''
|
|
199
|
-
offset = 0
|
|
200
|
-
|
|
201
226
|
begin
|
|
202
|
-
|
|
203
|
-
|
|
227
|
+
req = Tread.new(
|
|
228
|
+
:fid => @fid,
|
|
229
|
+
:offset => @pos,
|
|
230
|
+
:count => @msize
|
|
231
|
+
)
|
|
232
|
+
rsp = @agent.talk(req)
|
|
204
233
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
234
|
+
content << rsp.data
|
|
235
|
+
count = rsp.count
|
|
236
|
+
@pos += count
|
|
237
|
+
end until @eof = count.zero? or aPartial
|
|
208
238
|
|
|
209
239
|
# the content of a directory is a sequence
|
|
210
240
|
# of Stat for all files in that directory
|
|
@@ -220,43 +250,26 @@ module Rumai
|
|
|
220
250
|
content
|
|
221
251
|
end
|
|
222
252
|
|
|
223
|
-
#
|
|
224
|
-
# one 9P2000 message, starting from the given offset.
|
|
225
|
-
#
|
|
226
|
-
# The end of file is reached when the returned
|
|
227
|
-
# content string is empty (has zero length).
|
|
228
|
-
def read_partial aOffset = 0
|
|
229
|
-
raise 'cannot read from a closed stream' if @closed
|
|
230
|
-
|
|
231
|
-
req = Tread.new(
|
|
232
|
-
:fid => @fid,
|
|
233
|
-
:offset => aOffset,
|
|
234
|
-
:count => @msize
|
|
235
|
-
)
|
|
236
|
-
rsp = @agent.talk(req)
|
|
237
|
-
rsp.data
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
# Writes the given content to the beginning of this stream.
|
|
253
|
+
# Writes the given content at the current position in this stream.
|
|
241
254
|
def write aContent
|
|
242
255
|
raise 'closed streams cannot be written to' if @closed
|
|
243
256
|
raise 'directories cannot be written to' if @stat.directory?
|
|
244
257
|
|
|
245
|
-
|
|
246
|
-
|
|
258
|
+
data = aContent.to_s
|
|
259
|
+
limit = data.length + @pos
|
|
247
260
|
|
|
248
|
-
while
|
|
249
|
-
chunk =
|
|
261
|
+
while @pos < limit
|
|
262
|
+
chunk = data[@pos, @msize]
|
|
250
263
|
|
|
251
264
|
req = Twrite.new(
|
|
252
265
|
:fid => @fid,
|
|
253
|
-
:offset =>
|
|
266
|
+
:offset => @pos,
|
|
254
267
|
:count => chunk.length,
|
|
255
268
|
:data => chunk
|
|
256
269
|
)
|
|
257
270
|
rsp = @agent.talk(req)
|
|
258
271
|
|
|
259
|
-
|
|
272
|
+
@pos += rsp.count
|
|
260
273
|
end
|
|
261
274
|
end
|
|
262
275
|
|
|
@@ -264,9 +277,9 @@ module Rumai
|
|
|
264
277
|
end
|
|
265
278
|
|
|
266
279
|
# Returns the content of the file/directory at the given path.
|
|
267
|
-
def read aPath
|
|
280
|
+
def read aPath, *aArgs
|
|
268
281
|
open aPath do |f|
|
|
269
|
-
f.read
|
|
282
|
+
f.read(*aArgs)
|
|
270
283
|
end
|
|
271
284
|
end
|
|
272
285
|
|
data/lib/rumai/nfo.rb
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
module Rumai
|
|
7
7
|
NFO = {
|
|
8
8
|
:name => 'Rumai',
|
|
9
|
-
:version => '
|
|
10
|
-
:release => '2008-
|
|
9
|
+
:version => '2.0.0',
|
|
10
|
+
:release => '2008-02-04',
|
|
11
11
|
:website => 'http://rumai.rubyforge.org',
|
|
12
12
|
:home => File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
13
13
|
}
|
data/lib/rumai/wm.rb
CHANGED
|
@@ -143,7 +143,7 @@ module Rumai
|
|
|
143
143
|
super "#{aPathPrefix}/#{aId}"
|
|
144
144
|
|
|
145
145
|
if aId.to_s == 'sel' and ctl.exist?
|
|
146
|
-
@id = ctl.read
|
|
146
|
+
@id = ctl.read.split.first
|
|
147
147
|
@path = File.join(File.dirname(@path), @id)
|
|
148
148
|
else
|
|
149
149
|
@id = File.basename(@path)
|
|
@@ -178,7 +178,7 @@ module Rumai
|
|
|
178
178
|
def focus aView = nil
|
|
179
179
|
if exist? and not focus?
|
|
180
180
|
(aView ? [aView] : self.views).each do |v|
|
|
181
|
-
if a = self.area(v)
|
|
181
|
+
if a = self.area(v) and a.exist?
|
|
182
182
|
v.focus
|
|
183
183
|
a.focus
|
|
184
184
|
|
|
@@ -202,15 +202,6 @@ module Rumai
|
|
|
202
202
|
|
|
203
203
|
# Sends this client to the given destination within the given view.
|
|
204
204
|
def send aAreaOrId, aView = View.curr
|
|
205
|
-
if aAreaOrId.to_s != 'toggle'
|
|
206
|
-
# XXX: it is an error to send a floating client directly to a
|
|
207
|
-
# managed area, so we gotta "ground" it first and then send it
|
|
208
|
-
# to the desired managed area. John-Galt will fix this someday.
|
|
209
|
-
if area(aView).float?
|
|
210
|
-
aView.ctl.write "send #{@id} toggle"
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
|
|
214
205
|
dst = area_to_id(aAreaOrId)
|
|
215
206
|
aView.ctl.write "send #{@id} #{dst}"
|
|
216
207
|
end
|
|
@@ -221,6 +212,11 @@ module Rumai
|
|
|
221
212
|
aView.ctl.write "swap #{@id} #{dst}"
|
|
222
213
|
end
|
|
223
214
|
|
|
215
|
+
# Terminates this client nicely (requests this window to be closed).
|
|
216
|
+
def kill
|
|
217
|
+
ctl.write :kill
|
|
218
|
+
end
|
|
219
|
+
|
|
224
220
|
##
|
|
225
221
|
#
|
|
226
222
|
# WM hierarchy
|
|
@@ -316,9 +312,8 @@ module Rumai
|
|
|
316
312
|
|
|
317
313
|
def area_to_id aAreaOrId
|
|
318
314
|
if aAreaOrId.respond_to? :id
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
aAreaOrId.id+1
|
|
315
|
+
id = aAreaOrId.id
|
|
316
|
+
id == '~' ? :toggle : id
|
|
322
317
|
else
|
|
323
318
|
aAreaOrId
|
|
324
319
|
end
|
|
@@ -359,13 +354,13 @@ module Rumai
|
|
|
359
354
|
|
|
360
355
|
# aView:: the view which contains this area.
|
|
361
356
|
def initialize aAreaId, aView = View.curr
|
|
362
|
-
@id = aAreaId
|
|
357
|
+
@id = Integer(aAreaId) rescue aAreaId
|
|
363
358
|
@view = aView
|
|
364
359
|
end
|
|
365
360
|
|
|
366
361
|
# Checks if this area is the floating area.
|
|
367
362
|
def float?
|
|
368
|
-
@id ==
|
|
363
|
+
@id == '~'
|
|
369
364
|
end
|
|
370
365
|
|
|
371
366
|
# Checks if this area is a column in the managed area.
|
|
@@ -392,7 +387,7 @@ module Rumai
|
|
|
392
387
|
include ClientContainer
|
|
393
388
|
# Returns the IDs of the clients in this area.
|
|
394
389
|
def client_ids
|
|
395
|
-
@view.client_ids
|
|
390
|
+
@view.client_ids @id
|
|
396
391
|
end
|
|
397
392
|
|
|
398
393
|
include Enumerable
|
|
@@ -403,7 +398,7 @@ module Rumai
|
|
|
403
398
|
|
|
404
399
|
# Sets the layout of clients in this column.
|
|
405
400
|
def layout= aMode
|
|
406
|
-
@view.ctl.write "colmode #{
|
|
401
|
+
@view.ctl.write "colmode #{@id} #{aMode}"
|
|
407
402
|
end
|
|
408
403
|
|
|
409
404
|
##
|
|
@@ -414,7 +409,7 @@ module Rumai
|
|
|
414
409
|
|
|
415
410
|
# Puts focus on this area.
|
|
416
411
|
def focus
|
|
417
|
-
@view.ctl.write "select #{
|
|
412
|
+
@view.ctl.write "select #{@id}"
|
|
418
413
|
end
|
|
419
414
|
|
|
420
415
|
##
|
|
@@ -491,11 +486,6 @@ module Rumai
|
|
|
491
486
|
|
|
492
487
|
private
|
|
493
488
|
|
|
494
|
-
# Makes the ID usable in wmii's /ctl commands.
|
|
495
|
-
def ctl_id
|
|
496
|
-
float? ? '~' : @id
|
|
497
|
-
end
|
|
498
|
-
|
|
499
489
|
# Moves the given client into this area.
|
|
500
490
|
def import_client c
|
|
501
491
|
if exist?
|
|
@@ -594,7 +584,7 @@ module Rumai
|
|
|
594
584
|
end
|
|
595
585
|
|
|
596
586
|
# Returns the floating area of this view.
|
|
597
|
-
def
|
|
587
|
+
def floater
|
|
598
588
|
areas.first
|
|
599
589
|
end
|
|
600
590
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rumai
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors: []
|
|
7
7
|
|
|
@@ -9,11 +9,11 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2008-
|
|
12
|
+
date: 2008-02-04 00:00:00 -08:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|
|
16
|
-
description: Ruby interface to wmii.
|
|
16
|
+
description: Ruby interface to the wmii window manager.
|
|
17
17
|
email:
|
|
18
18
|
executables:
|
|
19
19
|
- rumai
|
|
@@ -41,7 +41,6 @@ files:
|
|
|
41
41
|
- doc
|
|
42
42
|
- doc/guide.html
|
|
43
43
|
- doc/guide.erb
|
|
44
|
-
- doc/index.html
|
|
45
44
|
- doc/api
|
|
46
45
|
- doc/api/classes
|
|
47
46
|
- doc/api/classes/Time.html
|
|
@@ -69,8 +68,6 @@ files:
|
|
|
69
68
|
- doc/api/classes/Rumai/Area.src
|
|
70
69
|
- doc/api/classes/Rumai/Area.src/M000094.html
|
|
71
70
|
- doc/api/classes/Rumai/Area.src/M000080.html
|
|
72
|
-
- doc/api/classes/Rumai/Area.src/M000096.html
|
|
73
|
-
- doc/api/classes/Rumai/Area.src/M000091.html
|
|
74
71
|
- doc/api/classes/Rumai/Area.src/M000086.html
|
|
75
72
|
- doc/api/classes/Rumai/Area.src/M000095.html
|
|
76
73
|
- doc/api/classes/Rumai/Area.src/M000093.html
|
|
@@ -80,6 +77,8 @@ files:
|
|
|
80
77
|
- doc/api/classes/Rumai/Area.src/M000083.html
|
|
81
78
|
- doc/api/classes/Rumai/Area.src/M000087.html
|
|
82
79
|
- doc/api/classes/Rumai/Area.src/M000081.html
|
|
80
|
+
- doc/api/classes/Rumai/Area.src/M000079.html
|
|
81
|
+
- doc/api/classes/Rumai/Area.src/M000092.html
|
|
83
82
|
- doc/api/classes/Rumai/Area.src/M000088.html
|
|
84
83
|
- doc/api/classes/Rumai/Area.src/M000082.html
|
|
85
84
|
- doc/api/classes/Rumai/Area.src/M000090.html
|
|
@@ -90,6 +89,7 @@ files:
|
|
|
90
89
|
- doc/api/classes/Rumai/Client.src/M000121.html
|
|
91
90
|
- doc/api/classes/Rumai/Client.src/M000124.html
|
|
92
91
|
- doc/api/classes/Rumai/Client.src/M000114.html
|
|
92
|
+
- doc/api/classes/Rumai/Client.src/M000113.html
|
|
93
93
|
- doc/api/classes/Rumai/Client.src/M000115.html
|
|
94
94
|
- doc/api/classes/Rumai/Client.src/M000119.html
|
|
95
95
|
- doc/api/classes/Rumai/Client.src/M000127.html
|
|
@@ -112,16 +112,14 @@ files:
|
|
|
112
112
|
- doc/api/classes/Rumai/IXP/Struct.src
|
|
113
113
|
- doc/api/classes/Rumai/IXP/Struct.src/M000032.html
|
|
114
114
|
- doc/api/classes/Rumai/IXP/Struct.src/M000033.html
|
|
115
|
-
- doc/api/classes/Rumai/IXP/Struct.src/M000035.html
|
|
116
115
|
- doc/api/classes/Rumai/IXP/Struct.src/M000031.html
|
|
117
116
|
- doc/api/classes/Rumai/IXP/Struct.src/M000030.html
|
|
118
|
-
- doc/api/classes/Rumai/IXP/Struct.src/M000034.html
|
|
119
117
|
- doc/api/classes/Rumai/IXP/Rflush.html
|
|
120
118
|
- doc/api/classes/Rumai/IXP/Tauth.html
|
|
121
119
|
- doc/api/classes/Rumai/IXP/Fcall.html
|
|
122
120
|
- doc/api/classes/Rumai/IXP/Tcreate.html
|
|
123
121
|
- doc/api/classes/Rumai/IXP/Fcall.src
|
|
124
|
-
- doc/api/classes/Rumai/IXP/Fcall.src/
|
|
122
|
+
- doc/api/classes/Rumai/IXP/Fcall.src/M000070.html
|
|
125
123
|
- doc/api/classes/Rumai/IXP/Fcall.src/M000073.html
|
|
126
124
|
- doc/api/classes/Rumai/IXP/Fcall.src/M000071.html
|
|
127
125
|
- doc/api/classes/Rumai/IXP/Fcall.src/M000072.html
|
|
@@ -132,27 +130,27 @@ files:
|
|
|
132
130
|
- doc/api/classes/Rumai/IXP/Tattach.html
|
|
133
131
|
- doc/api/classes/Rumai/IXP/Rremove.html
|
|
134
132
|
- doc/api/classes/Rumai/IXP/Stat.src
|
|
135
|
-
- doc/api/classes/Rumai/IXP/Stat.src/
|
|
133
|
+
- doc/api/classes/Rumai/IXP/Stat.src/M000075.html
|
|
136
134
|
- doc/api/classes/Rumai/IXP/Rerror.html
|
|
137
135
|
- doc/api/classes/Rumai/IXP/Stream.src
|
|
138
|
-
- doc/api/classes/Rumai/IXP/Stream.src/
|
|
136
|
+
- doc/api/classes/Rumai/IXP/Stream.src/M000043.html
|
|
139
137
|
- doc/api/classes/Rumai/IXP/Struct.html
|
|
140
138
|
- doc/api/classes/Rumai/IXP/Struct
|
|
141
139
|
- doc/api/classes/Rumai/IXP/Struct/Field
|
|
142
140
|
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.html
|
|
143
141
|
- doc/api/classes/Rumai/IXP/Struct/Field/CounterField.html
|
|
144
142
|
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src
|
|
145
|
-
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/
|
|
146
|
-
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/
|
|
143
|
+
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/M000041.html
|
|
144
|
+
- doc/api/classes/Rumai/IXP/Struct/Field/CounteeField.src/M000042.html
|
|
147
145
|
- doc/api/classes/Rumai/IXP/Struct/Field/CounterField.src
|
|
148
|
-
- doc/api/classes/Rumai/IXP/Struct/Field/CounterField.src/
|
|
146
|
+
- doc/api/classes/Rumai/IXP/Struct/Field/CounterField.src/M000040.html
|
|
149
147
|
- doc/api/classes/Rumai/IXP/Struct/Field.src
|
|
150
148
|
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000038.html
|
|
151
149
|
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000036.html
|
|
152
|
-
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000040.html
|
|
153
150
|
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000037.html
|
|
154
|
-
- doc/api/classes/Rumai/IXP/Struct/Field.src/
|
|
151
|
+
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000035.html
|
|
155
152
|
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000039.html
|
|
153
|
+
- doc/api/classes/Rumai/IXP/Struct/Field.src/M000034.html
|
|
156
154
|
- doc/api/classes/Rumai/IXP/Struct/Field.html
|
|
157
155
|
- doc/api/classes/Rumai/IXP/Tstat.html
|
|
158
156
|
- doc/api/classes/Rumai/IXP/Rstat.html
|
|
@@ -171,16 +169,17 @@ files:
|
|
|
171
169
|
- doc/api/classes/Rumai/IXP/Tremove.html
|
|
172
170
|
- doc/api/classes/Rumai/IXP/Agent
|
|
173
171
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.src
|
|
174
|
-
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/
|
|
172
|
+
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000060.html
|
|
175
173
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000063.html
|
|
176
174
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000065.html
|
|
175
|
+
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000061.html
|
|
177
176
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000064.html
|
|
178
177
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.src/M000062.html
|
|
179
178
|
- doc/api/classes/Rumai/IXP/Agent/FidStream.html
|
|
180
179
|
- doc/api/classes/Rumai/IXP/Agent/MODES.src
|
|
181
|
-
- doc/api/classes/Rumai/IXP/Agent/MODES.src/
|
|
180
|
+
- doc/api/classes/Rumai/IXP/Agent/MODES.src/M000059.html
|
|
182
181
|
- doc/api/classes/Rumai/IXP/Agent/RangedPool.src
|
|
183
|
-
- doc/api/classes/Rumai/IXP/Agent/RangedPool.src/
|
|
182
|
+
- doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000067.html
|
|
184
183
|
- doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000068.html
|
|
185
184
|
- doc/api/classes/Rumai/IXP/Agent/RangedPool.src/M000069.html
|
|
186
185
|
- doc/api/classes/Rumai/IXP/Agent/MODES.html
|
|
@@ -188,12 +187,11 @@ files:
|
|
|
188
187
|
- doc/api/classes/Rumai/IXP/Rwalk.html
|
|
189
188
|
- doc/api/classes/Rumai/IXP/Agent.html
|
|
190
189
|
- doc/api/classes/Rumai/IXP/Terror.src
|
|
191
|
-
- doc/api/classes/Rumai/IXP/Terror.src/
|
|
190
|
+
- doc/api/classes/Rumai/IXP/Terror.src/M000074.html
|
|
192
191
|
- doc/api/classes/Rumai/IXP/Error.html
|
|
193
192
|
- doc/api/classes/Rumai/IXP/Tclunk.html
|
|
194
193
|
- doc/api/classes/Rumai/IXP/Ropen.html
|
|
195
194
|
- doc/api/classes/Rumai/IXP/Agent.src
|
|
196
|
-
- doc/api/classes/Rumai/IXP/Agent.src/M000060.html
|
|
197
195
|
- doc/api/classes/Rumai/IXP/Agent.src/M000055.html
|
|
198
196
|
- doc/api/classes/Rumai/IXP/Agent.src/M000056.html
|
|
199
197
|
- doc/api/classes/Rumai/IXP/Agent.src/M000051.html
|
|
@@ -203,20 +201,22 @@ files:
|
|
|
203
201
|
- doc/api/classes/Rumai/IXP/Agent.src/M000054.html
|
|
204
202
|
- doc/api/classes/Rumai/IXP/Agent.src/M000049.html
|
|
205
203
|
- doc/api/classes/Rumai/IXP/Agent.src/M000047.html
|
|
204
|
+
- doc/api/classes/Rumai/IXP/Agent.src/M000044.html
|
|
205
|
+
- doc/api/classes/Rumai/IXP/Agent.src/M000045.html
|
|
206
206
|
- doc/api/classes/Rumai/IXP/Agent.src/M000052.html
|
|
207
207
|
- doc/api/classes/Rumai/IXP/Agent.src/M000046.html
|
|
208
208
|
- doc/api/classes/Rumai/IXP/Agent.src/M000053.html
|
|
209
|
-
- doc/api/classes/Rumai/IXP/Agent.src/M000059.html
|
|
210
209
|
- doc/api/classes/Rumai/IXP/Agent.src/M000057.html
|
|
211
210
|
- doc/api/classes/Rumai/IXP/Rversion.html
|
|
212
211
|
- doc/api/classes/Rumai/IXP/Rattach.html
|
|
213
212
|
- doc/api/classes/Rumai/Chain.src
|
|
213
|
+
- doc/api/classes/Rumai/Chain.src/M000076.html
|
|
214
214
|
- doc/api/classes/Rumai/Chain.src/M000078.html
|
|
215
|
-
- doc/api/classes/Rumai/Chain.src/M000079.html
|
|
216
215
|
- doc/api/classes/Rumai/Chain.src/M000077.html
|
|
217
216
|
- doc/api/classes/Rumai/Node.src
|
|
218
217
|
- doc/api/classes/Rumai/Node.src/M000101.html
|
|
219
218
|
- doc/api/classes/Rumai/Node.src/M000111.html
|
|
219
|
+
- doc/api/classes/Rumai/Node.src/M000096.html
|
|
220
220
|
- doc/api/classes/Rumai/Node.src/M000106.html
|
|
221
221
|
- doc/api/classes/Rumai/Node.src/M000110.html
|
|
222
222
|
- doc/api/classes/Rumai/Node.src/M000103.html
|
|
@@ -224,7 +224,6 @@ files:
|
|
|
224
224
|
- doc/api/classes/Rumai/Node.src/M000100.html
|
|
225
225
|
- doc/api/classes/Rumai/Node.src/M000098.html
|
|
226
226
|
- doc/api/classes/Rumai/Node.src/M000109.html
|
|
227
|
-
- doc/api/classes/Rumai/Node.src/M000113.html
|
|
228
227
|
- doc/api/classes/Rumai/Node.src/M000105.html
|
|
229
228
|
- doc/api/classes/Rumai/Node.src/M000099.html
|
|
230
229
|
- doc/api/classes/Rumai/Node.src/M000112.html
|
|
@@ -315,6 +314,6 @@ rubyforge_project: rumai
|
|
|
315
314
|
rubygems_version: 1.0.1
|
|
316
315
|
signing_key:
|
|
317
316
|
specification_version: 2
|
|
318
|
-
summary: Ruby interface to wmii.
|
|
317
|
+
summary: Ruby interface to the wmii window manager.
|
|
319
318
|
test_files: []
|
|
320
319
|
|