将基于修饰符的键盘快捷方式添加到Ruby命令行应用程序

时间:2013-07-06 16:33:11

标签: ruby command-line signals

  • 我有一个Ruby命令行应用程序
  • 导航主要由用户在提示时输入菜单选项来处理
  • 有时候使用提示捕获不是导航指令的输入
  • 我想提供一种在这些情况下导航的替代方法
  • 目前,我捕获SIGINT和SIGQUIT(Ctrl-cCtrl-\)以提供一些非基于提示的导航
  • 但是您可以捕获的信号数量非常有限(apparently 3?

将基于修饰符的键盘快捷键添加到命令行Ruby应用程序的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

安装highline gem - 应允许您捕获各种键组合(无需用户在键后按Enter键)。有关详细信息,请参阅此问题:How to get a single character without pressing enter?

如果您确实使用了高线,至少在我的测试中,您可能(或可能不)能够使用Kernel.trap来获取Ctrl-C等关键事件,因此您应该手动处理这些事件。 Highline会捕获任何键,让你检测ctrl-d vs d。然而,它不会检测ctrl-d和ctrl-shift-d之间的差异,也不会将alt-d与d区分开来。这是一些基本代码:

require "highline/system_extensions"
include HighLine::SystemExtensions

print "Press any key:"
k = get_character
Kernel.abort("\nCtrl-C - exiting..\n") if k == 3
puts
puts k.chr