1

stty raw -echo在我的 tcl 终端程序中使用。我想要的是只为几个按键事件做一些动作,比如Tab. 对于其余的按键事件,我想委托给 rlwrap 或其他默认处理程序,例如将光标移动到左侧并在光标所在的位置插入文本,或者Ctrl+C终止程序。有没有办法做到这一点?

4

3 回答 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有效地将spawnExpect 编辑的程序与外部世界连接起来,但您也可以添加模式以允许扩展行为。

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 回答