Class: Foruiman::TUI::Terminal

Inherits:
Object
  • Object
show all
Defined in:
lib/foruiman/tui/terminal.rb

Constant Summary collapse

ENTER =
"\e[?1049h\e[?25l\e[0m"
LEAVE =
"\e[0m\e[?25h\e[?1049l"

Instance Method Summary collapse

Constructor Details

#initialize(input: $stdin, output: $stdout) ⇒ Terminal

Returns a new instance of Terminal.



10
11
12
13
# File 'lib/foruiman/tui/terminal.rb', line 10

def initialize(input: $stdin, output: $stdout)
  @input = input
  @output = output
end

Instance Method Details

#draw(frame) ⇒ Object



39
40
41
42
# File 'lib/foruiman/tui/terminal.rb', line 39

def draw(frame)
  @output.write(frame)
  @output.flush
end

#read ⇒ Object



35
36
37
# File 'lib/foruiman/tui/terminal.rb', line 35

def read
  @input.read_nonblock(4096, exception: false)
end

#session ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/foruiman/tui/terminal.rb', line 15

def session(&)
  @output.write(ENTER)
  @output.flush
  @input.raw(intr: false, &)
ensure
  begin
    @output.write(LEAVE)
    @output.flush
  rescue IOError, SystemCallError
    # Input's raw block has already restored its exact prior terminal mode.
  end
end

#size ⇒ Object



28
29
30
31
32
33
# File 'lib/foruiman/tui/terminal.rb', line 28

def size
  rows, columns = @output.winsize
  [[rows, 1].max, [columns, 1].max]
rescue IOError, SystemCallError
  [24, 80]
end