Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH RIO 1
2
.SH NAME
3
rio, label, window, wloc \- window system
4
.SH SYNOPSIS
5
.B rio
6
[
7
.BI "-i '"cmd '
8
]
9
[
10
.BI "-k '"kbdcmd '
11
]
12
[
13
.B -s
14
]
15
[
16
.B -f
17
.I font
18
]
19
.PP
20
.B label
21
.I name
22
.PP
23
.B window
24
[
25
.B -m
26
] [
27
.B -r
28
.I minx miny maxx maxy
29
] [
30
.B -dx
31
.I n
32
] [
33
.B -dy
34
.I n
35
] [
36
.B -minx
37
.I n
38
] [
39
.B -miny
40
.I n
41
] [
42
.B -maxx
43
.I n
44
] [
45
.B -maxy
46
.I n
47
] [
48
.B -cd
49
.I dir
50
] [
51
.B -hide
52
] [
53
.B -scroll
54
] [
55
.B -noscroll
56
] [
57
.I cmd
58
.I arg ...
59
]
60
.PP
61
.B wloc
62
.SH DESCRIPTION
63
.I Rio
64
manages asynchronous layers of text, or windows, on a raster display.
65
It also serves a variety of files for communicating with
66
and controlling windows; these are discussed in section
67
.IR rio (4).
68
.SS Commands
69
The
70
.I rio
71
command starts a new instance of the window system.
72
Its
73
.B -i
74
option names a startup script, which typically contains several
75
.I window
76
commands generated by
77
.IR wloc .
78
The
79
.B -k
80
option causes
81
.I rio
82
to run the command
83
.I kbdcmd
84
at startup and allow it to provide characters as keyboard input; the
85
.B keyboard
86
program described in
87
.IR bitsyload (1)
88
is the usual choice.
89
.PP
90
The
91
.B -s
92
option initializes windows so that text scrolls;
93
the default is not to scroll.
94
The
95
.I font
96
argument names a font used to display text, both in
97
.IR rio 's
98
menus
99
and as a default for any programs running in its windows; it also
100
establishes the
101
environment variable
102
.BR $font .
103
If
104
.B -f
105
is not given,
106
.I rio
107
uses the imported value of
108
.BR $font
109
if set; otherwise it imports the default font from the underlying graphics
110
server, usually the terminal's operating system.
111
.PP
112
The
113
.I label
114
command changes a window's identifying name.
115
.PP
116
The
117
.I window
118
command creates a window.
119
By default, it creates a shell window and sizes and places it automatically.
120
The geometry arguments control the size
121
.IB ( dx ,
122
.BR dy )
123
and placement
124
.RB ( minx ,
125
.BR miny ,
126
.BR maxx ,
127
.BR maxy );
128
the units are pixels with the
129
upper left corner of the screen at (0, 0).
130
The
131
.B hide
132
option causes the window to be created off-screen.
133
The
134
.B scroll
135
and
136
.B noscroll
137
options set the scroll mode.
138
The
139
.B cd
140
option sets the working directory.
141
The optional command and arguments 
142
define which program to run in the window.
143
.PP
144
By default,
145
.I window
146
uses
147
.B /dev/wctl
148
(see
149
.IR rio (4))
150
to create the window and run the command.  Therefore, the window and command
151
will be created by
152
.I rio
153
and run in a new file name space, just as if the window had been created using the interactive menu.
154
However, the
155
.B -m
156
option uses the file server properties of
157
.I rio
158
to
159
.B mount
160
(see
161
.IR bind (1))
162
the new window's name space within the name space of the program calling
163
.IR window .
164
This means, for example, that running
165
.B window
166
in a CPU window will create another window whose command runs on the terminal, where
167
.I rio
168
is running; while
169
.B window
170
.B -m
171
will create another window whose command runs on the CPU server.
172
.PP
173
The
174
.I wloc
175
command prints the coordinates and label of each window in its instance of
176
.I rio
177
and is used to construct arguments for
178
.IR window .
179
.SS Window control
180
Each window behaves as a separate terminal with at least one process
181
associated with it.
182
When a window is created, a new process (usually a shell; see
183
.IR rc (1))
184
is established and bound to the window as a new process group.
185
Initially, each window acts as a simple terminal that displays character text;
186
the standard input and output of its processes
187
are attached to
188
.BR /dev/cons .
189
Other special files, accessible to the processes running in a window,
190
may be used to make the window a more general display.
191
Some of these are mentioned here; the complete set is
192
discussed in
193
.IR rio (4).
194
.PP
195
One window is
196
.IR current ,
197
and is indicated with a dark border and text;
198
characters typed on the keyboard are available in the
199
.B /dev/cons
200
file of the process in the current window.
201
Characters written on
202
.B /dev/cons
203
appear asynchronously in the associated window whether or not the window
204
is current.
205
.PP
206
Windows are created, deleted and rearranged using the mouse.
207
Clicking (pressing and releasing) mouse button 1 in a non-current
208
window makes that window current and brings it in front of
209
any windows that happen to be overlapping it.
210
When the mouse cursor points to the background area or is in
211
a window that has not claimed the mouse for its own use,
212
pressing mouse button 3 activates a
213
menu of window operations provided by
214
.IR rio .
215
Releasing button 3 then selects an operation.
216
At this point, a gunsight or cross cursor indicates that
217
an operation is pending.
218
The button 3 menu operations are:
219
.TF Resize
220
.TP
221
.B New
222
Create a window.
223
Press button 3 where one corner of the new rectangle should
224
appear (cross cursor), and move the mouse, while holding down button 3, to the
225
diagonally opposite corner.
226
Releasing button 3 creates the window, and makes it current.
227
Very small windows may not be created.
228
.TP
229
.B Resize
230
Change the size and location of a window.
231
First click button 3 in the window to be changed
232
(gunsight cursor).
233
Then sweep out a window as for the
234
.B New
235
operation.
236
The window is made current.
237
.TP
238
.B Move
239
Move a window to another location.
240
After pressing and holding button 3 over the window to be moved (gunsight cursor),
241
indicate the new position by dragging the rectangle to the new location.
242
The window is made current.
243
Windows may be moved partially off-screen.
244
.TP
245
.B Delete
246
Delete a window.  Click in the window to be deleted (gunsight cursor).
247
Deleting a window causes a
248
.L hangup
249
note to be sent to all processes in the window's process group
250
(see
251
.IR notify (2)).
252
.TP
253
.B Hide
254
Hide a window.  Click in the window to be hidden (gunsight cursor);
255
it will be moved off-screen.
256
Each hidden window is given a menu entry in the button 3 menu according to the
257
value of the file
258
.BR /dev/label ,
259
which
260
.I rio
261
maintains
262
(see
263
.IR rio (4)).
264
.TP
265
.I label
266
Restore a hidden window.
267
.PD
268
.PP
269
Windows may also be arranged by dragging their borders.
270
Pressing button 1 or 2 over a window's border allows one to
271
move the corresponding edge or corner, while button 3
272
moves the whole window.
273
.PD
274
.SS Text windows
275
Characters typed on the keyboard or written to
276
.B /dev/cons
277
collect in the window to form
278
a long, continuous document.
279
.PP
280
There is always some
281
.I selected
282
.IR text ,
283
a contiguous string marked on the screen by reversing its color.
284
If the selected text is a null string, it is indicated by a hairline cursor
285
between two characters.
286
The selected text
287
may be edited by mousing and typing.
288
Text is selected by pointing and clicking button 1
289
to make a null-string selection, or by pointing,
290
then sweeping with button 1 pressed.
291
Text may also be selected by double-clicking:
292
just inside a matched delimiter-pair
293
with one of
294
.B {[(<«`'"
295
on the left and
296
.B }])>»`'"
297
on the right, it selects all text within
298
the pair; at the beginning
299
or end of a line, it selects the line; within or at the edge of an alphanumeric word,
300
it selects the word.
301
.PP
302
Characters typed on the keyboard replace the selected text;
303
if this text is not empty, it is placed in a
304
.I snarf buffer
305
common to all windows but distinct from that of
306
.IR sam (1).
307
.PP
308
Programs access the text in the window at a single point
309
maintained automatically by
310
.IR rio .
311
The
312
.I output point
313
is the location in the text where the next character written by
314
a program to
315
.B /dev/cons
316
will appear; afterwards, the output point is the null string
317
beyond the new character.
318
The output point is also the location in the text of the next character
319
that will be read (directly from the text in the window,
320
not from an intervening buffer)
321
by a program from
322
.BR /dev/cons .
323
When such a read will occur is, however, under control of
324
.I rio
325
and the user.
326
.PP
327
In general there is text in the window after the output point,
328
usually placed there by typing but occasionally by the editing
329
operations described below.
330
A pending read of
331
.B /dev/cons
332
will block until the text after the output point contains
333
a newline, whereupon the read may
334
acquire the text, up to and including the newline.
335
After the read, as described above, the output point will be at
336
the beginning of the next line of text.
337
In normal circumstances, therefore, typed text is delivered
338
to programs a line at a time.
339
Changes made by typing or editing before the text is read will not
340
be seen by the program reading it.
341
If the program in the window does not read the terminal,
342
for example if it is a long-running computation, there may
343
accumulate multiple lines of text after the output point;
344
changes made to all this text will be seen when the text
345
is eventually read.
346
This means, for example, that one may edit out newlines in
347
unread text to forestall the associated text being read when
348
the program finishes computing.
349
This behavior is very different from most systems.
350
.PP
351
Even when there are newlines in the output text,
352
.I rio
353
will not honor reads if the window is in
354
.I hold
355
.IR mode ,
356
which is indicated by a white cursor and blue text and border.
357
The ESC character toggles hold mode.
358
Some programs, such as
359
.IR mail (1),
360
automatically turn on hold mode to simplify the editing of multi-line text;
361
type ESC when done to allow
362
.I mail
363
to read the text.
364
.PP
365
An EOT character (control-D) behaves exactly like newline except
366
that it is not delivered to a program when read.
367
Thus on an empty line an EOT serves to deliver an end-of-file indication:
368
the read will return zero characters.
369
Like newlines, unread EOTs may be successfully edited out of the text.
370
The BS character (control-H) erases the character before the selected text.
371
The ETB character (control-W) erases any nonalphanumeric characters, then
372
the alphanumeric word just before the selected text.
373
`Alphanumeric' here means non-blanks and non-punctuation.
374
The NAK character (control-U) erases the text after the output point,
375
and not yet read by a program, but not more than one line.
376
All these characters are typed on the keyboard and hence replace
377
the selected text; for example, typing a BS with a word selected
378
places the word in the snarf buffer, removes it from the screen,
379
and erases the character before the word.
380
.PP
381
An ACK character (control-F) or Insert character triggers file name completion
382
for the preceding string (see
383
.IR complete (2)).
384
.PP
385
Typing a left or right arrow moves the cursor one character in that direction.
386
Typing an SOH character (control-A) moves the cursor to the beginning of the
387
current line; an ENQ character (control-E) moves to the end.
388
.PP
389
Text may be moved vertically within the window.
390
A scroll bar on the left of the window shows in its clear portion what fragment of the
391
total output text is visible on the screen, and in its gray part what
392
is above or below view;
393
it measures characters, not lines.
394
Mousing inside the scroll bar moves text:
395
clicking button 1 with the mouse pointing inside the scroll bar
396
brings the line at the top of the
397
window to the cursor's vertical location;
398
button 3 takes the line at the cursor to the top of the window;
399
button 2, treating the scroll bar as a ruler, jumps to the indicated portion
400
of the stored text.
401
Holding a button pressed in the scroll bar will cause the text
402
to scroll continuously until the button is released.
403
Also, a page down
404
or down-arrow
405
scrolls forward
406
half a window, and page up or up-arrow scrolls back.
407
Typing the home key scrolls to the top of the window; typing the end key scrolls
408
to the bottom.
409
.PP
410
The DEL character sends an
411
.L interrupt
412
note to all processes in the window's process group.
413
Unlike the other characters, the DEL, VIEW, and up- and down-arrow
414
keys do not affect the selected text.
415
The left (right) arrow key moves the selection to one character
416
before (after) the current selection.
417
.PP
418
Normally, written output to a window blocks when
419
the text reaches the end of the screen;
420
a button 2 menu item toggles scrolling.
421
.PP
422
Other editing operations are selected from a menu on button 2.
423
The
424
.B cut
425
operation deletes the selected text
426
from the screen and puts it in the snarf buffer;
427
.B snarf
428
copies the selected text to the buffer without deleting it;
429
.B paste
430
replaces the selected text with the contents of the buffer;
431
and
432
.B send
433
copies the snarf buffer to just after the output point, adding a final newline
434
if missing.
435
.B Paste
436
will sometimes and
437
.B send
438
will always place text after the output point; the text so placed
439
will behave exactly as described above.  Therefore when pasting
440
text containing newlines after the output point, it may be prudent
441
to turn on hold mode first.
442
.PP
443
The
444
.B plumb
445
menu item sends the contents of the selection (not the snarf buffer) to the
446
.IR plumber (4).
447
If the selection is empty, it sends the white-space-delimited text
448
containing the selection (typing cursor).
449
A typical use of this feature is to tell the editor to find the source of an error
450
by plumbing the file and line information in a compiler's diagnostic.
451
.SS Raw text windows
452
Opening or manipulating certain files served by
453
.IR rio
454
suppresses some of the services supplied to ordinary text windows.
455
While the file
456
.B /dev/mouse
457
is open, any mouse operations are the responsibility of another program
458
running in the window.  Thus,
459
.I rio
460
refrains from maintaining
461
the scroll bar,
462
supplying text editing or menus, interpreting the
463
VIEW key as a request to scroll, and also turns scrolling on.
464
.PP
465
The file
466
.B /dev/consctl
467
controls interpretation of keyboard input.
468
In particular, a raw mode may be set:
469
in a raw-input window, no typed keyboard characters are special,
470
they are not echoed to the screen, and all are passed
471
to a program immediately upon reading, instead of being gathered into
472
lines.
473
.SS Graphics windows
474
A program that holds
475
.B /dev/mouse
476
and
477
.B /dev/consctl
478
open after putting the console in raw mode
479
has complete control of the window:
480
it interprets all mouse events, gets all keyboard characters,
481
and determines what appears on the screen.
482
.SH FILES
483
.TF /srv/riowctl.\fIuser\fP.\fIpid\fP
484
.TP
485
.B /lib/font/bit/*
486
font directories
487
.TP
488
.B /mnt/wsys
489
Files served by
490
.I rio
491
(also unioned in
492
.B /dev
493
in a window's name space, before the terminal's real
494
.B /dev
495
files)
496
.TP
497
.B /srv/rio.\fIuser\fP.\fIpid\fP
498
Server end of
499
.IR rio .
500
.TP
501
.B /srv/riowctl.\fIuser\fP.\fIpid\fP
502
Named pipe for
503
.I wctl
504
messages.
505
.SH SOURCE
506
.TF /sys/src/cmd/rio
507
.TP
508
.B /sys/src/cmd/rio
509
.TP
510
.B /rc/bin/label
511
.TP
512
.B /rc/bin/window
513
.TP
514
.B /rc/bin/wloc
515
.SH "SEE ALSO"
516
.IR rio (4),
517
.IR rc (1),
518
.IR cpu (1),
519
.IR sam (1),
520
.IR mail (1),
521
.IR proof (1),
522
.IR graphics (2),
523
.IR frame (2),
524
.IR window (2),
525
.IR notify (2),
526
.IR cons (3),
527
.IR draw (3),
528
.IR mouse (3),
529
.IR keyboard (6)
530
.SH BUGS
531
The standard input of
532
.I window
533
is redirected to the newly created window, so there is no way to pipe the output
534
of a program to the standard input of the new window.
535
In some cases,
536
.IR plumb (1)
537
can be used to work around this limitation.