This came up when I was building a tcl/tk application for running linux commands and capturing the output. I had an entry widget where I was inputting the commands and I wanted to add history alike shells. [Johannes Kuhn] helped me to build the history function and I added the history to be circular (like a circular linked-list). Here is proc: ====== proc histwalk i { incr ::eventcnt $i if {$::eventcnt == [history nextid]} {set ::eventcnt 1} if {$::eventcnt == -[expr [history nextid]-1]} {set ::eventcnt 0} set ::(.entry,stdin) [history event $::eventcnt] } ====== To this procedure you need to add the bind statements: ====== bind $entrywidget_textvariable { history add $stdin } bind $entrywidget_textvariable {histwalk -1} bind $entrywidget_textvariable {histwalk 1} ====== This is much more simple than [An entry with a history].