Class: Kward::BufferedPtyOutputSink
- Inherits:
-
Object
- Object
- Kward::BufferedPtyOutputSink
- Defined in:
- lib/kward/pty/output_sink.rb
Overview
Retains output while a detached PTY command runs without terminal ownership.
Instance Method Summary collapse
- #captured_output ⇒ Object
- #finish ⇒ Object
- #flush ⇒ Object
-
#initialize(max_capture_bytes:, initial_output: nil, initial_truncated: false) ⇒ BufferedPtyOutputSink
constructor
A new instance of BufferedPtyOutputSink.
- #pre_input_capture_only? ⇒ Boolean
- #transcript_safe? ⇒ Boolean
- #truncated? ⇒ Boolean
- #write(chunk) ⇒ Object
Constructor Details
#initialize(max_capture_bytes:, initial_output: nil, initial_truncated: false) ⇒ BufferedPtyOutputSink
Returns a new instance of BufferedPtyOutputSink.
7 8 9 10 11 12 13 |
# File 'lib/kward/pty/output_sink.rb', line 7 def initialize(max_capture_bytes:, initial_output: nil, initial_truncated: false) @max_capture_bytes = max_capture_bytes @captured_output = +"".b @truncated = initial_truncated @mutex = Mutex.new write(initial_output) unless initial_output.to_s.empty? end |
Instance Method Details
#captured_output ⇒ Object
15 16 17 |
# File 'lib/kward/pty/output_sink.rb', line 15 def captured_output @mutex.synchronize { @captured_output.dup } end |
#finish ⇒ Object
38 39 40 |
# File 'lib/kward/pty/output_sink.rb', line 38 def finish nil end |
#flush ⇒ Object
34 35 36 |
# File 'lib/kward/pty/output_sink.rb', line 34 def flush nil end |
#pre_input_capture_only? ⇒ Boolean
46 47 48 |
# File 'lib/kward/pty/output_sink.rb', line 46 def pre_input_capture_only? true end |
#transcript_safe? ⇒ Boolean
42 43 44 |
# File 'lib/kward/pty/output_sink.rb', line 42 def transcript_safe? true end |
#truncated? ⇒ Boolean
50 51 52 |
# File 'lib/kward/pty/output_sink.rb', line 50 def truncated? @mutex.synchronize { @truncated } end |
#write(chunk) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/kward/pty/output_sink.rb', line 19 def write(chunk) value = chunk.to_s.b return if value.empty? @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 |