如何在终端中捕获 Ruby 输入提示的一些特殊按键(并让其他人正常通过)

Pla*_*tin 4 ruby terminal stdin gets

我的 Ruby 脚本类似于:

something = gets      # or STDIN.gets
puts something

def arrow_pressed
    puts "arrow totally pressed"
end
Run Code Online (Sandbox Code Playgroud)

一旦用户提示存在,我希望箭头键之外的所有键盘输入正常发生。如果按下这些按钮,我不希望终端中出现任何内容(例如^[[A)。我只想执行我的arrow_pressed方法。我想执行它而不需要用户点击Return

我已经尝试过这个要点- 效果很好,只是即使在更改它以正常地通过大多数击键之后,我仍然无法Backspace(或其他特殊功能)工作。

我很高兴使用gets(图书馆或其他什么)以外的东西。任何帮助,将不胜感激!

Pio*_*ach 5

我是tty-reader的作者,它提供了一个更高级别的 API 来处理键盘输入。使用它您可以读取单个按键、整行或多行内容。它还允许您监听不同的按键事件,例如按键或退格键。

例如,提示用户输入并在按下箭头或退格键时执行操作:

require "tty-reader"

reader = TTY::Reader.new

reader.on(:keydown) { puts "down we go" }
      .on(:keyup) { puts "up we go" }
      .on(:keybackspace) { puts "backspace pressed" }

answer = reader.read_line
Run Code Online (Sandbox Code Playgroud)

该 gem 已经过测试,可在包括 Windows 在内的所有主要平台上运行。