【问题标题】:How to handle a long press on button in a waitkey function of bash script?如何处理bash脚本的waitkey函数中的长按按钮?
【发布时间】:2020-01-30 06:21:37
【问题描述】:

我在 bash 脚本中实现了一个“waitkey”函数,它等待用户按下键盘上的按钮以继续。

但是,由于不同的人有不同的按下习惯,当人们长时间按下一个按钮时,我的脚本总是将这个长按视为多次单独按下。

waitkey() {
   read -n 1 -s -r -p "Press any key to continue"
}

是否可以这样修改我的代码: 因为两次单独点击之间的间隔必须大于2秒,这样如果一个按钮长按1.5秒,这个长按就不会被视为两次单独点击。

【问题讨论】:

    标签: linux bash keyboard delay wait


    【解决方案1】:

    编辑: 这个超级用户答案可以帮助您在等待按键之前清除输入: https://superuser.com/a/622205

    要做你想做的事,你要么必须:

    • 在读取用户输入之前禁用按键重复。

    • 在接受新输入之前检测 KeyUp 事件。

    简短回答:这在 Shell 中是不可能的。

    长答案:这几乎是不可能的,而且肯定不便携。

    由于控制台和终端的工作方式,没有办法在任何 unix tty 控制台环境中处理 keydown 和 keyup 事件,因此在 Bash 中也不行。

    终端tty设备只处理字符流。

    使用脚本执行您要求的操作需要对键盘设备进行低级别访问。

    有办法在本地做,但绝对不是小菜一碟,依靠X-Window协议或者本地和特权访问键盘设备。

    我找到了这篇详细的博文,如果您想了解更多为什么在 Linux 上检测 KeyUp 事件如此困难,您可以阅读:

    https://blog.robertelder.org/detect-keyup-event-linux-terminal/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2011-05-17
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多