# Oberon/ETH Oberon/mouse

This document was originally hosted at the ETHZ. It remains in the WayBack archive under the ETH license. Also refer to the Oberon Tutorial.
This page addresses hardware, configuration and functionality. A usage tutorial is also available.
The Oberon TUI and GUI can be controlled at best with a 3-button mouse as originally designed. However, many potential Oberon users have systems fitted with 2-button mice and are not ready to acquire another mouse in spite of the low cost. The 2-button support is particularly welcomed by users liking track balls.
Oberon can be controlled:
* with a 3-button mouse as originally designed. The mouse buttons are, by convention, named from left to right ML, MM and MR.
* with a 2-button mouse (ML, MR), substituting the missing MM button by the keyboard Ctrl-key (left and right).
* with a 2-button mouse (ML, MR), replacing a MM click by a succession of two ML clicks. The first ML click sets the caret as is usual. The second ML click, at the same mouse focus, is interpreted like a MM click. The second click may occur any time after setting the caret, on the condition that the mouse focus is not changed. Or else, the caret is moved. This basic rule should be easily mastered by expert 3-button mouse users. Of course, this device was introduced at the cost of some loss of comfort as is documented in the subsequent tables.
When Oberon is started, it is ready to be controlled with a 2-button mouse according to 3., irrespective of the mouse type. If the mouse has effectively 2 buttons, hitting the F8-key switches the mode of operation to 2. But, if on hitting the F8-key Oberon recognizes the signals of a 3-button mouse, it will switch the mode of operation to 1. The change of mode is made apparent by the tiny double-arrow icon at the left of the NamePlate of open documents in the GUI and by an equivalent icon in the menu bar of documents in the TUI.
With a 3-button mouse installed, one can practice the modes 2. and 3. by simply ignoring the middle button, though the button retains its functionality and a mixed mode operation is always possible.
Note 1: Track balls are usually fitted with 2 buttons and it is becoming increasingly difficult to acquire a 3-button track ball. A 4-button track ball represents a mediocre alternative since it requires to use the index finger for the ML and MM clicks, which makes a ML + MM interclick difficult to execute.
Note 2: "+" denotes an interclick, as in MR + ML meaning: press MR, hold it down and press ML before releasing both buttons. "&" denotes the concatenation of ML clicks.
Note 3: A right-handed mouse is assumed, but a left-handed mouse is also supported (see below).
Oberon can support a wide range of mouse types of all commonly used brands. The most widespread is the PS/2-compatible mouse, or bus mouse, attached to a 6-pin miniature DIN connector. All others mice connect to serial ports, either built-in or on expansion cards. Each machine is allowed up 4 serial ports.
As from this version, a mouse can easily be replaced by another of a different type and with a different interface. More than one mouse may be connected to a machine: the system can detect them and the user can select the best one. The next three commands have been designed specifically to let the system sort out mice, instead of letting the user question which parameter is appropriate, as is required for the third command. Previously, the mouse driver was chosen interactively during the installation.
A mouse driver for a different is installed in these ways: To to select the correct mouse driver at each system start do:
* at startup, set the config strings: MT, MP, MB (see below)
* or execute one of the following command
* or edit a line containing one of the following commands, in the System section of Oberon.Text.
    ConfigInput.WatchMouse [ seconds | 5 ]
       Lets the system watch a mouse movement for a number of seconds. If a mouse manifests itself, the mouse driver is configured to operate with it. If not, a system log message invites the user to configure the mouse driver. Moving a mouse may be enough to let the system recognize that mouse. Else, pressing Ctrl-Shift launches a SelectMouse command described next.
    ConfigInput.SelectMouse
       Lets the system attempt to configure a series of mice with different specifications on the available COM ports. The search ends when a mouse is effectively reacting as expected, else a PS/2-style mouse is configured as final default. A Mouse Configuration user interface is telling which mouse type the driver was configured successfully. By following the instructions in the menu it is still possible to choose a different mouse of a different type or attached to another port, or to accept the final choice which is displayed in the System log. This system service makes it easy to edit the correct command in Oberon.Text.
    ConfigInput.Mouse mt [ mp [ mb ] ] ~
       Sets up the mouse driver to operate a mouse of type mt, connected to the port mp, with mb buttons. One should preferably let the system select the correct mouse (cfr. previous command). Thoroughly choose a combination of parameters fitting the mouse characteristics, else mouse control will be lost. To remedy such a mishap, activate Scroll Lock to transfer the mouse control to the keyboard.
       mt (respectively MT), the mouse type is:
       mp (respectively MP), the mouse port is 1 .. 4 for COM1 to COM4 for a mouse with a serial interface. 1 is the default value. Not applicable to a PS2 mouse; use 1.
       mb (respectively MB), the number of buttons is:
       Practical hint: Two such commands can be used in combination to switch mice on a laptop:
       ConfigInput.SelectMouse PS2 1 -3 ~ to operate the stick (between G and H) and 2 buttons below the space bar
       ConfigInput.SelectMouse LM1 2 -3 ~ to operate a serial 3-button mouse installed for working with Oberon
       The mouse configuration selected at installation time is stored in the configuration data and reused when Oberon is started. This information can be modified on-the-fly at boot time or permanently stored. The mouse type is specified as MT= "", the port as MP="" and the number of buttons as MB="" and the values are chosen as described above.
| 3-button mouse | Action | Detail | 2-button mouse |
| ML | Point | Set the caret to mark the insertion point | ML |
| ML + MM | Copy to (3) | Set the caret and copy an existing selection to the caret | No direct substitute (1) |
| ML + MR | Copy attributes | Copy font, color, offset | ML + MR |
| MM | Activate | Activate command in text or in Cmd attribute of gadget. Also manipulate gadget. | ML & ML |
| MM + MR | Open (2) | Open a document | ML & ML + MR |
| MR | Select | Select text, incl. floating gadgets | MR |
| MR & MR | Select variant | Select text to start of line | MR & MR |
| MR + ML | Delete (3) | Select text, incl. floating gadgets, and delete | MR + ML |
| MR + MM | Copy away | Select text/gadget and copy away to caret | No direct substitute (1) |
| ML + MM + MR | Nullify | Nullify current mouse action | No substitute |
(1) Delete the text stretch/gadget and paste what is then in a scratch pad back at the caret with Edit.Recall, TextDocs.Recall or with the [Recall] Iconizer in System3.Tool of the GUI.
(2) Implicit open - TUI: Edit Open / GUI: Desktops.OpenDoc
(3) The combination of Delete and Copy to corresponds to a cut-and-paste operation in other text editors but a pre-condition must hold true: no other selection may exist, else the selection will be copied.
| 3-button mouse | Concurrent movement | Action | 2-button mouse |
| ML | Drag up or down | Resize viewer (1) | ML in the icon |
| ML + MM | Drag away | Relocate viewer (2) | ML + MR in the icon |
| MM | | Activate the command or Button | ML & ML |
(1) The menu bar can only be moved within the limits of adjacent menu bars or screen border.
(2) The document can be relocated in the adjacent track or in the same track above or below another document. If the menu bar is dragged on top of another, the document below it is closed.
Inside the NamePlate in the menu bar, mouse clicks have the following meaning:
| 3-button mouse | Action | Detail | 2-button mouse |
| ML | Point | Set the caret to mark the insertion point | ML |
| MM | Reveal | Display the qualified document name in the log | No substitute |
| MR | Select | Select text | MR |
| 3-button mouse | Concurrent movement | Action | 2-button mouse |
| ML | Drag up or down, tracking lines | Scroll forward. Places the tracked line at the top | ML |
| MM | | Scroll to mouse position | No substitute |
| MM + ML | | Scroll to bottom | No substitute |
| MM + MR | | Scroll to top | No substitute |
| MR | Drag up or down, tracking lines | Scroll backward. Places the tracked line at the bottom | MR |
Most visual gadgets are rectangular in shape, and for those gadgets the control area is a border a few pixels wide inside the edge of the gadget. Inside the gadget, but not in the control area, the gadget does whatever it is supposed to do (Buttons can be pushed, CheckBoxes checked, etc). In the control area, the gadget responds to the control mouse combinations listed in this table.
| 3-button mouse | Concurrent movement | Action | 2-button mouse |
| ML | | Uninterpreted | ML inherits the MM function |
| MM | Drag in a corner | Resize gadget except when locked | ML |
| MM | Drag on a side | Move gadget around in current container | ML |
| MM + ML | Drag on a side | Move gadget and insert in other container (consume shallow copy) | No direct substitute |
| MM + MR | Drag on a side | Move gadget and insert a copy at mouse position (shallow copy) | No direct substitute |
| MR | | Select gadget | MR |
| MR + ML | | Select gadget and delete | MR + ML |
| MR + MM | | Select gadget and copy away to caret | No direct substitute |
The full functionality of the mouse can be transferred to the numeric pad of the keyboard by activating Scroll Lock. To return control to the mouse, deactivate Scroll Lock.
    "5" - takes over the function of the MM key (activate)
    "Ins" - takes over the function of the ML key (set caret)
    "Del" - takes over the function of the MR key (select)
    The 8 keys surrounding the "5" - move the mouse focus
The Ctrl key is possibly also available as MM key.
A left-handed mouse, with buttons arranged in reverse order [ MR, ML ], is defined by a config string "MM=digits" (Mouse Mapping). digits is exactly 3 digits, with each digit representing a mouse button: 0 = ML, 1 = MM, 2 = MR. It is convenient to use the Ctrl-key to the right of the keyboard in conjunction with a left-handed mouse.
    MM = "012" - right-handed, assumed when Oberon is booted
    MM = "210" - left-handed
    MM = "021" - Logitech cordless mouse
UsbMouse.Init
    Installs a USB mouse driver. The USB system must be active already.
4 Aug 2001 - Copyright © 2001 ETH Zürich. All rights reserved. E-Mail: oberon at lists.inf.ethz.ch Homepage: http://www.ethoberon.ethz.ch/