NAME¶
wily, win, awd - interactive text windows
SYNOPSIS¶
wily [
-f varfont ] [
-F fixfont ] [
-c ncol ]
win [
command ]
awd [
label ]
NOTE¶
This manual page is out of date. The original documentation is in
/usr/share/doc/wily
DESCRIPTION¶
Wily manages windows of text that may be edited interactively or by
external programs. The interactive interface uses a different interface.
Any named
files are read into
wily windows before
wily
accepts input. Plain files display as text; directories display as columnated
lists of the names of their components, as in
ls -p directory|mc except
that the names of subdirectories have a slash appended.
The
-f (
-F) option sets the default variable-pitch (fixed-pitch)
font; the default is
/lib/font/bit/lucidasans/euro.8.font
(
.../lucm/unicode.9.font). Tab intervals are set to the width of 4(8)
numeral zeros in the variable-pitch font.
Windows¶
Wily windows are in two parts: a short
tag above a multi-line
body. The body typically contains an image of a file, as in
sam(1), or the output of a program, as in an
8½(1)
window. The tag contains a number of blank-separated words, followed by a
vertical bar character, followed by anything. The first word is the name of
the window, typically the name of the associated file or directory, and the
other words are commands available in that window. Any text may be added after
the bar; examples are strings to search for or commands to execute in that
window.
If a window holds a directory, the name (first word of the tag) will end with a
slash.
Each window has a scroll bar to the left of the body. The scroll bar behaves
much as in
sam(1) or
8½(1) except that scrolling occurs
when the button is pressed, rather than released, and continues as long as the
mouse button is held down in the scroll bar. For example, to scroll slowly
through a file, hold button 3 down near the top of the scroll bar. Moving the
mouse down the scroll bar speeds up the rate of scrolling.
Layout¶
Wily windows are arranged in columns. By default, it creates two columns
when starting; this can be overridden with the
-c option. Placement is
automatic but may be adjusted using the
layout box in the upper left
corner of each window and column. Pressing and holding any mouse button in the
box drags the associated window or column. For windows, just clicking in the
layout box grows the window in place: button 1 grows it a little, button 2
grows it as much as it can, still leaving all other tags in that column
visible, and button 3 takes over the column completely, temporarily hiding
other windows in the column. (They will return
en masse if any of them
needs attention.) The layout box in a window is normally white; when it is
black in the center, it records that the file is `dirty':
Wily believes
it is modified from its original contents.
Tags exist at the top of each column and across the whole display.
Wily
pre-loads them with useful commands. Also, the tag across the top maintains a
list of executing long-running commands.
Typing¶
The behavior of typed text is similar to that in
8½(1) except that
the characters are delivered to the tag or body under the mouse; there is no
`click to type'. The usual backspacing conventions apply. As in
sam(1)
but not
8½, the ESC key selects the text typed since the last
mouse action, a feature particularly useful when executing commands. A side
effect is that typing ESC with text already selected is identical to a
Cut command (
q.v.).
All text, including the names of windows, may be edited uniformly.
Directory context¶
Each window's tag names a directory: explicitly if the window holds a directory;
implicitly if it holds a regular file (e.g. the directory
/adm if the
window holds
/adm/users). This directory provides a
context for
interpreting file names in that window. For example, the string
users
in a window labeled
/adm/ or
/adm/keys will be interpreted as
the file name
/adm/users. The directory is defined purely textually, so
it can be a non-existent directory or a real directory associated with a
non-existent file (e.g.
/adm/not-a-file). File names beginning with a
slash are assumed to be absolute file names.
Errors¶
Windows whose names begin with
- or
+ conventionally hold
diagnostics and other data not directly associated with files. A window
labeled
+Errors receives all diagnostics produced by
wily
itself. Diagnostics from commands run by
wily appear in a window named
directory/+Errors where
directory is identified by the
context of the command. These error windows are created when needed.
Mouse button 1 selects text just as in
sam(1) or
8½(1)
, including the usual double-clicking conventions.
By an action similar to selecting text with button 1, button 2 indicates text to
execute as a command. If the indicated text has multiple white-space-separated
words, the first is the command name and the second and subsequent are its
arguments. If button 2 is `clicked'—indicates a null
string—
wily expands the indicated text to find a command
to run: if the click is within button-1-selected text,
wily takes that
selection as the command; otherwise it takes the largest string of valid file
name characters containing the click. Valid file name characters are
alphanumerics and
_ . - + /. This behavior
is similar to double-clicking with button 1 but, because a null command is
meaningless, only a single click is required.
Some commands, all by convention starting with a capital letter, are
built-ins that are executed directly by
wily:
- Cut
- Delete most recently selected text and place in snarf buffer.
- Del
- Delete window. If window is dirty, saves a backup of the file.
- Delcol
- Delete column and all its windows, after checking that windows are not
dirty.
- Quit
- Exit wily after checking that windows are not dirty.
- Font
- With no arguments, change the font of the associated window or column from
fixed-spaced to proportional-spaced or vice versa. Given a font
name argument, change the font of the window to the named font. Other
existing windows are unaffected.
- Get
- Load file into window, replacing previous contents (after checking for
dirtiness as in Del). With no argument, use the existing file name
of the window. Given an argument, use that file but do not change the
window's file name.
- Kill
- Send a kill note to wily-initiated commands named as
arguments.
- Look
- Search in body for occurrence of literal text indicated by the argument
or, if none is given, by the selected text in the body.
- New
- Make new window. With arguments, load the named files into windows.
- Newcol
- Make new column.
- Paste
- Replace most recently selected text with contents of snarf buffer.
- Put
- Write window to the named file. With no argument, write to the file named
in the tag of the window.
- Putall
- Write all dirty windows whose names indicate existing regular files.
- Redo
- Complement of Undo.
- Send
- Append selected text or snarf buffer to end of body; used mainly with
win.
- Snarf
- Place selected text in snarf buffer.
- Sort
- Arrange the windows in the column from top to bottom in lexicographical
order based on their names.
- Split
- Create a copy of the window containing most recently selected text.
- Undo
- Undo last textual change or set of changes.
A common place to store text for commands is in the tag; in fact
wily
maintains a set of commands appropriate to the state of the window to the left
of the bar in the tag.
If the text indicated with button 2 is not a recognized built-in, it is executed
as a shell command. For example, indicating
date with button 2 runs
date(1). The standard and error outputs of commands are sent to the
error window associated with the directory from which the command was run,
which will be created if necessary. For example, in a window
/adm/users
executing
pwd will produce the output
/adm in a (possibly
newly-created) window labeled
/adm/+Errors; in a window containing
/sys/src/cmd/sam/sam.c executing
make will run
make(1) in
/sys/src/cmd/sam, producing output in a window labeled
/sys/src/cmd/sam/+Errors.
Pointing at text with button 3 instructs
wily to locate or acquire the
file, string, etc. described by the indicated text and its context. This
description follows the actions taken when button 3 is released after sweeping
out some text. In the description,
text refers to the text of the
original sweep or, if it was null, the result of applying similar expansion
rules that apply to button 2 actions.
If the text names an existing window,
wily moves the mouse cursor to the
selected text in the body of that window. If the text names an existing file
with no associated window,
wily loads the file into a new window and
moves the mouse there.
If the text begins with a colon, it is taken to be an address, in the style of
sam(1), within the body of the window containing the text. The address
is evaluated, the resulting text highlighted, and the mouse moved to it. Thus,
in
wily, one must type
:/regexp or
:127 not just
/regexp or
127. (There is an easier way to locate literal text;
see below.)
If the text is a file name followed by a colon and an address,
wily loads
the file and evaluates the address. For example, clicking button 3 anywhere in
the text
file.c:27 will open
file.c, select line 27, and put the
mouse at the beginning of the line. The rules about Error files, directories,
and so on all combine to make this an efficient way to investigate errors from
compilers, etc.
If the text is not an address or file, it is taken to be literal text, which is
then searched for in the body of the window in which button 3 was clicked. If
a match is found, it is selected and the mouse is moved there. Thus, to search
for occurrences of a word in a file, just click button 3 on the word. Because
of the rule of using the selection as the button 3 action, subsequent clicks
will find subsequent occurrences without moving the mouse.
In all these actions, the mouse motion is not done if the text is a null string
within a non-null selected string in the tag, so that (for example) complex
regular expressions may be selected and applied repeatedly to the body by just
clicking button 3 over them.
Several operations are bound to multiple-button actions. After selecting text,
with button 1 still down, pressing button 2 executes
Cut and button 3
executes
Paste. After clicking one button, the other undoes the first;
thus (while holding down button 1) 2 followed by 3 is a
Snarf that
leaves the file undirtied; 3 followed by 2 is a no-op. These actions also
apply to text selected by double-clicking because the double-click expansion
is made when the second click starts, not when it ends.
Commands may be given extra arguments by a mouse chord with buttons 2 and 1.
While holding down button 2 on text to be executed as a command, clicking
button 1 appends the text last pointed to by button 1 as a distinct final
argument. For example, to search for literal
text one may execute
Look text with button 2 or instead point at
text with button 1
in any window, release button 1, then execute
Look, clicking button 1
while 2 is held down.
When an external command (e.g.
echo(1)) is executed this way, the extra
argument is passed as expected and an environment variable
$wilyaddr is
created that holds, in the form interpreted by button 3, the fully-qualified
address of the extra argument.
Support programs¶
Win creates a new
wily window and runs a
command (default
$SHELL) in it, turning the window into something analogous to an
8½(1) window. Executing text in a
win window with button
2 is similar to using
Send.
Awd loads the tag line of its window with the directory in which it's
running, suffixed
-label (default
rc); it is intended to
be executed by a
cd function for use in
win windows. An example
definition is
fn cd { builtin cd $1 && awd $sysname }
FILES¶
- $home/.wilybak
- default directory for backup files.
SEE ALSO¶
wily(4)
Rob Pike,
Acme: A User Interface for Programmers.
BUGS¶