Hypertools

Purpose: discuss the idea of Tcl/Tk Hypertools.


From the time I first read John's Usenix paper on Tk "(see ftp://www.tcl.tk/pub/tcl/doc/tkUsenix91.ps ), I have been fascinated by the idea of Tk applications talking to one another. It seems to me that, with the proper simple infrastructure, graphical applications could be written in a web of interaction, similar to how I tend to write small useful command line filters that manipulate data.

One person who did some early work on this idea was David Svoboda who created the Teaching Hypertools series of tools. This series of tools is intended to be used to add new features to existing running Tk tools. An extended editor, designed to cooperate with the teacher hypertools, is called Elsbeth. These tools should still be available on the ftp://ftp.procplace.com/pub/tcl/ archive site. Look for th.* and elsbeth.* in the directory ftp://ftp.procplace.com/pub/tcl/sorted/packages-7.6/devel/ . The tools date from 1996, and were designed for Tcl 7.6 and Tk 4.x. David Svoboda now works on other projects; his home page is at http://www.cs.cmu.edu/~svoboda/ .

John Ousterhout and Larry Rowe wrote an article for the X Journal, I believe, discussing the idea further.

The X Journal, March-April 1993, pages 74-81, "HYPERTOOLS A revolution in GUI applications" (listed in the TOC as "Hypertools: A GUI revolution") by John K. Ousterhout and Lawrence A. Rowe.

The basic idea is to write applications in such a way that they can be sent information to change their configurations dynamically.

So, what are some of the tools and techniques that can be used to build hypertools?

  • send is a Tk built in that works under X, allowing one to relatively easily send tcl code from one Tk interpreter to another.
  • comm is an extension (which is in the tcllib cvs http://sourceforge.net/projects/tcllib/ ) which implements a send like command but without the dependence on X
  • sockets are pretty easy to use in Tcl and can be used for communication, though it takes a bit of work to implement some sort of general infrastructure