Unix Programming - A Tale of Five Editors - Sam
The Sam editor[118]
was written by Rob Pike at Bell Labs in the mid-1980s. Sam was
designed for the Plan 9 operating system, which we'll survey in Chapter20. While the Sam editor is not widely known
outside the Labs, it's favored by many of the original Unix developers
who went on to work on Plan 9, including Ken Thompson himself.
Sam is a fairly straightforward descendant of ed, remaining much
closer to its parent than vi. Sam incorporates only two new concepts:
a curses-style text display and text selection with the mouse.
Each Sam session has exactly one command window, and one or more
text windows. Text windows edit text, and command windows accept
ed-style editing commands. The mouse is used to move between windows,
and to select text regions within text windows. This is a clean,
orthogonal, modeless design that discards most of the interface
complexity of vi.
Most commands operate by default on a select region that can be
painted with a mouse drag operation. The select region for a command
can also be set by specifying a line range in the fashion of ed, but
Sam gains considerable power from the fact that the user can select at
finer granularity than a line range. Because the mouse is available
to do selections and rapidly change focus between buffers (including
the command buffer), Sam needs no equivalent of the default (command)
mode of vi. The hundreds of extended vi commands are unnecessary and,
therefore, omitted. Overall, Sam adds only about a dozen commands to
the seventeen or so in the ed set, for a total of about thirty.
Four of the new commands in Sam join two inherited from
ed(1)
and
vi(1),
as ways to apply regular expressions to the task of selecting files
and file regions to operate on. These provide limited but effective
loop and conditional facilities to the command language. There is,
however, no way to name or parameterize command-language
procedures. Nor can the language do interactive control of a
subprocess.
An interesting feature of Sam is that it's split into two parts.
separating a back end that manipulates files and does searches from a
front end that handles the screen interface. This instance of the
“separated engine and interface” chapter has the
immediate practical benefit that, though the program has a GUI, it
can run easily over a low-bandwidth connection to edit files on a
remote server. Also, the front and back ends can be retargeted
relatively easily.
Sam, like recent versions of vi, has infinite undo. By design,
it supports neither rich-text editing, nor output parsing, nor
subprocess interaction.
[an error occurred while processing this directive]
|