@@ -43,7 +43,7 @@ def initialize(options={})
43
43
@shutdown = false
44
44
45
45
# Self-pipe for deferred signal-handling (ala djb: http://cr.yp.to/docs/selfpipe.html)
46
- reader , writer = create_pipe
46
+ reader , writer = self . class . create_pipe
47
47
reader . close_on_exec = true if reader . respond_to? ( :close_on_exec )
48
48
writer . close_on_exec = true if writer . respond_to? ( :close_on_exec )
49
49
@selfpipe = { :reader => reader , :writer => writer }
@@ -312,7 +312,7 @@ def shutdown
312
312
313
313
## Helpers ##########################################################
314
314
315
- def create_pipe
315
+ def self . create_pipe
316
316
IO . method ( :pipe ) . arity . zero? ? IO . pipe : IO . pipe ( "BINARY" )
317
317
end
318
318
@@ -364,24 +364,21 @@ def termination_message_for(status)
364
364
def spawn_processes
365
365
@processes . each do |process |
366
366
1 . upto ( formation [ @names [ process ] ] ) do |n |
367
- reader , writer = process . interactive? ? PTY . open : create_pipe
368
367
begin
369
368
pid = process . run (
370
- input : process . interactive? ? $stdin : :close ,
371
- output : writer ,
372
369
env : {
373
370
'PORT' => port_for ( process , n ) . to_s ,
374
371
'PS' => name_for_index ( process , n )
375
372
}
376
373
)
377
- writer . puts "started with pid #{ pid } "
374
+ # writer.puts "started with pid #{pid}"
378
375
rescue Errno ::ENOENT
379
- writer . puts "unknown command: #{ process . command } "
376
+ # writer.puts "unknown command: #{process.command}"
380
377
end
381
- @buffers [ reader ] = Buffer . new
382
- @prefixed [ reader ] = false
378
+ @buffers [ process . reader ] = Buffer . new ( @names [ process ] )
379
+ @prefixed [ process . reader ] = false
383
380
@running [ pid ] = [ process , n ]
384
- @readers [ pid ] = reader
381
+ @readers [ pid ] = process . reader
385
382
end
386
383
end
387
384
end
@@ -419,16 +416,18 @@ def handle_io_interactive(reader)
419
416
indent = prefix ( name ) . gsub ( ANSI_TOKEN , "" ) . length
420
417
421
418
loop do
422
- @buffers [ reader ] . write ( reader . read_nonblock ( 4096 ) )
419
+ @buffers [ reader ] . write ( reader . read_nonblock ( 10 ) )
423
420
424
421
@buffers [ reader ] . each_token do |token |
425
422
case token
426
423
when /^\e \[ (\d +)G$/
427
424
output_partial "\e [#{ Regexp . last_match ( 1 ) . to_i + indent } G"
428
425
when ANSI_TOKEN
429
426
output_partial token
427
+ when "\r "
428
+ output_partial "\e [#{ indent +1 } G"
430
429
when "\n "
431
- output_partial token
430
+ output_partial " \r \n "
432
431
@prefixed [ reader ] = false
433
432
else
434
433
unless @prefixed [ reader ]
@@ -445,8 +444,6 @@ def handle_io_interactive(reader)
445
444
return if done
446
445
rescue EOFError
447
446
end
448
- ensure
449
- output_partial "\n "
450
447
end
451
448
452
449
def handle_io_noninteractive ( reader )
0 commit comments