Class: Aidp::CLI::TerminalIO
- Inherits:
-
Object
- Object
- Aidp::CLI::TerminalIO
- Defined in:
- lib/aidp/cli/terminal_io.rb
Instance Method Summary collapse
- #flush ⇒ Object
- #getch ⇒ Object
- #gets ⇒ Object
-
#initialize(input: nil, output: nil) ⇒ TerminalIO
constructor
A new instance of TerminalIO.
- #print(str) ⇒ Object
- #puts(str = "") ⇒ Object
-
#readline(prompt = "", default: nil) ⇒ Object
Enhanced readline-style input with standard key combinations Supports: Ctrl-A (beginning), Ctrl-E (end), Ctrl-W (delete word), etc.
- #ready? ⇒ Boolean
- #write(str) ⇒ Object
Constructor Details
#initialize(input: nil, output: nil) ⇒ TerminalIO
Returns a new instance of TerminalIO.
9 10 11 12 |
# File 'lib/aidp/cli/terminal_io.rb', line 9 def initialize(input: nil, output: nil) @input = input || $stdin @output = output || $stdout end |
Instance Method Details
#flush ⇒ Object
76 77 78 |
# File 'lib/aidp/cli/terminal_io.rb', line 76 def flush @output.flush end |
#getch ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/aidp/cli/terminal_io.rb', line 22 def getch return nil unless ready? if @input.is_a?(StringIO) char = @input.getc char&.chr || "" else @input.getch end end |
#gets ⇒ Object
32 33 34 |
# File 'lib/aidp/cli/terminal_io.rb', line 32 def gets @input.gets end |
#print(str) ⇒ Object
72 73 74 |
# File 'lib/aidp/cli/terminal_io.rb', line 72 def print(str) @output.print(str) end |
#puts(str = "") ⇒ Object
68 69 70 |
# File 'lib/aidp/cli/terminal_io.rb', line 68 def puts(str = "") @output.puts(str) end |
#readline(prompt = "", default: nil) ⇒ Object
Enhanced readline-style input with standard key combinations Supports: Ctrl-A (beginning), Ctrl-E (end), Ctrl-W (delete word), etc.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/aidp/cli/terminal_io.rb', line 38 def readline(prompt = "", default: nil) # Use StringIO for testing, otherwise use TTY::Reader for real input if @input.is_a?(StringIO) @output.print(prompt) @output.flush line = @input.gets return line&.chomp if line return default end reader = TTY::Reader.new( input: @input, output: @output, interrupt: :exit ) # TTY::Reader#read_line does not support a :default keyword; we emulate fallback result = reader.read_line(prompt) if (result.nil? || result.chomp.empty?) && !default.nil? return default end result&.chomp rescue TTY::Reader::InputInterrupt raise Interrupt end |
#ready? ⇒ Boolean
14 15 16 17 18 19 20 |
# File 'lib/aidp/cli/terminal_io.rb', line 14 def ready? return false if @input.closed? return true if @input.is_a?(StringIO) # For regular IO, we can't easily check if data is ready # So we'll assume it's always ready for non-blocking operations true end |
#write(str) ⇒ Object
64 65 66 |
# File 'lib/aidp/cli/terminal_io.rb', line 64 def write(str) @output.write(str) end |