我在我的tcl终端程序中使用{{1}}。 我想要的是只为一些关键的新闻事件做一些动作,例如 Tab 。对于其他按键事件,我想委托给rlwrap或其他默认处理程序,例如←将光标移动到左侧并在光标所在的位置插入文本,或按Ctrl + C 终止程序。有办法吗?
答案 0 :(得分:0)
唉,终端处理系统的工作方式并不容易。 但这不可能。我能想到的最简单的机制(事实上,唯一一个不会让我畏缩的机制)是使用一些更高级的机制Expect扩展程序interact
命令的功能。
特别是,interact
有效地将Expect程序spawn
连接到外部世界,但您也可以添加模式以允许扩展行为。
package require Expect
spawn /your/program yourarguments...
interact {
"\t" {
# Do something special here as we've got a Tab
send "special special special\r"
}
}
您可以在衍生过程中使用rlwrap:
spawn rlwrap /your/program yourarguments...
答案 1 :(得分:0)
rlwrap
version rlwrap-direct-keypress
的最新GitHub has a bindable readline command,可以绑定(例如在您的.inputrc
中)您要直接传递的任何密钥到您的计划,绕过rlwrap
使用readline
答案 2 :(得分:0)
stty中有一个处理信号的选项,即isig
选项。
此外,-opost
为您处理“\ n”到“\ r \ n”。
stty raw -echo isig
另一种选择是使用显式-icanon min 1 time 0
代替raw
选项。