Annotation of lucent/sys/man/1/acme, revision 1.1

1.1     ! root        1: .TH ACME 1
        !             2: .SH NAME
        !             3: acme, win, awd \- interactive text windows
        !             4: .SH SYNOPSIS
        !             5: .B acme
        !             6: [
        !             7: .B -f
        !             8: .I varfont
        !             9: ]
        !            10: [
        !            11: .B -F
        !            12: .I fixfont
        !            13: ]
        !            14: [
        !            15: .B -c
        !            16: .I ncol
        !            17: ]
        !            18: [
        !            19: .B -b
        !            20: ]
        !            21: [
        !            22: .B -l
        !            23: .I file
        !            24: |
        !            25: .I file
        !            26: \&... ]
        !            27: .LP
        !            28: .B win
        !            29: [
        !            30: .I command
        !            31: ]
        !            32: .LP
        !            33: .B awd
        !            34: [
        !            35: .I label
        !            36: ]
        !            37: .SH DESCRIPTION
        !            38: .I Acme
        !            39: manages windows of text that may be edited interactively or by external programs.
        !            40: The interactive interface uses the keyboard and mouse; external programs
        !            41: use a set of files served by
        !            42: .IR acme ;
        !            43: these are discussed in
        !            44: .IR acme (4).
        !            45: .PP
        !            46: Any named
        !            47: .I files
        !            48: are read into
        !            49: .I acme
        !            50: windows before
        !            51: .I acme
        !            52: accepts input.
        !            53: With the
        !            54: .B -l
        !            55: option, the state of the entire system is loaded
        !            56: from
        !            57: .IR file ,
        !            58: which should have been created by a
        !            59: .B Dump
        !            60: command (q.v.),
        !            61: and subsequent
        !            62: .I file
        !            63: names are ignored.
        !            64: Plain files display as text; directories display as columnated lists of the
        !            65: names of their components, as in
        !            66: .B "ls -p directory|mc
        !            67: except that the names of subdirectories have a slash appended.
        !            68: .PP
        !            69: The
        !            70: .B -f
        !            71: .RB ( -F )
        !            72: option sets the default variable-pitch (fixed-pitch)
        !            73: font; the default is
        !            74: .B /lib/font/bit/lucidasans/euro.8.font
        !            75: .RB ( \&.../lucm/unicode.9.font ).
        !            76: Tab intervals are set to the width of 4 numeral zeros in the variable-pitch font.
        !            77: .PP
        !            78: .SS Windows
        !            79: .I Acme
        !            80: windows are in two parts: a one-line
        !            81: .I tag
        !            82: above a multi-line
        !            83: .IR body .
        !            84: The body typically contains an image of a file, as in
        !            85: .IR sam (1),
        !            86: or the output of a
        !            87: program, as in an
        !            88: .IR 8½ (1)
        !            89: window.
        !            90: The tag contains a number of
        !            91: blank-separated words, followed by a vertical bar character, followed by anything.
        !            92: The first word is the name of the window, typically the name of the associated
        !            93: file or directory, and the other words are commands available in that window.
        !            94: Any text may be added after the bar; examples are strings to search for or
        !            95: commands to execute in that window.
        !            96: Changes to the text left of the bar will be ignored,
        !            97: unless the result is to change the name of the
        !            98: window.
        !            99: .PP
        !           100: If a window holds a directory, the name (first word of the tag) will end with
        !           101: a slash.
        !           102: .SS Scrolling
        !           103: Each window has a scroll bar to the left of the body.
        !           104: The scroll bar behaves much as in
        !           105: .IR sam (1)
        !           106: or
        !           107: .IR 8½ (1)
        !           108: except that scrolling occurs when the button is pressed, rather than released,
        !           109: and continues
        !           110: as long as the mouse button is held down in the scroll bar.
        !           111: For example, to scroll slowly through a file,
        !           112: hold button 3 down near the top of the scroll bar.  Moving the mouse
        !           113: down the scroll bar speeds up the rate of scrolling.
        !           114: .SS Layout
        !           115: .I Acme
        !           116: windows are arranged in columns.  By default, it creates two columns when starting;
        !           117: this can be overridden with the
        !           118: .B -c
        !           119: option.
        !           120: Placement is automatic but may be adjusted
        !           121: using the
        !           122: .I layout box
        !           123: in the upper left corner of each window and column.
        !           124: Pressing and holding any mouse button in the box drags
        !           125: the associated window or column.
        !           126: For windows, just
        !           127: clicking in the layout box grows the window in place: button 1
        !           128: grows it a little, button 2 grows it as much as it can, still leaving all other
        !           129: tags in that column visible, and button 3 takes over the column completely,
        !           130: temporarily hiding other windows in the column.
        !           131: (They will return
        !           132: .I en masse
        !           133: if any of them needs attention.)
        !           134: The layout box in a window is normally white; when it is black in the center,
        !           135: it records that the file is `dirty':
        !           136: .I Acme
        !           137: believes it is modified from its original
        !           138: contents.
        !           139: .PP
        !           140: Tags exist at the top of each column and across the whole display.
        !           141: .I Acme
        !           142: pre-loads them with useful commands.
        !           143: Also, the tag across the top maintains a list of executing long-running commands.
        !           144: .SS Typing
        !           145: The behavior of typed text is similar to that in
        !           146: .IR 8½ (1)
        !           147: except that the characters are delivered to the tag or body under the mouse; there is no
        !           148: `click to type'.
        !           149: (The experimental option
        !           150: .B -b
        !           151: causes typing to go to the most recently clicked-at or made window.)
        !           152: The usual backspacing conventions apply.
        !           153: As in
        !           154: .IR sam (1)
        !           155: but not
        !           156: .IR 8½ ,
        !           157: the ESC key selects the text typed since the last mouse action,
        !           158: a feature particularly useful when executing commands.
        !           159: A side effect is that typing ESC with text already selected is identical
        !           160: to a
        !           161: .B Cut
        !           162: command
        !           163: .RI ( q.v. ).
        !           164: .PP
        !           165: Most text, including the names of windows, may be edited uniformly.
        !           166: The only exception is that the command names to the
        !           167: left of the bar in a tag are maintained automatically; changes to them are repaired
        !           168: by
        !           169: .IR acme .
        !           170: .SS "Directory context
        !           171: Each window's tag names a directory: explicitly if the window
        !           172: holds a directory; implicitly if it holds a regular file
        !           173: (e.g. the directory
        !           174: .B /adm
        !           175: if the window holds
        !           176: .BR /adm/users ).
        !           177: This directory provides a
        !           178: .I context
        !           179: for interpreting file names in that window.
        !           180: For example, the string
        !           181: .B users
        !           182: in a window labeled
        !           183: .B /adm/
        !           184: or
        !           185: .B /adm/keys
        !           186: will be interpreted as the file name
        !           187: .BR /adm/users .
        !           188: The directory is defined purely textually, so it can be a non-existent
        !           189: directory or a real directory associated with a non-existent file
        !           190: (e.g.
        !           191: .BR /adm/not-a-file ).
        !           192: File names beginning with a slash
        !           193: are assumed to be absolute file names.
        !           194: .SS Errors
        !           195: Windows whose names begin with
        !           196: .B -
        !           197: or
        !           198: .B +
        !           199: conventionally hold diagnostics and other data
        !           200: not directly associated with files.
        !           201: A window labeled
        !           202: .B +Errors
        !           203: receives all diagnostics produced by
        !           204: .I acme
        !           205: itself.
        !           206: Diagnostics from commands run by
        !           207: .I acme
        !           208: appear in a window named
        !           209: .IB directory /+Errors
        !           210: where
        !           211: .I directory
        !           212: is identified by the context of the command.
        !           213: These error windows are created when needed.
        !           214: .SS "Mouse button 1
        !           215: Mouse button 1 selects text just as in
        !           216: .IR sam (1)
        !           217: or
        !           218: .IR 8½ (1) ,
        !           219: including the usual double-clicking conventions.
        !           220: .SS "Mouse button 2
        !           221: By an
        !           222: action similar to selecting text with button 1,
        !           223: button 2 indicates text to execute as a command.
        !           224: If the indicated text has multiple white-space-separated words,
        !           225: the first is the command name and the second and subsequent
        !           226: are its arguments.
        !           227: If button 2 is `clicked'\(emindicates a null string\(em\c
        !           228: .I acme
        !           229: .I expands
        !           230: the indicated text to find a command to run:
        !           231: if the click is within button-1-selected text,
        !           232: .I acme
        !           233: takes that selection as the command;
        !           234: otherwise it takes the largest string of valid file name characters containing the click.
        !           235: Valid file name characters are alphanumerics and
        !           236: .B _
        !           237: .B .
        !           238: .B -
        !           239: .B +
        !           240: .BR / .
        !           241: This behavior is similar to double-clicking with button 1 but,
        !           242: because a null command is meaningless, only a single click is required.
        !           243: .PP
        !           244: Some commands, all by convention starting with a capital letter, are
        !           245: .I built-ins
        !           246: that are executed directly by
        !           247: .IR acme :
        !           248: .TP
        !           249: .B Cut
        !           250: Delete most recently selected text and place in snarf buffer.
        !           251: .TP
        !           252: .B Del
        !           253: Delete window.  If window is dirty, instead print a warning; a second
        !           254: .B Del
        !           255: will succeed.
        !           256: .TP
        !           257: .B Delcol
        !           258: Delete column and all its windows, after checking that windows are not dirty.
        !           259: .TP
        !           260: .B Delete
        !           261: Delete window without checking for dirtiness.
        !           262: .TP
        !           263: .B Dump
        !           264: Write the state of
        !           265: .I acme
        !           266: to the file name, if specified, or
        !           267: .B $home/acme.dump
        !           268: by default.
        !           269: .TP
        !           270: .B Exit
        !           271: Exit
        !           272: .I acme
        !           273: after checking that windows are not dirty.
        !           274: .TP
        !           275: .B Font
        !           276: With no arguments, change the font of the associated window from fixed-spaced to
        !           277: proportional-spaced or
        !           278: .I vice versa\f1.
        !           279: Given a file name argument, change the font of the window to that stored in the named file.
        !           280: If the file name argument is prefixed by
        !           281: .B var
        !           282: .RB ( fix ),
        !           283: also set the default proportional-spaced (fixed-spaced) font for future use to that font.
        !           284: Other existing windows are unaffected.
        !           285: .TP
        !           286: .B Get
        !           287: Load file into window, replacing previous contents (after checking for dirtiness as in
        !           288: .BR Del ).
        !           289: With no argument, use the existing file name of the window.
        !           290: Given an argument, use that file but do not change the window's file name.
        !           291: .TP
        !           292: .B ID
        !           293: Print window ID number
        !           294: .RI ( q.v. ).
        !           295: .TP
        !           296: .B Incl
        !           297: When opening `include' files
        !           298: (those enclosed in
        !           299: .BR <> )
        !           300: with button 3,
        !           301: .I acme
        !           302: searches in directories
        !           303: .B /$objtype/include
        !           304: and
        !           305: .B /sys/include
        !           306: and, for
        !           307: .IR alef (1)
        !           308: programs,
        !           309: .BR /sys/include/alef .
        !           310: .B Incl
        !           311: adds its arguments to a supplementary list of include directories, analogous to
        !           312: the
        !           313: .B -I
        !           314: option to the compilers.
        !           315: This list is per-window and is inherited when windows are created by actions in that window, so
        !           316: .I Incl
        !           317: is most usefully applied to a directory containing relevant source.
        !           318: With no arguments,
        !           319: .I Incl
        !           320: prints the supplementary list.
        !           321: .TP
        !           322: .B Kill
        !           323: Send a
        !           324: .B kill
        !           325: note to
        !           326: .IR acme -initiated
        !           327: commands named as arguments.
        !           328: .TP
        !           329: .B Local
        !           330: When prefixed to a command
        !           331: run the
        !           332: command in the same file name space and environment variable group as
        !           333: .IR acme .
        !           334: The environment of the command
        !           335: is restricted but is sufficient to run
        !           336: .IR bind (1),
        !           337: .IR 9fs
        !           338: (see
        !           339: .IR srv (4)),
        !           340: .IR import (4),
        !           341: etc.,
        !           342: and to set environment variables such as
        !           343: .BR $objtype .
        !           344: .TP
        !           345: .B Load
        !           346: Restore the state of
        !           347: .I acme
        !           348: from a file (default
        !           349: .BR $home/acme.dump )
        !           350: created by the
        !           351: .B Dump
        !           352: command.
        !           353: .TP
        !           354: .B Look
        !           355: Search in body for occurrence of literal text indicated by the argument or,
        !           356: if none is given, by the selected text in the body.
        !           357: .TP
        !           358: .B New
        !           359: Make new window.  With arguments, load the named files into windows.
        !           360: .TP
        !           361: .B Newcol
        !           362: Make new column.
        !           363: .TP
        !           364: .B Paste
        !           365: Replace most recently selected text with contents of snarf buffer.
        !           366: .TP
        !           367: .B Put
        !           368: Write window to the named file.
        !           369: With no argument, write to the file named in the tag of the window.
        !           370: .TP
        !           371: .B Putall
        !           372: Write all dirty windows whose names indicate existing regular files.
        !           373: .TP
        !           374: .B Redo
        !           375: Complement of
        !           376: .BR Undo .
        !           377: .TP
        !           378: .B Send
        !           379: Append selected text or snarf buffer to end of body; used mainly with
        !           380: .IR win .
        !           381: .TP
        !           382: .B Snarf
        !           383: Place selected text in snarf buffer.
        !           384: .TP
        !           385: .B Sort
        !           386: Arrange the windows in the column from top to bottom in lexicographical
        !           387: order based on their names.
        !           388: .TP
        !           389: .B Undo
        !           390: Undo last textual change or set of changes.
        !           391: .TP
        !           392: .B Zerox
        !           393: Create a copy of the window containing most recently selected text.
        !           394: .PP
        !           395: A common place to store text for commands is in the tag; in fact
        !           396: .I acme
        !           397: maintains a set of commands appropriate to the state of the window
        !           398: to the left of the bar in the tag.
        !           399: .PP
        !           400: If the text indicated with button 2 is not a recognized built-in, it is executed as
        !           401: a shell command.  For example, indicating
        !           402: .B date
        !           403: with button 2 runs
        !           404: .IR date (1).
        !           405: The standard
        !           406: and error outputs of commands are sent to the error window associated with
        !           407: the directory from which the command was run, which will be created if
        !           408: necessary.
        !           409: For example, in a window
        !           410: .B /adm/users
        !           411: executing
        !           412: .B pwd
        !           413: will produce the output
        !           414: .B /adm
        !           415: in a (possibly newly-created) window labeled
        !           416: .BR /adm/+Errors ;
        !           417: in a window containing
        !           418: .B /sys/src/cmd/sam/sam.c
        !           419: executing
        !           420: .B mk
        !           421: will run
        !           422: .IR mk (1)
        !           423: in
        !           424: .BR /sys/src/cmd/sam ,
        !           425: producing output in a window labeled
        !           426: .BR /sys/src/cmd/sam/+Errors .
        !           427: .SS "Mouse button 3
        !           428: Pointing at text with button 3 instructs
        !           429: .I acme
        !           430: to locate or acquire the file, string, etc. described by the indicated text and
        !           431: its context.
        !           432: This description follows the actions taken when
        !           433: button 3 is released after sweeping out some text.
        !           434: In the description,
        !           435: .I text
        !           436: refers to the text of the original sweep or, if it was null, the result of
        !           437: applying the same expansion rules that apply to button 2 actions.
        !           438: .PP
        !           439: If the text names an existing window,
        !           440: .I acme
        !           441: moves the mouse cursor to the selected text in the body of that window.
        !           442: If the text names an existing file with no associated window,
        !           443: .I acme
        !           444: loads the file into a new window and moves the mouse there.
        !           445: If the text is a file name contained in angle brackets,
        !           446: .I acme
        !           447: loads the indicated include file from the directory appropriate to the
        !           448: suffix of the file name of the window holding the text.
        !           449: (The
        !           450: .B Incl
        !           451: command adds directories to the standard list.)
        !           452: .PP
        !           453: If the text begins with a colon, it is taken to be an address, in
        !           454: the style of
        !           455: .IR sam (1),
        !           456: within the body of the window containing the text.
        !           457: The address is evaluated, the resulting text highlighted, and the mouse moved to it.
        !           458: Thus, in
        !           459: .IR acme ,
        !           460: one must type
        !           461: .B :/regexp
        !           462: or
        !           463: .B :127
        !           464: not just
        !           465: .B /regexp
        !           466: or
        !           467: .BR 127 .
        !           468: (There is an easier way to locate literal text; see below.)
        !           469: .PP
        !           470: If the text is a file name followed by a colon and an address,
        !           471: .I acme
        !           472: loads the file and evaluates the address.  For example, clicking button 3 anywhere
        !           473: in the text
        !           474: .B file.c:27
        !           475: will open
        !           476: .BR file.c ,
        !           477: select line
        !           478: 27, and put the mouse at the beginning of the line.  The rules about Error
        !           479: files, directories, and so on all combine to make this an efficient way to
        !           480: investigate errors from compilers, etc.
        !           481: .PP
        !           482: If the text is not an address or file, it is taken to
        !           483: be literal text, which is then searched for in the body of the window
        !           484: in which button 3 was clicked.  If a match is found, it is selected and the mouse is
        !           485: moved there.  Thus, to search for occurrences of a word in a file,
        !           486: just click button 3 on the word.  Because of the rule of using the
        !           487: selection as the button 3 action, subsequent clicks will find subsequent
        !           488: occurrences without moving the mouse.
        !           489: .PP
        !           490: In all these actions, the mouse motion is not done if the text is a null string
        !           491: within a non-null selected string in the tag, so that (for example) complex regular expressions
        !           492: may be selected and applied repeatedly to the
        !           493: body by just clicking button 3 over them.
        !           494: .SS "Chords of mouse buttons
        !           495: Several operations are bound to multiple-button actions.
        !           496: After selecting text, with button 1 still down, pressing button 2
        !           497: executes
        !           498: .B Cut
        !           499: and button 3 executes
        !           500: .BR Paste .
        !           501: After clicking one button, the other undoes
        !           502: the first; thus (while holding down button 1) 2 followed by 3 is a
        !           503: .B Snarf
        !           504: that leaves the file undirtied;
        !           505: 3 followed by 2 is a no-op.
        !           506: These actions also apply to text selected by double-clicking because
        !           507: the double-click expansion is made when the second
        !           508: click starts, not when it ends.
        !           509: .PP
        !           510: Commands may be given extra arguments by a mouse chord with buttons 2 and 1.
        !           511: While holding down button 2 on text to be executed as a command, clicking button 1
        !           512: appends the text last pointed to by button 1 as a distinct final argument.
        !           513: For example, to search for literal
        !           514: .B text
        !           515: one may execute
        !           516: .B Look text
        !           517: with button 2 or instead point at
        !           518: .B text
        !           519: with button 1 in any window, release button 1,
        !           520: then execute
        !           521: .BR Look ,
        !           522: clicking button 1 while 2 is held down.
        !           523: .PP
        !           524: When an external command (e.g.
        !           525: .IR echo (1))
        !           526: is executed this way, the extra argument is passed as expected and an
        !           527: environment variable
        !           528: .B $acmeaddr
        !           529: is created that holds, in the form interpreted by button 3,
        !           530: the fully-qualified address of the extra argument.
        !           531: .SS "Support programs
        !           532: .I Win
        !           533: creates a new
        !           534: .I acme
        !           535: window and runs a
        !           536: .I command
        !           537: (default
        !           538: .BR /bin/rc )
        !           539: in it, turning the window into something analogous to an
        !           540: .IR 8½ (1)
        !           541: window.
        !           542: Executing text in a
        !           543: .I win
        !           544: window with button
        !           545: 2 is similar to using
        !           546: .BR Send .
        !           547: .PP
        !           548: .I Awd
        !           549: loads the tag line of its window with the directory in which it's running, suffixed
        !           550: .BI - label
        !           551: (default
        !           552: .BR rc );
        !           553: it is
        !           554: intended to be executed by a
        !           555: .B cd
        !           556: function for use in
        !           557: .I win
        !           558: windows.  An example definition is
        !           559: .EX
        !           560:        fn cd { builtin cd $1 && awd $sysname }
        !           561: .EE
        !           562: .SS "Applications and guide files
        !           563: In the directory
        !           564: .B /acme
        !           565: live several subdirectories, each corresponding to a program or
        !           566: set of related programs that employ
        !           567: .I acme's
        !           568: user interface.
        !           569: Each subdirectory includes source, binaries, and a
        !           570: .B readme
        !           571: file for further information.
        !           572: It also includes a
        !           573: .BR guide ,
        !           574: a text file holding sample commands to invoke the programs.
        !           575: The idea is to find an example in the guide that best matches
        !           576: the job at hand, edit it to suit, and execute it.
        !           577: .PP
        !           578: Whenever a command is executed by
        !           579: .IR acme ,
        !           580: the default search path includes the directory of the window containing
        !           581: the command and its subdirectory
        !           582: .BR $cputype .
        !           583: The program directories in
        !           584: .B /acme
        !           585: contain appropriately labeled subdirectories of binaries,
        !           586: so commands named
        !           587: in the guide files will be found automatically when run.
        !           588: Also,
        !           589: .I acme
        !           590: binds the directories
        !           591: .B /acme/bin
        !           592: and
        !           593: .B /acme/bin/$cputype
        !           594: to the end of
        !           595: .B /bin
        !           596: when it starts; this is where
        !           597: .IR acme -specific
        !           598: programs such as
        !           599: .I win
        !           600: and
        !           601: .I awd
        !           602: reside.
        !           603: .SH FILES
        !           604: .TF $home/acme.dump
        !           605: .TP
        !           606: .B $home/acme.dump
        !           607: default file for
        !           608: .B Dump
        !           609: and
        !           610: .BR Load ;
        !           611: also where state is written if
        !           612: .I acme
        !           613: dies or is killed unexpectedly, e.g. by deleting its window.
        !           614: .TP
        !           615: .B /acme/*/guide
        !           616: template files for applications
        !           617: .TP
        !           618: .B /acme/*/readme
        !           619: informal documentation for applications
        !           620: .TP
        !           621: .B /acme/*/src
        !           622: source for applications
        !           623: .TP
        !           624: .B /acme/*/mips
        !           625: MIPS-specific binaries for applications
        !           626: .SH SOURCE
        !           627: .B /sys/src/cmd/acme
        !           628: .br
        !           629: .B /acme/bin/src/win.l
        !           630: .br
        !           631: .B /sys/src/cmd/awd.c
        !           632: .SH SEE ALSO
        !           633: .IR acme (4)
        !           634: .br
        !           635: Rob Pike,
        !           636: .I
        !           637: Acme: A User Interface for Programmers.
        !           638: .SH BUGS
        !           639: Because of a bug in
        !           640: .IR 8½ (1),
        !           641: when returning to the
        !           642: .I acme
        !           643: window after working in another,
        !           644: .I acme
        !           645: may not know the correct mouse position
        !           646: until a button is clicked.
        !           647: .PP
        !           648: With the
        !           649: .B -l
        !           650: option or
        !           651: .B Load
        !           652: command,
        !           653: the recreation of windows under control of external programs
        !           654: such as
        !           655: .I win
        !           656: is just to rerun the command; information may be lost.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.