.TH ACME 4
.SH NAME
acme \- control files for text windows
.SH SYNOPSIS
.B acme
[
.B -f
.I varfont
] [
.B -F
.I fixfont
]
[
.I file
\&... ]
.SH DESCRIPTION
The text window system
.IR acme (1)
serves a variety of files for reading, writing, and controlling
windows.
Some of them are virtual versions of system files for dealing
with the virtual console; others control operations
of 
.I acme
itself.
When a command is run under
.IR acme ,
a directory holding these files is posted as the 9P service
.B acme
(using
.IR 9pserve (4)).
.PP
Some of these files supply virtual versions of services available from the underlying
environment, in particular the character terminal files in Plan 9's
\fIcons\fR(3).
(Unlike in Plan 9's \fIrio\fR(1),
each command under
.I acme
sees the same set of files; there is not a distinct
.B /dev/cons
for each window.)
Other files are unique to
.IR acme .
.TP
.B acme
is a subdirectory used by
.B win
(see
.IR acme (1))
as a mount point for the
.I acme
files associated with the window in which
.B win
is running.
It has no specific function under
.I acme
itself.
.TP
.B cons
is the standard and diagnostic output file for all commands
run under
.IR acme .
(Input for commands is redirected to
.BR /dev/null .)
Text written to
.B cons
appears in a window labeled
.IB dir /+Errors\f1,
where
.I dir
is the directory in which the command
was run.
The window is created if necessary, but not until text is actually written.
.TP
.B consctl
is an empty unwritable file present only for compatibility; there is no way
to turn off `echo', for example, under
.IR acme .
.TP
.B index
holds a sequence of lines of text, one per window.  Each line has 5 decimal numbers,
each formatted in 11 characters plus a blank\(emthe window ID;
number of characters (runes) in the tag;
number of characters in the body;
a 1 if the window is a directory, 0 otherwise;
and a 1 if the window is modified, 0
otherwise\(emfollowed by the tag up to a newline if present.
Thus at character position 5×12 starts the name of the window.
If a file has multiple zeroxed windows open,
only the most recently used will appear in the
.B index
file.
.TP
.B label
is an empty file, writable without effect, present only for compatibility with
.BR rio .
.TP
.B log
reports a log of window operations since the opening of the
.B log
file.
Each line describes a single operation using three fields separated by single spaces:
the decimal window ID, the operation, and the window name.
Reading from
.B log
blocks until there is an operation to report, so reading the file
can be used to monitor editor activity and react to changes.
The reported operations are
.L new
(window creation),
.L zerox
(window creation via zerox),
.LR get ,
.LR put ,
and
.LR del
(window deletion).
The window name can be the empty string; in particular it is empty in
.L new
log entries corresponding to windows created by external programs.
.TP
.B new
is a directory analogous to the numbered directories
.RI ( q.v. ).
Accessing any
file in
.B new
creates a new window.  Thus to cause text to appear in a new window,
write it to
.BR /dev/new/body .
For more control, open
.BR /dev/new/ctl
and use the interface described below.
.LP
.PP
Each
.I acme
window has associated a directory numbered by its ID.
Window IDs are chosen sequentially and may be discovered by the
.B ID
command, by
reading the
.B ctl
file, or
indirectly through the
.B index
file.  The files in the numbered directories are as follows.
.TP
.B addr
may be written with any textual address (line number, regular expression, etc.),
in the format understood by button 3 but without the initial colon, including compound addresses,
to set the address for text accessed through the
.B data
file.
When read, it returns the value of the address that would next be read
or written through the
.B data
file, in the format
.BI # m ,# n
where
.I m
and
.I n
are character (not byte) offsets.  If
.I m
and
.I n
are identical, the format is just
.BI # m\f1.
Thus a regular expression may be evaluated by writing it to
.B addr
and reading it back.
The
.B addr
address has no effect on the user's selection of text.
.TP
.B body
holds contents of the window body.  It may be read at any byte offset.
Text written to
.B body
is always appended; the file offset is ignored.
.TP
.B ctl
may be read to recover the five numbers as held in the
.B index
file, described above, plus three more fields: the width of the
window in pixels, the name of the font used in the window,
and the width of a tab character in pixels.
Text messages may be written to
.B ctl
to affect the window.
Each message is terminated by a newline and multiple
messages may be sent in a single write.
.RS .5i
.TF limit=addr
.TP
.B addr=dot
Set the
.B addr
address to that of the user's selected text in the window.
.TP
.B clean
Mark the window clean as though it has just been written.
.TP
.B dirty
Mark the window dirty, the opposite of clean.
.TP
.B cleartag
Remove all text in the tag after the vertical bar.
.TP
.B del
Equivalent to the
.B Del
interactive command.
.TP
.B delete
Equivalent to the
.B Delete
interactive command.
.TP
.B dot=addr
Set the user's selected text in the window to the text addressed by the
.B addr
address.
.TP
.BI dump " command
Set the command string to recreate the window from a dump file.
.TP
.BI dumpdir " directory
Set the directory in which to run the command to recreate the window from a dump file.
.TP
.B get
Equivalent to the
.B Get
interactive command with no arguments; accepts no arguments.
.TP
.B limit=addr
When the
.B ctl
file is first opened, regular expression context searches in
.B addr
addresses examine the whole file; this message restricts subsequent
searches to the current
.B addr
address.
.TP
.B mark
Cancel
.BR nomark ,
returning the window to the usual state wherein each modification to the
body must be undone individually.
.TP
.BI name " name
Set the name of the window to
.IR name .
.TP
.B nomark
Turn off automatic `marking' of changes, so a set of related changes
may be undone in a single
.B Undo
interactive command.
.TP
.B put
Equivalent to the
.B Put
interactive command with no arguments; accepts no arguments.
.TP
.B show
Guarantee at least some of the selected text is visible on the display.
.RE
.PD
.TP
.B data
is used in conjunction with
.B addr
for random access to the contents of the body.
The file offset is ignored when writing the
.B data
file; instead the location of the data to be read or written is determined by the state of the
.B addr
file.
Text, which must contain only whole characters (no `partial runes'),
written to
.B data
replaces the characters addressed by the
.B addr
file and sets the address to the null string at the end of the written text.
A read from
.B data
returns as many whole characters as the read count will permit starting
at the beginning of the
.B addr
address (the end of the address has no effect)
and sets the address to the null string at the end of the returned
characters.
.TP
.B errors
Writing to the
.B errors
file appends to the body of the
.IB dir /+Errors
window, where
.I dir
is the directory currently named in the tag.
The window is created if necessary,
but not until text is actually written.
.TP
.B event
When a window's
.B event
file is open, changes to the window occur as always but the
actions are also reported as
messages to the reader of the file.  Also, user actions with buttons 2 and 3
(other than chorded
.B Cut
and
.BR Paste ,
which behave normally) have no immediate effect on the window;
it is expected that the program reading the
.B event
file will interpret them.
The messages have a fixed format:
a character indicating the origin or cause of the action,
a character indicating the type of the action,
four free-format blank-terminated decimal numbers,
optional text, and a newline.
The first and second numbers are the character addresses of the action,
the third is a flag,
and the final is a count of the characters in the optional text, which
may itself contain newlines.
The origin characters are
.B E
for writes to the
.B body
or
.B tag
file,
.B F
for actions through the window's other files,
.B K
for the keyboard, and
.B M
for the mouse.
The type characters are
.B D
for text deleted from the body,
.B d
for text deleted from the tag,
.B I
for text inserted to the body,
.B i
for text inserted to the tag,
.B L
for a button 3 action in the body,
.B l
for a button 3 action in the tag,
.B X
for a button 2 action in the body, and
.B x
for a button 2 action in the tag.
.IP
If the relevant text has less than 256 characters, it is included in the message;
otherwise it is elided, the fourth number is 0, and the program must read
it from the
.B data
file if needed.  No text is sent on a
.B D
or
.B d
message.
.IP
For
.BR D ,
.BR d ,
.BR I ,
and
.BR i
the flag is always zero.
For
.BR X
and
.BR x ,
the flag is a bitwise OR (reported decimally) of the following:
1 if the text indicated is recognized as an
.I acme
built-in command;
2 if the text indicated is a null string that has a non-null expansion;
if so, another complete message will follow describing the expansion
exactly as if it had been indicated explicitly (its flag will always be 0);
8 if the command has an extra (chorded) argument; if so,
two more complete messages will follow reporting the argument (with
all numbers 0 except the character count) and where it originated, in the form of
a fully-qualified button 3 style address.
.IP
For
.B L
and
.BR l ,
the flag is the bitwise OR of the following:
1 if
.I acme
can interpret the action without loading a new file;
2 if a second (post-expansion) message follows, analogous to that with
.B X
messages;
4 if the text is a file or window name (perhaps with address) rather than
plain literal text.
.IP
For messages with the 1 bit on in the flag,
writing the message back to the
.B event
file, but with the flag, count, and text omitted,
will cause the action to be applied to the file exactly as it would
have been if the
.B event
file had not been open.
.TP
.B tag
holds contents of the window tag.  It may be read at any byte offset.
Text written to
.B tag
is always appended; the file offset is ignored.
.TP
.B xdata
The
.B xdata
file like
.B data
except that reads stop at the end address.
.SH SOURCE
.B \*9/src/cmd/acme
.SH SEE ALSO
.IR rio (1),
.IR acme (1)
