NAME
omero, olive – distributed window system

SYNOPSIS
o/mero [ –abcdi ] [ –m mnt ]

o/live [ –dDEFKLMPTW ] [ odir ] sdir

DESCRIPTION
This manual page is both an introduction and documentation for the user interface to the window system. After reading it, it is suggested to read ox(1) for a description of the editor and shell interface.

The Octopus the window system, o/mero, does not draw and does not interact with the user. O/mero implements a file tree that represents a tree of graphical panels. Flags –abc are similar to the bind(2) flags of the same name. Option –m can be used to select mnt as the mount point instead of the default /mnt/ui. Under flag –i the standard input is used as a connection to the client.

All user interfaces are created as subtrees of the file tree maintained by o/mero. The graphical representation of panels in the screen corresponds to the file tree serviced by o/mero to its clients. For example, a screen that contains two rows has two corresponding files in its root directory. If the user moves one row within the other using the mouse, the same would happen to their respective files; and vice–versa.

The root of the o/mero file tree, mounted at /mnt/ui by default, contains a directory named appl , a file named olive , and one additional directory per screen (or session). A screen is a top–level panel used to keep other panels within. It is used to represent what is to be shown at a terminal.

You can refer to omero(4) for a description of the window system and its file interface, and to panels(2) for a description of the API to the window system.

O/live is a viewer that permits the user to interact with o/mero. It uses a graphical terminal to display panels according to the panel tree supplied by o/mero and accepts mouse and keyboard input to operate on the panels. O/live is the only program that knows how to draw, how to interact with the mouse and the keyboard, and how to implement particular panel (or widget) type. Different user terminals mount the same o/mero file tree and run o/live to view (parts of) it.

The argument odir to o/live is the path to the root of the user interface tree. The argument sdir is the name of the screen (directory) to be shown by o/live. It is feasible to share the same screen among multiple o/lives. In this case, editions are synchronized among viewers when the mouse moves. Other flags shown in the synopsis activate various debug diagnostics and are not discussed here.

Panels
Application interfaces are created by creating files under /mnt/ui/appl. A new session may be created by creating a directory at /mnt/ui instead.

Panels are shown at one or more screens by replicating their files from /mnt/ui/appl at one or more screen subtrees. Panel replicas may be moved around as desired. Some panels exist only within a screen subtree (are not replicated) for layout purposes, but most are replicas.

There are three kind of panels: rows, columns, and atoms. Rows and columns group inner panels and handle their layout. A row arranges for inner panels to be disposed in a row. A column does what can be expected. Atoms include text, images, gauges, etc. Omero(4) describes the complete list.

Any panel may have a tag (a square near its top–left corner). By default, rows and columns have tags, and atoms do not. When a panel has hidden panels within it, its tag is shown as a vertical rectangle instead of a square box. The vertical space below the tag is called the margin.

A panel may be in a dirty state, when the application using it considers that it has unsaved state. In this case, the tag is shown in a light green color. This happens also to any row or column that contains a dirty panel.

Selection
The user selection and clipboard are maintained using files (that can be shared among machines). The file /mnt/snarf/sel contains the path to the panel whose selection changed last. The file /mnt/snarf/snarf is kept synchronized to the clipboard by running snarf(1).

The selection determines the panel where to apply editing commands and the directory where to execute external commands. Using the left button of the mouse on a panel changes the selection to that panel. Note that unlike in Acme, a command does not apply to the file shown in the panel where the command has been typed, but to the last panel selected (Labels, single lines and buttons do not update the selection despite showing ticks and obeying selection commands).

Mouse and keyboard
Moving the pointer to a panel arranges keyboard input to be sent to it. But note that command execution refers to the selection–panel, which may be a different one. Tags and margins (and not just panel contents) accept input as well, both using the mouse and the keyboard.

O/live can be used with either a two button mouse, a three button mouse, or a mouse with one button and some way to make a click with the second button. The right mouse button is always named ``button 3'', the left one is ``button 1'', and the middle one is ``button 2''. In Lsub Infernos, keyboard function keys F1, F2, and F3 act as mouse buttons 1, 2, and 3.

Menus show different options in a circle around the point. To select one you must move the pointer quickly in the direction of the option.

While the menu is shown, a click with the same button that raised the menu executes the last option selected in that menu. A click with a different button closes the menu without doing anything.

To aid touch pads, raising a menu and then drag with button 1 is undrestood as a drag with button 3.

Tag and margin commands
While on a tag or margin, the mouse can be used as follows:
Button 1   A drag on a tag moves the tagged panel. On rows and columns a small vertical or horizontal drag makes the container behave like a column or a row. A single click resizes the panel according to the following mouse actions: Another single click (i.e., a double click) adjusts the size automatically and a
drag changes the size of the panel in proportion to the destination of the drag. recomputes the layout for the tagged panel.
Button 2   A single click on a tag maximizes the panel, by hiding its siblings on the outer row or column containing it. If the panel is already maximized, a single click shows all siblings, undoing the effect.
Button 3   A click raises a menu with panel operations. A drag can be used to adjust the size of the panel.

The menu shown at a tag (or margin) contains the following options:
Copy    Makes the next drag copy the panel, instead of moving it.
More    Hide all but the first inner panel (when all were shown) or show one more panel (when not all were shown).
Hide    Hides the panel.
Close   Closes the panel (requires insisting if there are pending changes). To terminate o/live (Without actually destroying the screen, kept within o/mero), use this command on the top–left tag.
Top     Zooms to make the panel full–screen. Zoom out to the original subtree when the panel is already full–screen.
Full    Maximizes the panel by hiding siblings.

While on a tag (or a margin) the following keys perform the indicated actions on the tagged panel:
Delete      Send an interrupt request to the application (or do nothing for layout panels).
Enter       Zoom as needed to view the panel full–screen.
Left        (the ``←'' key). Zoom out one level and show the outer panel containing the entire screen (and probably more).
Right       (the ``→'' key). Zoom in one level down to the tagged panel.
Up          (the ``↑'' key) Show all the inner panels, which might be hidden.
Down        (the ``↓'' key). Hide all but the first inner panel (when all were shown) or show one more panel (when not all were shown).

Panel commands
While within a panel, the mouse can be used as follows:
Button 1   Can be used to change the selection and the insertion point. Double and triple clicks select the word at the pointer. The later consider characters like ``/'' to be part of the word, the former does not. A double click on white space selects an entire line. One at an open bracket (or quote, or ...) selects all the
text up to the closed bracket (or quote, or ...).
Button 2   Executes the word or selection at the pointer as a command. The command New would create a new column.
Button 3   A single click with the button 3 raises a menu. A drag can be used to scroll up or down. The entire panel represents the scroll bar. Scrolling speed depends on the proximity of the initial drag point to the end of the panel.
Chords     Chords similar to those used by acme(1) are understood as well. They can be used to cut and paste text. Refer to acme's manual page for a reference.

The menu for a panel contains the following commands:
Open    Opens the file whose name is the word or selection at point. (To create a new file use the B command from the editing language).
Close   Closes the panel. If it is dirty it may be necessary to insist by repeating the action. To terminate o/live (Without actually destroying the screen, kept within o/mero), use this command on the top–level panel.
Write   Writes changes made to the panel. On text panel this means writing the edited text back to the file server.
Exec    Executes the command whose name is the word or selection at point.
Find    Searches the panel to find the text at point.
Paste   Inserts the contents of the clipboard at point. (To ``cut'' some text, use the backspace on a selection).

While on a panel, the following keys have special meaning:
Delete      Send an interrupt request to the application.
Esc         Select the text typed from the last mouse click.
Enter       Execute the command typed from the last mouse click.
Backspace   When the selection is null, delete last character. Otherwise, remove the selected text and copy its contents to the clipboard(i.e., ``cut'').
^U          ( Control and U). Delete last word.
Insert      Paste the text in the clipboard.
Left        (the ``←'' key). Undo.
Right       (the ``→'' key). Redo.
Up          (the ``↑'' key) Scroll up.
Down        (the ``↓'' key). Scroll down.

EXAMPLE
Start the window system and a single viewer on it:
# create mount points if they do not exist
% mkdir –p /mnt/ui /mnt/ports
# start the event delivery service
% o/ports
# start the window system
% o/mero
# create a screen/session
% mkdir /mnt/ui/s0
# start the shell and browser
% o/x
# open a viewer for s0
% o/live s0
After exiting Olive you may run it again to see your session as it was.

SOURCE
/usr/octopus/port/live
/usr/octopus/port/mero

SEE ALSO
ox(1), ports(4), panels(2), omero(4), and snarf(1).

BUGS
Under certain circumstances Olive may report a concurrent edition when that is not the case. The only way out from this is to use the menu at the tag to close the panel and then reopen it again. This will be fixed soon.