Skip to content
Kward Search API index

Class: Kward::BufferedPtyOutputSink

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/pty_output_sink.rb

Overview

Retains output while a detached PTY command runs without terminal ownership.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max_capture_bytes:) ⇒ BufferedPtyOutputSink

Returns a new instance of BufferedPtyOutputSink.



9
10
11
12
13
14
# File 'lib/kward/pty_output_sink.rb', line 9

def initialize(max_capture_bytes:)
  @max_capture_bytes = max_capture_bytes
  @captured_output = +"".b
  @truncated = false
  @mutex = Mutex.new
end

Instance Attribute Details

#captured_outputObject (readonly)

Returns the value of attribute captured_output.



7
8
9
# File 'lib/kward/pty_output_sink.rb', line 7

def captured_output
  @captured_output
end

Instance Method Details

#finishObject



33
34
35
# File 'lib/kward/pty_output_sink.rb', line 33

def finish
  nil
end

#flushObject



29
30
31
# File 'lib/kward/pty_output_sink.rb', line 29

def flush
  nil
end

#pre_input_capture_only?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/kward/pty_output_sink.rb', line 41

def pre_input_capture_only?
  true
end

#transcript_safe?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/kward/pty_output_sink.rb', line 37

def transcript_safe?
  true
end

#truncated?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/kward/pty_output_sink.rb', line 45

def truncated?
  @mutex.synchronize { @truncated }
end

#write(chunk) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/kward/pty_output_sink.rb', line 16

def write(chunk)
  value = chunk.to_s.b
  @mutex.synchronize do
    remaining = @max_capture_bytes - @captured_output.bytesize
    if value.bytesize > remaining
      @captured_output << value.byteslice(0, remaining) if remaining.positive?
      @truncated = true
    else
      @captured_output << value
    end
  end
end