2013-07-06 47 views
0
  • 我有一個Ruby的命令行應用程序
  • 導航主要是通過在提示
  • 有些時候,進入菜單選擇,用戶處理提示被用於捕獲輸入不是導航指令
  • 我想提供一種替代的方式在這些情況下進行導航
  • 目前,我陷阱SIGINT和SIGQUIT(Ctrl-cCtrl-\)提供一些非基於提示的導航在
  • 但信號的數量可以陷阱非常有限(apparently 3?

什麼是基於修改鍵盤快捷方式添加到命令行Ruby應用程序的最佳方式?添加基於修改鍵盤快捷鍵來Ruby的命令行應用程序

回答

0

安裝highline gem - 應該允許你截取各種組合鍵(不需要用戶按下輸入鍵)。看到這個問題的更多細節:How to get a single character without pressing enter?

如果你確實使用highline,至少在我的測試中,你可能(或可能不)能夠使用Kernel.trap來獲取像Ctrl-C這樣的關鍵事件,所以你應該手動處理這些。 Highline會捕捉任何鍵並讓你檢測到ctrl-d和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 
+0

感謝您的回答史蒂夫。我試過了,我不確定它是如何幫助我添加鍵盤快捷鍵。你實際上必須按Enter鍵繼續執行'get_character'(這實際上是在你鏈接的其他SO問題中提到的)。此外,這將捕獲我在提示中輸入的第一個未修改的字符(記住已經用於其他目的),這是我不想要的。我只想捕獲修改後的(Ctrl/Alt /等)按鍵。 –

+0

延遲響應,但我認爲你必須捕獲所有內容,並將你不想處理的密鑰傳遞給系統的任何部分將處理它們(或者如果它們不重要/忽略掉)。 –