I want to build a 1-dimensional buffer hierarchy kinda like the 2-dimensional canvas hierarchy in NeWS, using a mark with a span in one buffer to represent the location of a mark with a span in another buffer, though not constrained to a tree structure like NeWS canvases. Pixel => Text :: Canvas => Spanvas. A spanvas is a pair of spans, (a span is like an emacs marker with a width). Each spanvas has a parent spanvas, a span within that spanvas marking the part of its parent it overlaps (possibly 0 width) {its outer "clip path"}, , and a list of "child" spanvases: the first span of each spanvas marks some text in that buffer, and the second span marks some text in any other buffer, which overlays the first span). Make spanvases be dictionaries, in which you can store link information, so you can instantiate them as objects. Instantiate objects that multiply inherit from spanvas magic dicts and canvas magic dicts. Editing operations on spanvases can be expressed as a series of string insertions and deletions. You could implement remote spanvases using a string edit server. Shared remote spanvases would be even better. You could get "damage events" on parts of the spanvases that somebody else has changed, so you'd know when to update what part of your view.