我stty raw -echo
在我的 tcl 终端程序中使用。我想要的是只为几个按键事件做一些动作,比如Tab. 对于其余的按键事件,我想委托给 rlwrap 或其他默认处理程序,例如←将光标移动到左侧并在光标所在的位置插入文本,或者Ctrl+C终止程序。有没有办法做到这一点?
问问题
231 次
3 回答
1
最新的 GitHub版本有rlwrap
一个可绑定的 readline 命令 rlwrap-direct-keypress
,可以绑定(例如在你的.inputrc
)到你想直接传递给你的程序的任何键,绕过rlwrap
编辑输入行时,所有其他键仍将照常工作(例如移动光标)readline
于 2017-01-18T23:56:48.553 回答
1
stty 中有一个选项可以为您处理信号,这是isig
选项。另外,-opost
为您处理“\n”到“\r\n”。
stty raw -echo isig
另一种选择是使用显式-icanon min 1 time 0
而不是raw
选项。
于 2017-02-08T16:17:55.313 回答
0
唉,码头处理系统的工作方式并不容易。但这并非不可能。我能想到的最简单的机制(事实上,唯一一个不会让我畏缩的机制)是使用 Expect 扩展interact
命令的一些更高级的特性。
特别是,interact
有效地将spawn
Expect 编辑的程序与外部世界连接起来,但您也可以添加模式以允许扩展行为。
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...
于 2017-01-17T09:50:18.513 回答