Das Markieren eines Wortes ist der erste Schritt, um UNIX-Menüs zu steuern. Ein Menü teilt meist mit, welche Tasteneingabe zur Aktivierung eines Menüpunkts nötig ist. Wird ein Buchstabe erwartet, so wird dieser durch Invertierung, Unterstreichung oder Großschreibung gekennzeichnet.
Beispiel:
Die Aufgabe der Maussteuerung besteht darin, diesen Buchstaben in dem Wort zu finden und ihn dann so, als sei er über die Tastatur eingegeben worden, an den Host zu senden. Eventuell muß vorher noch eine sogennante Menü-Taste gesendet, oder die Auswahl durch die Eingabe bestätigt werden.
Andere UNIX-Menüs erfordern die Eingabe von Nummern- oder Buchstaben-Kombinationen. In diesem Fall wird einfach das ganze Wort an den Host gesandt.
Beispiel:
Als Spezialfall können auch Funktionstasten gefordert werden.
Beispiel:
Für ganz spezielle Fälle können auch Markierungstabellen erstellt werden, die einem Wort der Anzeige einen entsprechenden Tastendruck zuordnen.
Für die Fälle, bei denen ein Tastendruck mit einem Ort in der Anzeige verbunden werden kann, können Positionstabellen verwendet werden. Typische Fälle sind die FLMI-Anwendungen, wie z.B. die Eingabe der Funktionstasten für sysadm.
Die meisten UNIX-Anwendungen besitzen eine Cancel-Taste, um eine versehentliche Auswahl rückgängig zu machen. Damit liegt es nahe, diese Taste als Funktion auf die rechte Maustaste zu legen.
Die Cursorpositionierung wurde gegenüber früheren Versionen intelligenter gemacht. Nach einer gesendeten Cursortaste wird die neue Position überprüft. So funktioniert die Positionierung auch, wenn der Cursor sich sprunghaft, z.B. durch Zeilenenden oder Tabulatoren, bewegt.
Die Auswahl in UNIX-Dialogen ist der
Cursorpositionierung sehr ähnlich. Auch hier müssen Cursortasten
eingegeben werden, und zwar solange, bis sich das selektierte Feld unter
der Maus befindet. Ein Dialog wird daran erkannt, daß er von einem
Rahmen umschlossen wird. Die Auswahl wird durch die Maussteuerung mit der
Eingabetaste bestätigt.
Viele UNIX-Anwendungen teilen den Bildschirm in verschiedene Bereiche auf.
Typisch ist eine Kopf- und eine Statuszeile. Die Maussteuerung von
Terms97801 kann darum für drei Bereiche unterschiedlich eingestellt
werden.
Mit diesem Überblick über die Maussteuerung kann der Dialog, der nach Aufruf des Menüpunkts System..Mausklick erscheint, verstanden werden:
Abb. 45: Der Mausklick-Dialog mit zusätzlichem Knopf für
sysadm
Die andere Gruppe versucht, den Cursor zu positionieren. Außer der Positionierung des Cursors in Texten, gehört hierzu auch die Selektion in UNIX-Dialogen, die bei Eingabe über die Tastatur mit Cursortasten vorgenommen wird.
Die Möglichkeit, Block- oder Zeilenweise zur Übernahme in die Zwischenablage zu markieren, bleibt trotz Maussteuerung immer erhalten.
Mit der Character-Maussteuerung können
einzelne Zeichen durch Anklicken einen Tastendruck an den Host senden.
Typischerweise wird die Charactersteuerung mit Semigrafikzeichen verwendet,
z.B. für Scrollen durch Anklicken von Pfeilen.
Hierzu muß in der Ini-Datei eine Tabelle angegeben werden, die einzelnen
Zeichen einen Tastendruck zuordnet.
[MouseControl]
CharTable=<Tabelle>
CharControl=Y oder N
Die Tabelle hat folgende Syntax:
<Tastencode>:<Superfontcode des Zeichens>
Alle Angaben sind hexadezimal. Zeilen die mit ; oder # beginnen, werden als Kommentare überlesen.
Der Superfontcode kann im Anhang nachgeschlagen werden, oder nach dem Kommando echo "\033[9v" abgezählt werden.
Beispiel:
# für HIT5.1
# Bild auf / Bild ab
13:1bd
14:1be
Das Verhalten bei linkem Mausklick kann für drei Bildschirmbereiche getrennt eingestellt werden. Die drei Bereiche ergeben sich durch Angabe der ersten und der letzten Zeile des Hauptbereichs. Der Bereich davor wird als Menübereich, der danach als Statuszeilenbereich bezeichnet.
Das Verhalten bei Betätigung der linken Maustaste wird durch einen Satz von Parametern bestimmt.
Beispiel: Bilder mit Paintbrush anzeigen:
[MouseControl]
Program=pbrush
PreArg=c:\bilder\
Postarg=.bmp
Show=M
Ini-Einträge:
Action=Cursor | Word | Menu | Prog | Nothing
Falls Action=Menu fehlschlägt, gilt folgender Eintrag:
Action2=
Ini-Einträge: Mark=All | Letters | Digits | 0-9
Ini-Einträge:
Send=Capital | Digit | Invers | Underline | Mark | Func
| Table | PosTable
Table=<Pfad und Name der externen Tabelle>
Die Tabelle hat den
Aufbau:<Tastencode>:<Zeichenkette>
Der Tastencode ist der 97801-Scancode, zu dem eventuell 0x0100, 0x0200, 0x0400
für shift, ctrl oder alt addiert werden darf.
Es dürfen mehrere Einträge für den gleichen Tastencode in
der Tabelle vorhanden sein. Ist der Eintrag für den Tastencode
größer als 0x07ff, so wird der Code als zwei ASCII-Bytes
interpretiert, die an den Host gesendet werden.
PosTable=<Pfad und Name der externen Tabelle>
Die Tabelle hat den Aufbau:
<Tastencode>:<von>-<bis
Zeile>,<von>-<bis Spalte>
Intro= Y | N
IntroKey=<scancode der 97801-Taste>
Confirm= Y | N
ConfirmKey=<scancode der 97801-Taste>
Die Eintragungen in der Ini-Datei für den Menü- und Statusbereich werden durch Voranstellen von Menu bzw. Status an die bereits beschriebenen Schlüsselwörter erzeugt.
Beispiel:
MenuAction=Menu
Action=Cursor
StatusAction=Nothing
Ist 'Dialog nachher' angekreuzt, so wird zuerst die normale Maussteuerung für die linke Maustaste durchgeführt und im Fall eines Mißerfolgs wird anschließend die Dialogerkennung gestartet. Die entsprechenden Ini-Einträge lauten:
[MouseControl]
DialogBefore=N | Y
DialogAfter=N | Y
Die Dialogerkennung beruht im wesentlichen auf der Erkennung eines geschlossenen
Rahmens um die Stelle an der mit der Maus geklickt wurde.
Da bei manchen UNIX-Anwendungen die Umrahmung der Dialoge durch
Überschriften oder Scrollbalken unterbrochen sind, gibt es auch die
Möglichkeit, die Dialogerkennung auf die vier Ecken zu beschränken.
Hierfür muß dann folgender Eintrag in der Ini-Datei vorgenommen
werden:
[MouseControl]
StrictFrame=N
Es gibt auch UNIX-Anwendungen, bei denen ein Dialog die ganze Bildschirmbreite
ausfüllt und als Begrenzung nur eine horizontale Line bleibt.
Mit dem Eintrag
HorzFrame=N | U | L | B
kann die Erkennung von Dialogen durch horizontale
Linien eingestellt werden. Mit N (default) werden horizontale Linien nicht
zur Dialogerkennung verwendet. U sucht eine obere Linie,
L eine untere Linie und mit B wird nach je einer Linie nach oben und nach
unten gesucht.
Für Anwendungen, die ständig einen Rahmen anzeigen, wurden Ini-Einträge vorgesehen, mit denen der Bildschirmbereich, in dem Dialoge erkannt werden, eingeschränkt werden kann. Die entsprechenden Ini-Einträge lauten:
DialogTop=0
DialogBottom=25
DialogLeft=0
DialogRight=80
Terms97801 geht davon aus, daß UNIX-Dialoge eine Auswahl bieten. Die aktuelle Auswahl wird invertiert dargestellt, kann mit Cursortasten verändert werden, und mit der Return-Taste bestätigt werden. Wurde ein UNIX-Dialog erkannt, so wird versucht, die Invertierung durch Senden von Cursortasten an die Stelle zu bekommen, an die mit der Maus geklickt wurde. Wurde dieses Ziel erreicht, wird die Return-Taste gesendet.
Soll zur Bestätigung eine andere Taste als die Return-Taste and den UNIX-Host gesandt werden, so kann in der Ini-Datei ein anderer Tastencode eingetragen werden.
DialogConfirmKey=13
Wurde nach einer Maximalzahl von Cursorbewegungen das Ziel nicht erreicht, so bricht die Maussteuerung ab. Mit den Standardwerten werden maximal soviele Cursorbewegung in horizontaler Richtung vorgenommen, wie der Bildschirm Spalten hat. Entsprechendes gilt für die vertikalen Bewegungen. Um im Fall einer Fehlbedienung das "Umherspringen" gering zu halten, können die maximalen Bewegungen für beide Richtungen in der Ini-Datei angegeben werden.
DialogMaxXMove=5
DialogMaxYMove=10
Wird ein negativer Wert angegeben, so wird keine Cursortaste für die entsprechende Bewegungsrichtung gesandt.
Nicht alle Begriffe in einem Dialog sind zur Auswahl gedacht. Eventuell existiert eine Überschrift oder ein Hinweis zum Abbruch des Dialogs. Solche Begriffe lassen sich ebenfalls für die Maussteuerung verwenden. Hierzu muß eine entsprechende Dialogtabelle erstellt werden. Die Tabelle hat den Aufbau: <Tastencode>:<Zeichenkette>
Ist eine solche Tabelle in der Ini-Datei angegeben
DialogTable=<Pfad und Name der Dialog-Tabelle>
so wird nach einem Mausklick in den Dialog als erstes die Tabelle nach dem
Wort, auf das mit der Maus geklickt wurde, durchsucht. Wird das Wort gefunden,
so wird der entsprechende Tastencode gesandt. Andernfalls wird die normale
Auswahlpositionierung versucht.
Mit der Dialogtabelle läßt sich z.B. das Verb in der
Dialogüberschrift zum OK-Knopf machen.
Bei einigen UNIX-Dialogen wird zwar eine Auswahl mit den Cursortasten angewählt, aber diese Auswahl nicht bestätigt. Stattdessen kann mit einer Taste (meist Leertaste) zwischen verschiedenen Möglichkeiten gewählt werden, z.B an/aus. Für solche Fälle gibt es die Dialog-Positionstabelle. Wurde eine solche Tabelle in der Ini-Datei angegeben
DialogPosTable=<Pfad und Name der Dialog-Positionstabelle>
so wird nach dem Erreichen der Auswahl in dieser Tabelle nach dem Auswahltext gesucht. Wird dieser Text gefunden, so wird der dazu eingetragene Tastencode gesendet. Andernfalls wird die Bestätigungstaste abgesetzt.
Mit der Funktion 'keine' ist die rechte Maustaste abgeschaltet.
'Letzte Markierung' stellt die letzte Markierung wieder her. Dies kann nützlich sein, wenn eine UNIX-Anwendung ihre Daten in einer Maske darstellt, und so die Adresse immer an der gleichen Stelle steht.
'Markierung senden' gibt die aktuelle Markierung als Zeichenfolge auf die Leitung an den Host. Bei der Arbeit mit einem Kommandozeilen-Prompt lassen sich so Dateinamen aus einer ls-Anzeige auf die Kommandozeile schreiben. Für die Umsetzung der Markierung in Zeichen gelten die Einstellungen für die Zwischenablage. Für das Kopieren langer Kommandozeilen mit Zeilenumbruch sollte unter Einstellungen..Zwischenablage die Optionen 'kein LF' und 'kein CR' angegeben werden.
Die Option 'In Zwischenablage' kopiert die aktuelle Markierung in die Zwischenablage. Das macht weniger Mühe als der Aufruf des Menüpunkts Bearbeiten.. Kopieren.
Anmerkung:
Der Menüpunkt Bearbeiten..Kopieren wiederholen mit
dem Tastenkürzel <Hoch><Entf> ist in manchen Fällen
günstiger als die Verwendung einer der drei vorangegangenen Funktionen.
Mit 'Taste senden' kann eine beliebige Taste des 97801-Terminals auf
die rechte Taste gelegt werden. Im Rahmen einer UNIX-Menüsteuerung bieten
sich hier die Abbruch- oder Zurück-Taste oder ein sogenannter Hot-Key
an.
Die Taste wird über ihren Scancode angegeben. Der Scancode kann im
Experten-Modus mit der rechten Maustaste abgefragt oder im Anhang nachgeschlagen
werden.
Soll eine Tastenkombination gesendet werden, so wird für hoch 0x100,
für strg 0x200 und für alt der Wert 0x400 zum Tastencode addiert.
Die mittlere Maustaste läßt sich nur verwenden, wenn sie zum einen an der Maus vorhanden und zum anderen ein Maustreiber installiert ist, der die mittlere Maustaste unterstützt.
Der Standard-Maustreiber unterstützt nur zwei Tasten. Für eine dreitastige No-Name-Maus sollte darum im System-Setup ein anderer Maustreiber, z.B. Genius-Maus, eingestellt werden.
Mit dem Knopf 'HIT' wird die Maussteuerung für die
UNIX-Textverarbeitung HIT von Interface-Connection eingestellt.
Die Einstellungen beziehen sich auf die Version 5.0 bzw. 5.1, lassen sich
aber auch für vorangegangene Versionen verwenden.
Die Einstellungen für HIT sind nicht mit speziellen internen Routinen
von Terms97801 verbunden und können ebenso durch direkte Konfiguration
erreicht werden. Ein Betätigen des Knopfs 'HIT' erspart die
Mühe, alle Einstellungen einzeln vorzunehmen und aktiviert die interne
Mausklick-Tabelle, die sonst erst erzeugt und extern
gespeichert werden müßte. Weitere Erläuterungen zur Maussteuerung
von HIT finden sich in den Beispielen (Kapitel 9.4.2).
Application1=abc
Application2=myapp
Application3=xyz
vorgenommen, so werden die Knöpfe 'abc', 'myapp' und 'xyz' in den Dialog
aufgenommen. Ein Klick auf einen dieser Knöpfe aktiviert eine Maussteuerung
gemäß den Einstellungen einer Sektion [abc] bzw. [myapp] bzw.
[xyz].
Diese Sektion wird am einfachsten durch Kopieren einer passend eingestellten
Sektion [MouseControl] und anschließender Umbenennung
erzeugt.
Anmerkung:
Tastaturschablonen können auch durch
Escape-Sequenzen vom Host geladen werden.