Class: Kward::AdaptivePtyOutputSink
- Inherits:
-
Object
- Object
- Kward::AdaptivePtyOutputSink
- Defined in:
- lib/kward/adaptive_pty_output_sink.rb
Overview
Streams a conservative subset of PTY output into Kward's inline terminal region and permanently switches to exclusive passthrough before forwarding screen-oriented or unknown terminal controls.
Constant Summary collapse
- MAX_SEQUENCE_BYTES =
4096- SAFE_CONTROLS =
[0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d].freeze
- TERMINAL_STRING_INTRODUCERS =
[0x5d, 0x50, 0x5e, 0x5f, 0x58].freeze
Instance Attribute Summary collapse
-
#captured_output ⇒ Object
readonly
Returns the value of attribute captured_output.
Instance Method Summary collapse
- #finish ⇒ Object
- #flush ⇒ Object
-
#initialize(output:, on_exclusive:, max_capture_bytes: nil) ⇒ AdaptivePtyOutputSink
constructor
A new instance of AdaptivePtyOutputSink.
- #inline? ⇒ Boolean
- #input_forwarded ⇒ Object
- #pre_input_capture_only? ⇒ Boolean
- #transcript_safe? ⇒ Boolean
- #truncated? ⇒ Boolean
- #write(chunk) ⇒ Object
Constructor Details
#initialize(output:, on_exclusive:, max_capture_bytes: nil) ⇒ AdaptivePtyOutputSink
Returns a new instance of AdaptivePtyOutputSink.
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 15 def initialize(output:, on_exclusive:, max_capture_bytes: nil) @output = output @on_exclusive = on_exclusive @max_capture_bytes = max_capture_bytes @captured_output = max_capture_bytes ? +"".b : nil @capture_open = true @truncated = false @mode = :inline @sequence = +"".b @synchronized_output = false end |
Instance Attribute Details
#captured_output ⇒ Object (readonly)
Returns the value of attribute captured_output.
13 14 15 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 13 def captured_output @captured_output end |
Instance Method Details
#finish ⇒ Object
39 40 41 42 43 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 39 def finish switch_to_exclusive(@sequence) unless @sequence.empty? || exclusive? end_synchronized_output if inline? flush end |
#flush ⇒ Object
35 36 37 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 35 def flush @output.flush if @output.respond_to?(:flush) end |
#inline? ⇒ Boolean
49 50 51 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 49 def inline? @mode == :inline end |
#input_forwarded ⇒ Object
45 46 47 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 45 def input_forwarded @capture_open = false end |
#pre_input_capture_only? ⇒ Boolean
57 58 59 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 57 def pre_input_capture_only? true end |
#transcript_safe? ⇒ Boolean
53 54 55 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 53 def transcript_safe? inline? && @sequence.empty? end |
#truncated? ⇒ Boolean
61 62 63 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 61 def truncated? @truncated end |
#write(chunk) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/kward/adaptive_pty_output_sink.rb', line 27 def write(chunk) value = chunk.to_s.b capture(value) return @output.write(value) if exclusive? write_inline(value) end |