c-tcl命令返回最后一个求值的命令



哪个tcl命令返回上次求值的命令?我认为它应该有类似狂欢历史的东西。

我试过这个,但它打印的是空字符串。

set aaa bbb
puts [history info]

我有一个c++程序,它创建Tcl解释器并使用它评估命令。在特定的时刻,我需要知道最后一个评估的命令是什么。是否可以使用Tcl或C接口?

set a bbb
set b ccc
puts eee
set hh [history redo 1]

现在我得到错误

event "1" hasn't occured yet
    while executing
"HistIndex $event"
    (procedure "tcl::HistRedo" line 6)
    invoked from within
"tcl::HistRedo [lindex $args 1]"
    (procedure "history" line 109)
    invoked from within
"history redo 1"
    invoked from within
"set hh [history redo 1]"
    (file "./a.itcl" line 17)

可以使用history命令在tclsh中查看和操作以前输入的命令。这样可以查看以前的命令列表并重做事件。

在交互式tclsh中,history redo N还有一个!!!N快捷方式,用于重做上次输入的命令或重做命令N(其中N是事件编号(。

它并没有绑定到向上箭头或ctrl-p或任何正常的东西。为此,您可能需要一些像rlwrap或socat READLINE这样的包装器来进行readline样式的行编辑。如果你有一个X Windows会话,那么tkcon会更有用,并提供合理的命令行编辑。在Windows上,tclsh可以从cmd.exe提示符使用内置行编辑,包括使用uparrow来获取以前的命令。

在我的测试环节:

% info pa
8.5.13
% history z
bad option "z": must be add, change, clear, event, info, keep, nextid, or redo
% history info
     1  info pa
     2  history z
     3  history info
% history redo 1
8.5.13
% exit

后续

原始发布者的其他注释指出,该代码不是在标准tclsh解释器中运行的。历史记录功能在generic/tclHistory.c和library/history.tcl库脚本中实现。如C文件头注释所示:

这个模块和Tcl库文件history.Tcl一起实现Tcl命令历史记录。可以调用Tcl_RecordAndEval(Obj(进行记录命令("事件"(。中定义的命令history.tcl可以用于执行历史替换。

因此我们可以推断,当评估我们想要输入到历史中的命令时,定制解释器必须使用Tcl_RecordAndEval API调用。据推测,当前的自定义实现只是使用Tcl_Eval或其中一个相关函数。

最新更新