我在应用程序中使用TCL C Api。具体来说,我使用Tcl_Main创建一个运行我的命令的shell应用程序。这工作得很好,但我正在寻找一种方法来添加典型的类似shell的功能(例如。向上箭头检索最后一个命令,制表符自动完成,等等),我不知道如何用TCL C API做到这一点。我见过一些解决方案,说把shell Package 在类似GNU readline的东西中,但由于我运行的是一个简单调用Tcl_Main的C程序,我不确定这对我是否适用。这里有什么指引吗?
Tcl_Main
deyfvvtc1#
如果您正在执行自己的主循环,请在Tcl_Main()之前调用Tcl_MainLoop(yourImplFunc);以插入该循环。这就是它存在的意义您的主循环将需要操作终端,而Tcl本身在Tcl8.7之前没有提供任何机制(但扩展可能会这样做)。最主要的是你需要获取stdin的文件描述符(参见Tcl_GetChannelHandle),并将其传递给tcgetattr()和tcsetattr(),以将终端置于raw模式。一旦进入原始模式,你就可以看到像箭头键这样的东西,但它的一个缺点是你必须做所有的处理。这就是人们使用readline库的原因。
Tcl_Main()
Tcl_MainLoop(yourImplFunc);
Tcl_GetChannelHandle
tcgetattr()
tcsetattr()
1条答案
按热度按时间deyfvvtc1#
如果您正在执行自己的主循环,请在
Tcl_Main()
之前调用Tcl_MainLoop(yourImplFunc);
以插入该循环。这就是它存在的意义您的主循环将需要操作终端,而Tcl本身在Tcl8.7之前没有提供任何机制(但扩展可能会这样做)。最主要的是你需要获取stdin的文件描述符(参见
Tcl_GetChannelHandle
),并将其传递给tcgetattr()
和tcsetattr()
,以将终端置于raw模式。一旦进入原始模式,你就可以看到像箭头键这样的东西,但它的一个缺点是你必须做所有的处理。这就是人们使用readline库的原因。