Skip to content
Kward Search API index

Class: Kward::AdaptivePtyOutputSink

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_outputObject (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

#finishObject



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

#flushObject



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

Returns:

  • (Boolean)


49
50
51
# File 'lib/kward/adaptive_pty_output_sink.rb', line 49

def inline?
  @mode == :inline
end

#input_forwardedObject



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

Returns:

  • (Boolean)


57
58
59
# File 'lib/kward/adaptive_pty_output_sink.rb', line 57

def pre_input_capture_only?
  true
end

#transcript_safe?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/kward/adaptive_pty_output_sink.rb', line 53

def transcript_safe?
  inline? && @sequence.empty?
end

#truncated?Boolean

Returns:

  • (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