NAME
     lab 29 - embedded graphs

DESCRIPTION
     Taking inspiration from Mathematica's notebook
     user interface, I tried implementing graphs
     embedded within the shell window, wm/sh. The idea
     being that a scrolling page of graphs, text and
     images is easier to manage than many overlapping
     windows. I feel this especially while I'm
     iteratively running commands, generating data and
     viewing graphs.

     The shell window provides a history of activity.
     By including other windows in that history I can
     look back at the graphs I generated, what data
     generated them, what command was used to generate
     the data, and so on. With overlapping windows this
     context can be lost. 

     Wm/sh used in this way now behaves as a
     rudimentary window manager. It is easy to imagine
     ways in which it becomes inconvient to use. Such
     as interacting with two windows separated by a
     large block of text. But it still might add a
     useful alternative to the wm/wm and acme window
     manager styles.

IMPLEMENTATION
     The graphs are Tk windows embedded within the text
     of the shell window. The graph can respond to
     events, and in this case clicking inside the graph
     updates the displayed coordinates.

     I didn't know how to do any of this, or even that
     Tk made it possible, until I looked at the editor 
     wm/brutus. Brutus seems to be a forgotten
     application within Inferno and not very stable. It
     supports embedding of images, tables, and excerpts
     of code within the text and simple formatting. It
     is still useful to trawl through such programs for
     snippets of code. Finding the code to embed Tk
     windows within text was enlightening.

     I used the brutus extension interface brutusext.m
     to implement the graph module. The graph module
     itself was adapted from /appl/math/gr.b.

     The shell already comes with a file system
     inteface /chan/shctl to communicate with external
     programs. I added to wm/sh two commands to be
     recognized by this file.

          % echo graph filename > /chan/shctl

     where filename contains a set of coordinates. 
     Wm/sh displays a graph within the shell window.
     [screenshot]

     I also added a command to display images. For
     example,

          % echo bitmap /icons/coin.bit > /chan/shctl

     To clear memory from all the Tk objects created,

          % echo clear >/chan/shctl

SUMMARY
     By adding this feature many other possibilities
     and questions quickly arise. How can we collapse
     individual embedded windows? Can we cut and paste
     the embeds? What about saving the whole contents
     of the shell window, including embeds, and
     restoring them later for browsing. Wm/brutus again
     points the way to doing some of this, by creating
     a simple markup using SGML or sexprs to store the
     contents as an expression.

FILES
     graph.b sh.b

                    Inferno Manual