什么tcl命令返回上次评估的命令?

时间:2013-11-05 07:35:37

标签: c tcl history

什么tcl命令返回上次评估的命令?我认为应该有类似bash历史的东西。

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

set aaa bbb
puts [history info]

我有c ++程序,它创建Tcl Interpreter并使用它来评估命令。在特定时刻,我需要知道最后评估的命令是什么。是否可以使用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)

1 个答案:

答案 0 :(得分:3)

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

在交互式tclsh中,还有一个!!!N快捷方式history redo N重做最后输入的命令或重做命令N(其中N是事件编号)。< / p>

它不受上箭头或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或其中一个相关函数。