@@ -36,6 +36,7 @@ def initialize(options={})
36
36
@env = { }
37
37
@mutex = Mutex . new
38
38
@names = { }
39
+ @prefixed = { }
39
40
@processes = [ ]
40
41
@running = { }
41
42
@readers = { }
@@ -378,6 +379,7 @@ def spawn_processes
378
379
writer . puts "unknown command: #{ process . command } "
379
380
end
380
381
@buffers [ reader ] = Buffer . new
382
+ @prefixed [ reader ] = false
381
383
@running [ pid ] = [ process , n ]
382
384
@readers [ pid ] = reader
383
385
end
@@ -414,22 +416,26 @@ def handle_io(readers)
414
416
def handle_io_interactive ( reader )
415
417
done = false
416
418
name = name_for ( @readers . invert [ reader ] )
417
-
418
- output_partial prefix ( name )
419
+ indent = prefix ( name ) . gsub ( ANSI_TOKEN , "" ) . length
419
420
420
421
loop do
421
422
@buffers [ reader ] . write ( reader . read_nonblock ( 10 ) )
422
423
423
424
@buffers [ reader ] . each_token do |token |
424
425
case token
425
426
when /^\e \[ (\d +)G$/
426
- output_partial "\e [#{ :: Regexp . last_match ( 1 ) . to_i + prefix ( name ) . gsub ( ANSI_TOKEN , "" ) . length } G"
427
+ output_partial "\e [#{ Regexp . last_match ( 1 ) . to_i + indent } G"
427
428
when ANSI_TOKEN
428
429
output_partial token
429
430
when "\n "
430
431
output_partial token
431
- output_partial prefix ( name )
432
+ @prefixed [ reader ] = false
432
433
else
434
+ unless @prefixed [ reader ]
435
+ output_partial "\e [1G"
436
+ output_partial prefix ( name )
437
+ @prefixed [ reader ] = true
438
+ end
433
439
output_partial token
434
440
end
435
441
done = ( token == "\n " )
@@ -450,6 +456,11 @@ def handle_io_noninteractive(reader)
450
456
end
451
457
end
452
458
459
+ def output_prefix ( reader )
460
+ output_partial prefix ( name_for ( @readers . invert [ reader ] ) )
461
+ @prefixed [ reader ] = true
462
+ end
463
+
453
464
def watch_for_output
454
465
Thread . new do
455
466
begin
0 commit comments