如何使用tcl将按键处理委托给原始模式终端中的rlwrap

时间:2017-01-16 18:54:10

标签: terminal tcl stty rlwrap

我在我的tcl终端程序中使用{{1}}。 我想要的是只为一些关键的新闻事件做一些动作,例如 Tab 。对于其他按键事件,我想委托给rlwrap或其他默认处理程序,例如将光标移动到左侧并在光标所在的位置插入文本,或按Ctrl + C 终止程序。有办法吗?

3 个答案:

答案 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选项。