Module: PryRemoteEm::Client::Keyboard

Defined in:
lib/pry-remote-em/client/keyboard.rb

Instance Method Summary collapse

Instance Method Details

#bufferio(enable) ⇒ Object

Makes stdin buffered or unbuffered. In unbuffered mode read and select will not wait for ā€œnā€; also will not echo characters. This probably does not work on Windows.



33
34
35
36
37
38
39
# File 'lib/pry-remote-em/client/keyboard.rb', line 33

def bufferio(enable)
  return if !defined?(Termios) || enable && @buff_enabled || !enable && !@buff_enabled
  attr = Termios.getattr($stdin)
  enable ? (attr.c_lflag |= Termios::ICANON | Termios::ECHO) : (attr.c_lflag &= ~(Termios::ICANON|Termios::ECHO))
  Termios.setattr($stdin, Termios::TCSANOW, attr)
  @buff_enabled = enable
end

#initialize(c) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/pry-remote-em/client/keyboard.rb', line 7

def initialize(c)
  @con            = c
  # TODO check actual current values to determine if it's enabled or not
  @buff_enabled   = true

  bufferio(false)

  @old_trap = Signal.trap(:INT) do
    @con.send_shell_sig(:int)
  end
end

#receive_data(d) ⇒ Object



19
20
21
22
# File 'lib/pry-remote-em/client/keyboard.rb', line 19

def receive_data(d)
  print d.chr
  @con.send_shell_data(d)
end

#unbindObject



24
25
26
27
28
# File 'lib/pry-remote-em/client/keyboard.rb', line 24

def unbind
  bufferio(true)

  Signal.trap(:INT, @old_trap)
end