| .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) |