I am currently using this code to grab key-strokes, but I am missing e.g. Shift/Alt keys like
Ctrl+Shift+S, Ctrl+Shift+↑, Alt+S, etc.
require 'curses'
Curses.noecho
Curses.raw
Curses.stdscr.keypad(true)
Curse.nonl
count = 0
loop do
count = (count + 1) % 20
key = Curses.getch
break if key == ?\C-c
Curses.setpos(count,0)
Curses.addstr("#{key.inspect} ");
end
有什么办法把它们全部捕获吗?
Also: how can I distinguish Ctrl+J / Ctrl+M from Ctrl+Enter / Enter, which give the same key-codes (10
/13
)?
另外:如何区分 ctrl+j / ctrl+m 和 ctr+enter / Enter,
给出相同的键码 (10/13)
长话短说——你不能。终端几乎肯定会为每个产生相同的字节。请阅读
http://www.leonerd.org.uk/hacks/fixterms/ http://www.leonerd.org.uk/hacks/fixterms/
也就是说,如果你感觉特别勇敢,你可以尝试我的libtermkey
http://www.leonerd.org.uk/code/libtermkey/ http://www.leonerd.org.uk/code/libtermkey/
这至少会正确解析类似的东西Ctrl-arrow
。它(还)没有 Ruby 绑定,但 Perl 和 Python 绑定的存在表明编写一个绑定应该很容易。
最后,如果你感觉更勇敢,你可以运行我写的终端,pangoterm
,它具有对任意修改的 Unicode 键进行编码的通用方法,因此它可以区分 Ctrl-m 和 Enter 等...
https://launchpad.net/pangoterm https://launchpad.net/pangoterm
然而,除此之外,答案仍然是“你不能”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)