home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d9xx
/
d964
/
angie.lha
/
Angie
/
Angie.dok
< prev
next >
Wrap
Text File
|
1993-12-03
|
82KB
|
1,821 lines
----------------------------------------------
Angie 3.6 (3.12.93) © Franz Schwarz - Giftware
----------------------------------------------
ANother Great Intuition Enhancer - Commodity
© 1993 & geschrieben von
Franz Schwarz
Mühlenstraße 2, D-78591 Durchhausen
Uucp: Franz_Schwarz@mil.ka.sub.org
Fido Classic: 2:2476/506.18
Konto 951.207 bei KSK Trossingen, BLZ 643 500 70
GUI erstellt mit Hilfe von GadToolsBox 37.300
Angie ist GIFTWARE. Das heißt, Sie sollten dem Autor ein
hübsches Geschenk, D-Märker oder ZUMINDEST eine originelle
Postkarte zukommen lassen, falls Sie das Programm verwenden.
Als besonders hübsches Geschenk betrachtet der Autor u.a. bespielte
aktuelle Musik-MCs/CDs/LPs - als besonders mieses Geschenk allerdings
solche mit den unsäglichen Machwerken vom Nabtal-Duo, Heino, den
K*sselr**er Spatzen u.ä Subjekten, die mit Ihrem sogenannten
'volkstümlichen' (richtig: volksverdummenden) Harmoniegedudel
kollektiven Hochverrat an der deutschsprachigen Gegenwartskultur
begehen.
Außerdem ist Angie TOLERANCEWARE.
Das heißt, es ist Personen, die Gewalttaten gegen andere
Menschen wegen deren Herkunft, Hautfarbe, sexueller Orientierung,
Geschlecht, Religion, oder Behinderung unterstützen oder
diese billigen, ausdrücklich und strengstens verboten, dieses
Softwarepaket zu verwenden oder irgendeinen Nutzen daraus zu ziehen.
Vorbemerkungen zur deutschsprachigen Dokumentation
--------------------------------------------------
Hallo, Freunde der deutschen Zunge!;-)
Ab Angie 3.2 finden Sie jetzt hier eine Nahezu-1:1-Übersetzung der
englischen Dokumentation vor - das einzige Kapitel, das sich weitherhin
lediglich in der englischsprachigen Dokumentation finden läßt, ist das
Kapitel über programmiertechnische Details von Angie (für Programmierer ist
aber Englisch ohnehin die lingua franca;-)).
Zunächst folgt ein kurzer Überblick über die Funktionen von Angie (im
angelsächsichen Jargon auch 'Features' genannt), sowie daran anschließend
eine bunte Mischung aus Änderungen in neueren Versionen von Angie und
prinzipiell wichtigen Informationen, die nicht gerade offensichtlich sind.
Nach diesem kleinen Vorgeschmack kommt dann endlich die ausführliche
Dokumentation.
Angie sollte übrigens auch weitestgehend selbsterklärend sein, da es
generell Commodore's Benutzeröberflächengestaltungsrichtlinen (so schön
kann Deutsch sein;-)) folgt.
INHALTSVERZEICHNIS
------------------
PROLOG
KONZEPTE VON ANGIE
WAS JEDER ANGIE-BENUTZER WISSEN SOLLTE
DIE ARGUMENTE & DIE INTERAKTIVE BENUTZERSCHNITTSTELLE
DIE VERSCHIEDENEN ANGIE-INTUITION-AKTIONEN
DIE SYNTAX DER ANGIESEQUENZEN
DIE AREXX-SCHNITTSTELLE
WIE MAN HOTKEYS DEFINIERT
TUTORIUM / DIE BEIGEFÜGTE HOTKEY-KONFIGURATION
DIE EVOLUTION VON ANGIE
RECHTLICHES
EPILOG
PROLOG
------
Am Anfang war...
... Angie nur ein hübscher Name, dann kamen die Rolling Stones und machten
daraus eine Rock-Legende. Schließlich kam das Angie-Commodity über alle
Amigas und verhieß ihnen ewige Intuition und erfüllte so die lange
prophezeite Dreieinigkeit in Angie, dem Namen, dem Song und dem Commodity.
Angie ist ein Akronym für
ANother Great Intuition Enhancer
Angie ist allen Amiga-Benutzern gewidmet, die es leid sind, die vielen
Utilities, die teilweise vor üblen Programmier-Hacks strotzen und sich
einen Sch*** um dokumentierte Zugriffsprotokolle scheren, zu benutzen.
Angie wurde mit dem vorrangigen Ziel entwickelt, illegale Speicherzugriffe
und ungesicherte oder undokumentierte Zugriffe auf globale Systemdaten in
allen Fällen und mit allen Mitteln zu vermeiden.
KONZEPTE VON ANGIE
------------------
In der Tat veredelt Angie die einzigartige grafische Benutzeroberfläche des
Amiga -Intuition- auf vielerlei Weise. Aber was noch besser ist: Angie
ist durch und durch konfigurierbar durch den Benutzer - d.h. SIE. Sie
haben also die Möglichkeit ihr eigenes, ganz persönliches Intuition Schritt
für Schritt zu verwirklichen, das ganz genau ihren eigenen Vorlieben
entspricht und gewissermaßen ihre eigene Individualität ausdrückt und ihre
Perönlichkeit definiert (Wer hat das jetzt genau verstanden;-)). Angie
erreicht das, indem es dem Benutzer die komplette Kontrolle über nahezu
alle seinen bedeutsamen Größen und Eigenschaften erlaubt -
selbstverständlich über eine graphische Benutzerschnittstelle.
Unter Angies Funktionen sind
A) automatisches Fenster-Jagen (d.h. Nachvornebringen des
aktuellen Schirms und des aktuellen Fensters, Anpassen des
angezeigten Schirmausschnitts bei übergroßen AutoScroll-Schirmen
='HuntWindow'),
B) Reaktivieren des zuletzt aktiven Fensters / des zuletzt
aktiven Fensters eines anderen Schirms, Merken aller zuletzt aktiven
Fenster aller Schirme (TWA),
C) und ein bisher einmaliges 'Tastendruck-Schirmaktivierungs'-
Feature, das das zuletzt aktive Fenster (oder das Fenster unter dem
Mauszeiger, falls Angie kein Fenster des Schirms in Erinnerung
hat, oder, falls sich auch kein Fenster unter dem Mauszeiger be-
findet, das vorderste Fenster des Schirms) des Schirms über dem sich
der Mauszeiger befindet (oder anstelle dessen des aktiven Schirms, falls
kein aktives Fenster existiert, und der aktive Schirm (zumindest teilweise)
sichtbar ist, oder ersatzweise eines anderen (zumindest teilweise)
sichtbaren, so weit vorne wie möglich angeordneten Schirms, auf dem Fenster
geöffnet sind) aktiviert, *dann, und nur dann*, wenn sich das aktuelle
Fenster auf einem Schirm befindet, der komplett verdeckt ist, oder
überhaupt kein aktives Fenster existiert, und wenn ein Tastendruck-Eingabe-
Ereignis an Angies Tastendruck-Schnüffler gemeldet wird (was normalerweise
bei jedem Tastendruck geschieht, es sei denn Sie haben die entsprechende
Taste in Angie durch eine (Pseudo-)Hotkey-Definition mit dem '~SchrmAktv'-
Attribut speziell davon ausgeschlossen, eine derartige 'Tastendruck-Schirm-
aktivierung'-Aktion auszulösen). Anm. des Autors: Wenn Sie das nicht auf
Anhieb verstanden haben sollten: machen Sie sich nichts daraus - aber
genau so lautet eben die genaue Beschreibung des Tastendruck-Schirm-
aktivierungs-Features. Diese Funktion ist wirklich so wie sie
implementiert wurde äußerst durchdacht, und ich möchte sie nie wieder
missen - Ihnen wird es genau so gehen.
D) Angie bietet schließlich auch eine bisher einmalige automatische
Fenstertask-Priorität-Erhöhung: Diese Funktion ist in der
Multitasking-Umgebung eines Amiga, wo oft mehrere Applikationen
gleichzeitig laufen, nahezu unentbehrlich: Sie erhöht immer die Priorität
des Tasks, der die Eingabe-Ereignisse des aktiven Fensters verarbeitet, und
setzt sobald das Fenster inaktiv wird die Taskpriorität wieder auf
den ursprünglichen Wert zurück, falls niemand anderes zwischenzeitlich die
Taskpriorität verändert hat. Durch diese Funktion wirkt die grafische
Benutzeroberfläche des Amigas niemals träge, weil die Benutzereingaben
immer mit Vorrang vor anderen Applikationen bearbeitet werden. Falls der
Benutzer jedoch keine Eingaben macht, hat das für die Performance der
übrigen Applikationen für gewöhnlich keinen Einfluß: sie erhalten dann die
gesamte Prozessorzeit, da der Task, der die Eingaben aus dem aktiven
Fenster bearbeitet gemeinhin dann lediglich auf die nächste Benutzereingabe
wartet (Editor, etc...)
E) Das herausragende an Angie ist aber, daß man beliebig viele Hotkeys mit
beliebigen 'AngieSequenzen', die aus sechzig Intuition-Funktionen, aus
beliebigen Dos-Kommandosequenzen, und beliebigen Eingabe-Ereignis-Sequenzen
mit beliebig wählbarer Verzögerung zwischen der Ausführung der einzelnen
Elemente zusammengesetzt sein können, belegen kann.
F) Ab Version 3.5 kann Angie auch via AREXX-Port mit AngieSequenzen
gefüttert werden, die es dann ausführt.
WAS JEDER ANGIE-BENUTZER WISSEN SOLLTE
--------------------------------------
JEDER sollte wissen, daß Angie GIFTWARE ist. Sie sollten deshalb nicht
zögern, dem Autor ein hübsches Geschenk, D-Märker (auch Fränkli und
Schillinge willkommen;-)), oder ZUMINDEST eine Postkarte zu schicken, falls
Sie Angie verwenden.
AB VERSION 3.6 (die endgültige für 1993!) kann innerhalb von
dos_kommando_sequenzen das '¶'-Zeichen (<alt p>) als Ersatz für das
Zeilentrenner-Zeichen (Linefeed) verwendet werden.
AB VERSION 3.6 lädt Angie beim Shell-Start automatisch die im
'PROGDIR:Angie'-Piktogramm gespeicherte Konfiguration, falls keine
Argumente angegeben werden.
AB VERSION 3.5 besitzt Angie einen AREXX-PORT namens 'ANGIEREXX', an den
Sie beliebige AngieSequenzen senden können, die Angie dann ausführt.
AB VERSION 3.3 wurde die Hotkey-Liste-Schmöker-Funktion erheblich optimiert
- dies ist besonders für die 68000/68010- Benutzer von Interesse, da diese
Funktion sich auf ihren Rechnern in früheren Angie-Versionen als ziemlich
träge herausgestellt hatte. Angies interaktive grafische Benutzer-
oberfläche arbeitet jetzt hervorragend selbst mit dem verschrobensten
Zeichensatz mit proporionaler Zeichenweite zusammen, desweiteren wird jetzt
das 'Nachziehen' ('Backlogging') beim Ausführen von AngieSequenzen
vermieden, und Angie reagiert jetzt auf Eingaben in Angies
Benutzerschnittstellen-Fenster selbst in Extremsituationen unverzüglich.
AB VERSION 3.1 werden mit Angie drei kleine Utilties mitvertrieben, die
sich exzellent zur Benutzung innerhalb von AngieSequenzen eignen:
SetActiveWin, MagicPubName & RawInsert - allesamt vom Autor von Angie
geschrieben. Für nähere Informationen über die Utilties, schauen Sie bitte
in die entsprechenden DokumentationsDateien. INSBESONDERE SOLLTEN SIE
SICH DIE BEISPIEL-ANGIESEQUENZEN IN DER DOKUMENTATION ZU SETACTIVEWIN
ÄUßERST GENAU ANSCHAUEN.
AB VERSION 3.1 wird für SyncDosSequenzen KEINE Konsole mehr geöffnet, und
SyncDosSequenzen werden nicht mit der Priorität ausgeführt, mit der Angie
gestartet wurde, sondern mit derjenigen, mit der Angie läuft (normalerweise
5).
NEUE EIGENSCHAFTEN VON ANGIE 3.0:
Angie 3.0 hebt die meisten Beschränkungen auf, die die commodities.library
V37-V40 im Bezug auf das Übersetzen von Commodity-Eingabeereignis-
Beschreibungen in InputXpressions setzt. So können innerhalb von Angie nun
auch die armen Workbench 2.04 - Benutzer die rawmouse-Tastencodes
'MOUSE_LEFTPRESS', 'MOUSE_MIDDLEPRESS' & 'MOUSE_RIGHTPRESS' verwenden, die
sonst erst ab Workbench 2.1 unterstützt werden. Bis zumindest
einschließlich Workbench 3.1 kennt die commodities.library leider keine
Tastencodes für die Tastatur-Qualifier-Tasten wie Shift, Alt, Control, etc.
Innerhalb Angie können Sie jedoch die rawkey-Tastencodes 'CONTROL_PRESS',
'CAPS_PRESS', 'LSHIFT_PRESS', 'RSHIFT_PRESS', 'LALT_PRESS', 'RALT_PRESS',
'LAMIGA_PRESS' & 'RAMIGA_PRESS' verwenden. Die notwendigen Erweiterungen,
um diese zusätzlichen Keycodes übersetzen zu können, wurden dabei so
gestaltet, daß diese Erweiterungen mit jeder zukünftigen Version der
commodities.library zusammenarbeiten.
Einige Commodity-Eingabeereignis-Beschreibungen, die innerhalb von Angie
mit jeder Version der commodities.library richtig übersetzt werden:
'rawmouse leftbutton mouse_leftpress'
'rawmouse -capslock upstroke mouse_middlepress'
'lshift -capslock -control -alt lshift_press'
'-capslock -upstroke caps_press'
Es bleibt zu bemerken, daß trotz dieser Angie-internen Verbesserungen die
commodities.library V37 weiterhin auch innerhalb von Angie unfähig ist, die
'leftbutton'-, 'midbutton'- & 'rbutton'-Qualifier korrekt anzuwenden - die
commodities.library V37 ignoriert diese Qualifier also weiterhin.
DIE WICHTIGSTE ÄNDERUNG AN ANGIE 3.0 im Vergleich zu früheren Versionen
BESTEHT JEDOCH DARIN, DAß DIE HOTKEYS JETZT MIT 'ANGIESEQUENZEN' BELEGT
WERDEN. Eine 'AngieSequenz' besteht aus einer BELIEBIGEN ZAHL von Angies
Intuition-Funktionen, beliebigen synchron oder asynchron auszuführenden
Dos-Kommando-Sequenzen, Ascii-Text-Sequenzen und Commodities-Eingabe-
ereignis-Beschreibungen, mit beliebiger Verzögerung zwischen jedem
einzelnen Element. Als Konsequenz daraus schreibt Angie jetzt seine
Hotkey-Tooltypes in einem anderen Format, aber Angie KANN WEITERHIN ALTE
KONFIGURATIONEN EINLESEN.
Eine weitere neue Eigenschaft von Angie 3.0 ist das '~Filtern'-Attribut,
das das alte 'NachVorn'-Attribut ersetzt, welches nun für jedes einzelne
Element einer AngieSequenz einzeln spezifiziert werden kann. Das
'~Filtern'-Attribut hat die Auswirkung, daß das jeweilige Eingabeereignis,
das die Ausführung einer AngieSequenz auslöst, im Eingabestrom bleibt und
nicht wie gewohnt daraus entfernt wird.
Angie 3.0 hat (schon wieder) einen neuen (standardmäßig eingestellten)
Auto-Fenster-Jagen-Modus: 'CapsLock1'. Der von Angie 2.0 her bekannte
'CapsLock'-Modus ist als Option immer noch vorhanden - er trägt jetzt den
Namen 'CapsLock2'.
In den CapsLock*-Auto-Fenster-Jagen-Betriebsarten wird die CapsLock-Taste
als Ein-/Aus-Schalter für das Auto-Fenster-Jagen zweckentfremdet. Bei
aktiver CapsLock2-Betriebsart werden außerdem alle CapsLock-Eingabe-
ereignisse und auch der Capslock-Qualifier von Angie ausgefiltert und
erreichen weder alle andere Commodity-Objekte (CxObjects) von Angie noch
Commodities, die hinter Angie im Commodity-Netzwerk liegen.
BIS ANGIE 1.7 gab es bei eingeschalteter Tastendruck-Schirmaktivierung-
Funktion unschöne Nebenwirkungen in Zusammenhang mit Hotkeys, die Schirme
blättern, falls für diese Hotkeys, wenn sie in Angie definiert waren, das
~SchrmAkt-Attribut nicht gesetzt war oder wenn für Hotkeys, die außerhalb
von Angie definiert waren, kein NoKeyActivate-Pseudo-Hotkey- Eintrag in
Angie angelegt wurde. Beachten Sie, daß dies AB ANGIE 2.0 nicht mehr der
Fall ist, da Angie jetzt eine andere, komplexere (aber extrem kompatible)
Vorgehensweise bei der Ausführung der Tastendruck-Schirmaktivierung-
Funktion verwendet. Bis ANGIE 3.2 war die Dokumentation zu diesem Punkt
jedoch leider noch auf dem Stand von Angie 1.7
Andere wichtige Informationen in Kürze
Wann tritt eine Auto-Fenster-Jagen-Aktion ein???
Eine Auto-Fenster-Jagen-Aktion tritt nicht notwendigerweise gleich
dann ein, wenn eine Änderung festgestellt wird: Falls der linke
Mausknopf und/oder sein Tastatur-Pendant (linke Alt + Amiga) gedrückt
sind, dann wird die Auto-Fenster-Jagen-Aktion solange zurückgestellt,
bis entweder der linke Mausknopf oder linke Alt + Amiga losgelassen
werden. Weiterhin bewirkt ein Druck auf die rechte Maustaste oder
ein Gedrückthalten derselben, daß eine eventuell anstehende
Auto-Fenster-Jagen-Aktion nicht ausgeführt wird. Falls einer der
CapsLock*-Auto-Fenster-Jagen-Modi aktiviert ist, gilt das gleiche
auch wenn die CapsLock-Taste aktiv ist (d.h sie leuchtet).
Es wird Ihnen geraten, das ~SchrmAktv-Attribut für all Ihre rawkey-Hotkeys
zu setzen, die Schirme blättern und dabei nicht ein Fenster auf dem nach
vorne gebrachten Schirm aktivieren oder die Fenster jagen bzw.
reaktivieren. Dies hält die entsprechenden rawkey-Eingabeereignisse davon
ab, eine Tastendruck-Schirmaktivierung-Aktion auszulösen, die in diesen
Fällen meist unerwünscht ist.
Da dies normalerweise auch für rawkey-Hotkeys, die außerhalb von Angie
definiert sind und entsprechende Aktionen auslösen, gilt, können Sie auch
solche 'fremden' Hotkeys davon ausschließen, eine Tastendruck-
Schirmaktivierung-Aktion auszulösen, indem sie für diese Hotkeys in Angie
NoKeyActivate-Pseudo-Hotkey-Einträge anlegen. Diese NoKeyActivate-
Pseudo-Hotkeys haben den einzigen Zweck, die entsprechenden Eingabe-
ereignisse von der Auslösung von Tastendruck-Schirmaktivierung-Aktionenen
auszuschliessen.
Sie können z.B. das Standard-Intuition-Schirmblättern mit den lcommand m/n-
Tasten davon ausschliessen:
'lcommand -repeat -caps -alt -control m' &
'lcommand -repeat -caps -alt -control n' &
'lcommand lamiga_press'
(PSEUDO-Aktion aus dem Menü: 'NoKeyActivate')
Die Text-Eingabe-Gadgets von Angie haben spezielle Edier-Eigenschaften:
'ESC' verläßt das Gadget, wobei die im Gadget gemachten Änderungen
ignoriert werden, und innerhalb der 'Hotkeys edieren'- & 'Aktion'-Gadgets
haben die Cursor Hoch/Runter-Tasten ein spezielle Belegung.
Außerhalb der Gadgets bewirkt ein Druck auf 'ESC', daß das Angie-Fenster
geschlossen wird, während ein Druck auf die 'z'-Taste Angies Fenster
ikonifiziert bzw. die reguläre Größe wiederherstellt, und mit den
Cursor-Hoch-/Runter-Tasten können Sie durch die Hotkey-Liste schmökern.
Falls Sie Angie von der Shell aus starten, so müssen Sie alle Argumente,
die einen Wert besitzen, in Anführungszeichen einschließen, also
z.B. "CX_PRIORITY=127" anstelle von CX_PRIORITY=127 tippen.
Von Version 2.0 an besitzt Angie eine bessere, ausgefeiltere Unterstützung
für die Situation, daß zwar ein aktiver Schirm existiert, aber kein aktives
Fenster. Drei der vielen Konsequenzen die sich daraus ergeben:
1. Die 'HuntWindow'-Hotkey-Aktion jagt den aktiven Schirm falls kein
aktives Fenster existiert.
2. Falls die Tastendruck-Schirmaktivierung an ist, und ein (zumindest
teilweise) sichtbarer Schirm aktiv ist, und kein aktives Fenster existiert,
so tritt eine Tastendruck-Schirmaktivierung-Aktion ein (wobei das bevorzugt
aktivierte Fenster bei dieser Aktion das zuletzt auf dem aktiven Schirm
aktive Fenster ist)
3. Alle Hotkey-Aktionen, die auf Fenster basieren, lösen grundsätzlich
(also auch bei deaktivierter Tastendruck-Schirmaktivierung-Funktion!) eine
Tastendruck-Schirmaktivierung-Aktion aus, falls kein aktives Fenster
existiert, wobei bei dieser Aktion das aktivierte Fenster gemäß den
Attributen des auslösenden Hotkeys möglicherweise nach vorne gebracht /
gejagt wird.
DIE ARGUMENTE & DIE INTERAKTIVE BENUTZERSCHNITTSTELLE
-----------------------------------------------------
Die interaktive Benutzerschnittstelle hält sich an Commodore's
Benutzeröberflächengestaltungsrichtlinen aus dem 'Amiga User Interface
Style Guide'. Ihre Benutzung sollte deshalb weitgehend selbsterklärend
sein. Weiterhin werden die Standard-Commodities-Tooltype-Argumente
'CX_PRIORITY, CX_POPUP & CX_POPKEY unterstützt.
Achtung: Falls Sie Angie von der Shell aus starten, so müssen alle
Argumente, die zugewiesene Werte enthalten, in Anführungszeichen
eingeschlossen werden, also z.B. "CX_PRIORITY=127" anstelle von
lediglich CX_PRIORITY=127
Angie lädt beim Start automatisch die im 'PROGDIR:Angie'-Piktogramm
gespeicherte Konfiguration, falls Sie das 'DEFAULTPREFS'-Argument anführen
oder falls Sie Angie von der Shell aus starten und überhaupt keine
Argumente angeben.
Sie können die im Piktogramm gespeicherte Konfiguration auch dann
verwenden, wenn Sie Angie von der Shell aus starten, indem Sie
entweder überhaupt keine Argumente übergeben oder das 'DEFAULTPREFS'-
Argument anführen.
Es folgt nun eine kurze Beschreibung der Elemente der interaktiven
Benutzeroberfläche und von Angies Tooltype-Argumenten:
Das Auto-Fenster-Jagen - Gadget:
Mit diesem Gadget kontrollieren Sie die 'Auto-Fenster-Jagen'-Funktion
von Angie. Diese Funktion bestimmt, ob Angie automatisch Fenster jagen
soll oder nicht. Fenster-Jagen besteht darin, das aktive Fenster und
den aktiven Schirm nach vorne zu bringen und die Position des aktiven
Schirms so anzupassen, daß so viel wie möglich vom aktiven Fenster
sichtbar ist (also möglichst das gesamte Fenster). Wenn das Fenster
aber zu groß für die Anzeige ist, dann wird die Schirmposition so
verändert, daß die linke bzw. die obere Ecke des Fensters in der linken
bzw. der oberen Ecke der Anzeige dargestellt wird. Einzige Ausnahme
hiervon sind Backdrop-Fenster: Hier wird lediglich sichergestellt, daß
die gesamte Anzeige (d.h. der DisplayClip) vom Schirm ausgefüllt wird.
In anderen Worten: falls der Schirm heruntergezogen ist, wird er nach
oben zurückgerollt, ansonsten wird die Schirmposition nicht verändert.
Bei einer Fenster-Jagen-Aktion wird der betroffene Schirm immer nur so
wenig wie möglich gerollt.
Falls die Auto-Fenster-Jagen-Funktion aktiv ist, führt Angie immer dann
eine solche Fenster-Jagen-Aktion durch, wenn sich der aktive Schirm,
das aktive Fenster oder dessen Position oder Größe verandert haben.
Eine Auto-Fenster-Jagen-Aktion tritt nicht notwendigerweise gleich
dann ein, wenn eine Änderung festgestellt wird: Falls der linke
Mausknopf und/oder sein Tastatur-Pendant (linke Alt + Amiga) gedrückt
sind, dann wird die Auto-Fenster-Jagen-Aktion solange zurückgestellt,
bis entweder der linke Mausknopf oder linke Alt + Amiga losgelassen
werden. Weiterhin bewirkt ein Druck auf die rechte Maustaste oder
ein Gedrückthalten derselben, daß eine eventuell anstehende
Auto-Fenster-Jagen-Aktion nicht ausgeführt wird. Falls einer der
CapsLock*-Auto-Fenster-Jagen-Modi aktiviert ist, gilt das gleiche
auch wenn die CapsLock-Taste aktiv ist (d.h sie leuchtet).
Dieses Gadget bietet vier verschiedene Einstellungen:
A: 'CapsLock1': In dieser Betriebsart ist Angies Auto-Fenster-Jagen-
Funktion aktiviert, es sei denn die CapsLock-Taste ist aktiv (d.h.
sie leuchtet). Die CapsLock-Taste wird also zweckentfremdet als ein
Auto-Fenster-Jagen-Ein-/Aus-Schalter. Dies ist die standardmäßgie
Betriebsart.
B: 'CapsLock2': wie CapsLock2, aber zusätzlich werden alle CapsLock-
Tastenddruck-Ereignisse und der CapsLock-Qualifier von Angie
verschluckt, und erreichen weder Angies Hotkey-Objekte noch andere
Commodity-Broker, die hinter Angie im Commodities-Netzwerk eingebunden
sind.
C: 'Immer': In diesem Modus ist die Auto-Fenster-Jagen-Funktion stets
an - die CapsLock-Taste spielt dabei keine Rolle.
D: 'Aus': Diese Einstellung deaktiviert die Auto-Fenster-Jagen-Funktion.
Das zu diesen Einstellungen gehörende Argument ist 'AUTOHUNTMODE' und
ist standardmäßig auf 'CAPSLOCK1' gesetzt.
Die Ein-/Aus-Schalter-Gadgets:
Jagen bei FensterVor-Hotkeys - falls aktiviert, führt Angie eine
automatische Fenster-Jagen-Aktion aus, wann immer es aufgrund einer
Aktion innerhalb einer AngieSequenz ein Fenster nach vorne bringt.
Das entsprechende Argument 'HUNTMODEWFRONT' ist standardmäßig
auf 'YES' gesetzt.
Jagen: Std-Öff. Schirm setzen - bestimmt, ob bei jeder Fenster-Jagen-
Aktion zusätzlich auch der aktive Schirm zum standardmäßigen
öffentlichen Schirm gemacht werden soll. Falls der gejagte Schirm
dabei kein öffentlicher Schirm ist, wird der Workbench-Schirm zum
standardmäßigen öffentlichen Schirm.
Das Argument für diesen Schalter lautet 'HUNTMODESETDEFPUBSCR' und
ist standardmäßig auf 'NO' gesetzt.
Tastendruck-Schirmaktivierung - (de)aktiviert eine nette, bisher
einmalige Funktion, die das zuletzt aktive Fenster (oder das
Fenster unter dem Mauszeiger, falls Angie kein Fenster des Schirms in
Erinnerung hat, oder, falls sich auch kein Fenster unter dem
Mauszeiger befindet, das vorderste Fenster des Schirms) des Schirms
über dem sich der Mauszeiger befindet (oder anstelle dessen des
aktiven Schirms, falls kein aktives Fenster existiert, und der aktive
Schirm (zumindest teilweise) sichtbar ist, oder ersatzweise eines
anderen (zumindest teilweise) sichtbaren, so weit vorne wie möglich
angeordneten Schirms, auf dem Fenster geöffnet sind) aktiviert, *dann,
und nur dann*, wenn sich das aktuelle Fenster auf einem Schirm
befindet, der komplett verdeckt ist, oder überhaupt kein aktives
Fenster existiert, und wenn ein Tastendruck-Eingabe-Ereignis an
Angies Tastendruck-Schnüffler gemeldet wird (was normalerweise bei
jedem Tastendruck geschieht, es sei denn Sie haben die entsprechende
Taste in Angie durch eine (Pseudo-)Hotkey-Definition mit dem
'~SchrmAktv'- Attribut speziell davon ausgeschlossen, eine derartige
'Tastendruck-Schirmaktivierung'-Aktion auszulösen).
'KEYACTIVATE' ist das zugehörige Argument und ist standardmäßig auf
'YES' gesetzt.
Fenstertask-Priorität erhöhen - Schaltet die gleichnamige, in der
Multitasking-Umgebung eines Amiga, wo oft mehrere Applikationen
gleichzeitig laufen, nahezu unentbehrliche Funktion ein bzw. aus:
Diese Funktion erhöht immer die Priorität des Tasks, der die
Eingabe-Ereignisse des aktiven Fensters verarbeitet, und setzt sobald
das Fenster inaktiv wird die Taskpriorität wieder auf den
ursprünglichen Wert zurück, falls niemand anderes zwischenzeitlich die
Taskpriorität verändert hat. Durch diese Funktion wirkt die grafische
Benutzeroberfläche des Amigas niemals träge, weil die Benutzereingaben
immer mit Vorrang vor anderen Applikationen bearbeitet werden. Falls
der Benutzer jedoch keine Eingaben macht, hat das für die Performance
der übrigen Applikationen für gewöhnlich keinen Einfluß: sie erhalten
dann die gesamte Prozessorzeit, da der Task, der die Eingaben aus dem
aktiven Fenster bearbeitet gemeinhin dann lediglich auf die nächste
Benutzereingabe wartet (Editor, etc...)
Das zugehörige 'RAISEWINTASKPRI'-Arguemnt ist standardmäßig auf 'YES'
gesetzt.
Backdrop-Fenster mitblättern - bestimmt, ob Backdrop-Fenster
mitgeblättert werden sollen, wenn in AngieSequenzen Fenster-Blätter-
Aktionen ausgeführt werden.
Das zugehörige Argument 'SHUFFLEBACKDROP' ist standardmäßig auf
'NO' gesetzt.
GUI-Fenster beim Start öffnen - falls Sie wollen, daß Angies interaktive
Benutzeroberfläche beim Starten geöffnet wird, setzen Sie diesen
Schalter, andernfalls deaktivieren Sie ihn.
Das entsprechende Argument 'CX_POPUP' ist standardmäßig auf 'YES'
gesetzt.
Die Schieberegler haben folgende Bedeutung:
Stabilisier-Spanne - der Schnüffeltask erwartet, daß der aktive Schirm,
das aktive Fenster, dessen Größe und Position die hier in Millisekunden
angegebene Zeit unverändert bleiben, bevor er dem Hauptprogramm eine
Änderung derselben mitteilt. Der Wertebereich dieses Reglers ist
-1..1000, wobei -1 ein spezieller Wert ist, der bedeutet, daß der
Schnüffeltask, sobald er eine Änderung entdeckt, dies dem Haupt-
programm sofort mitteilt. Alle positiven Werte, einschließlich 0
bewirken, daß die untersuchten Größen zumindest während zwei Schnüffel-
vorgängen, und zumindest während der angegebenen Zeit in Millisekunden
unverändert sein müssen, bevor dem Hauptprogramm eine Änderung
mitgeteilt wird.
Das Argument für diese Einstellung lautet 'STABLETIME' und ist standard-
mäßig auf 20 gesetzt.
Schnüffelintervall - mit diesem Regler wird die Verzögerungsdauer
eingestellt, die der Schnüffeltask zwischen zwei Schnüffelvorgängen
verstreichen lassen soll. Beachten Sie, daß die Genauigkeit dieser
Verzögerungsdauer an den Bildaufbau-Interrupt (vertical blanking
interrupt), der jeweils in der vertikalen Austastlücke auftritt
gebunden ist. Die Bildwiederholfrequenz beträgt gewöhnlich 50Hz (PAL)
bis 70Hz (EURO36, EURO72, SUPER72), d.h. daß Sie niemals mehr als
etwa 50 (PAL) bis 70 (EURO36, etc.) Schnüffelvorgänge pro Sekunde
erreichen können. Andere Quellen als Zeitgeber wie ein CIA-Timer
scheiden in diesem Zusammenhang aus, da Sie zu viele Ressourcen für
zuwenig Gegenwert (hier kommt es wirklich nicht auf Genauigkeit an)
verbraten. Falls Sie hier große Werte einstellen, sollten Sie
unbedingt die Stabilisierspanne auf -1 setzen. Der gültige Bereich
für diesen Schieberegler ist 10..1000
Das hier zugehörige Argument 'SNOOPDELAY' ist standardmäßig auf
30 gesetzt.
Schirm-Schritte - hiermit bestimmen Sie das Quantum, das Schirme
bei einer 'MoveScrXXX'-Aktion verschoben werden sollen. Dieses
Verschiebequantum bei einer solchen Aktion berechnet sich dabei
aus Größe der Anzeige (DisplayClip) des Schirms geteilt durch
den hier angegebenen Wert. Die Skala dieses Schiebereglers geht
von 1 bis 50.
'SCRMOVESTEPS' ist das Argument hierfür, es ist standardmäßig
auf 5 gesetzt.
Fenster-Schritte - wie Schirm-Schritte, nur bestimmen Sie mit diesem
Wert das Quantum für 'MoveXXX'-, 'ExpandXXX'- und 'ShrinkXXX'-
Operationen.
Das entsprechende Argument lautet 'WINMOVESTEPS' und ist standard-
mäßig auf 5 gesetzt.
CX-Priorität - hiermit bestimmen Sie die Priorität von Angies
Commodity-Broker. Beachten Sie, daß ihre Einstellung unmittelbar
umgesetzt wird, und nicht erst beim nächsten Start, wobei der Aufwand
um dies zu erreichen nicht unbeträchtlich war. Der Einstellbereich
für diesen Schieberegler ist -128..127
Das zugehörige Argument lautet 'CX_PRIORITY' und ist standardmäßig
auf 0 gesetzt.
Es existiert ein einzelnes Texteingabe-Gadget namens 'Namensmuster für
Fenster-Blättern', mit dem Sie das AmigaDos-Namensmuster angeben
können, das auf Fenstertitel beim Fensterblättern mit den
'ActivateNext'- bzw. 'ActivatePrev'-Aktionen angewandt wird. Fenster,
deren Name nicht auf das Namensmuster paßt, werden beim Blättern
übergangen.
Das Argument hierfür lautet 'SHUFFLEPAT' und ist standardmäßig auf
'#?' gesetzt. (Alle Namen passen auf das '#?' Namensmuster)
Die übrigen Gadgets bilden ein System, um die Aktions-Hotkey-Liste von
Angie zu unterhalten:
Benutzen Sie das 'NEU'-Gadget, um neue Hotkeys in die Liste
hinzuzufügen, das 'LÖSCHEN'-Gadget, um Hotkey-Einträge aus der Liste
zu entfernen, das 'HOCH'-Gadget, um einen Hotkey-Eintrag in der Liste
um eins nach oben zu verschieben, sowie das 'RUNTER'-Gadget, um einen
Hotkey-Eintrag in der Liste um eins nach unten zu verschieben.
Mit dem Listen-Anzeige-Gadget für die Hotkeys können Sie durch die
Hotkey-Liste schmökern, und den Hotkey-Eintrag auswählen, der verändert
werden soll.
Folgende Gadgets dienen dazu, den angewählten Hotkey-Eintrag zu
verändern:
Im 'Aktion'-Texteingabe-Gadget können Sie eine beliebige 'AngieSequenz'
mit einer Länge von bis zu 255 Zeichen eingeben, die ausgeführt wird,
wenn Sie den Hotkey auslösen. Dabei wird stinknormaler Text außerhalb
jeglicher Klammern als Ascii-Text aufgefaßt, der in den Eingabestrom
eingefügt wird. Text innerhalb spitzer Klammern wie '<lshift lshift_press>'
stellt eine Commodities-Eingabeereignis-Beschreibung dar, Text in normalen,
runden Klammern wie '(^ActivateNextScreen)' repräsentiert eine Angie-
Intuition-Aktion (falls der Text jedoch nicht mit dem Namen einer Angie-
Intuition-Aktion übereinstimmt ersatzweise eine asynchron auszuführende
Dos-Kommandosequenz), Text in eckigen Klammern wie
'[^cd ram:<CTRL-J>newshell *]' wird ebenfalls als asynchron auszuführende
Dos-Kommandosequenz aufgefaßt, während Text in geschweiften Klammern wie
{magicpubname q tofront CygnusEdScreen1} als synchron auszuführende Dos-
Kommandosequenz angesehen wird. Ein '#n'-Ausdruck bedeutet eine
Verzögerung, die vor der Ausführung jedes folgenden Elements der
AngieSequenz gewartet werden soll, und eine '~n'-Folge steht für eine
einalige Verzögerung (wobei der gültige Bereich für n jeweils 0...999
Millisekunden ist). Als allererstes Zeichen einer AngieSequenz, oder
als Zeichen, das im Falle eines '()'/'[]'/'{}'-geklammerten Elements
direkt auf die öffnende Klammer folgt, kann ein '^' (NachVorn-
Attribut) angegeben werden. Es bewirkt, daß das in die folgende
Operation involvierte Fenster, oder ersatzweise der betroffene Schirm,
falls kein Fenster von der Aktion berührt wird, nach vorne gebracht
wird. Ein Beispiel für eine gültige AngieSequenz stellt z.B.
'{magicpubname q tofront ShellScr}(^ActivateFrontScr)<control x>~200 list '
dar.
Innerhalb des 'Aktion'-Gadgets, haben die Cursor-Hoch/Runter-Tasten eine
spezielle Belegung: falls sich der Cursor innerhalb eines geklammerten
Elementes, oder auf einem Leerzeichen befindet, so wird dieses Element
entweder durch die erste oder letze Angie-Intuition-Aktion aus Angies
Intuition-Aktionen-Liste ersetzt. Andernfalls, falls der Cursor sich nicht
innerhalb eines geklammerten Elementes oder auf einem Leerzeichen befindet,
dann wird die entsprechende Angie-Intuition-Aktion bei der Cursorposition
eingefügt. Alle darauf folgenden, nacheinander auftretenden Betätigungen
der Cursor-Hoch/Runter-Tasten auf diesem Element bewirken dann ein
'Blättern' des Elementes durch die verschiedenen Angie-Intuition-Aktionen.
Das Drücken der ESC-Taste bewirkt, daß das Aktion-Gadget verlassen wird,
wobei alle darin gemachten Änderungen verworfen werden.
Ein anderer Weg, den Inhalt des Aktion-Gadgets zu verändern, besteht darin,
die jeweilige Angie-Intuition-Aktion aus dem 'Hotkey-Typ·edieren'-Menu
auszuwählen. Dabei wird der gesamte bisherige Inhalt des Aktions-Gadgets
durch den Namen der gewählten Aktion ersetzt.
Eine weiteres Gadget, mit dem der aktive Hotkey-Eintrag verändert wird,
stellt das 'Attr'-Gadget dar. Mit ihm können Sie dem Hotkey-Eintrag
drei verschieden Attribute zuweisen:
1. '~Filtern': Falls dieses Attribut gesetzt ist, wird ein
Eingabeereignis, das auf die Hotkey-Defintion paßt, im Eingabestrom
belassen, anstelle es wie normalerweise daraus zu entfernen.
2. '~SchrmAktv': Dieses Attribut verhindert, daß die Betätigung eines
rawkey-Hotkeys zu einer Tastendruck-Schirmaktivierung-Aktion führen kann.
Für die 'NoKeyActivate'-Pseudo-Aktion wird es automatisch gesetzt.
Allgemein sollten Sie dieses Attribut bei Hotkeys benutzen, die Schirme
blättern ohne ein Fenster auf dem nach vorne gebrachten Schirm zu
aktivieren, und bei Hotkeys, die mit Aktionen belegt sind, die Fenster
jagen oder reaktivieren ('HuntWindow', 'LastActive' & 'LastActiveScr').
3. 'Wdholbar': hat die Auswirkung, daß Hotkey-Betätigungen, die aufgrund
der Tastenwiederholung der Tastatur entstanden sind, normal abgearbeitet
werden sollen, anstatt sie nur auszufiltern (globale Standardeinstellung
von Angie). Für Hotkeys, in deren Definition nicht '-repeat' oder 'repeat'
vorkommt, ist dieses Attribut ohne Auswirkung.
Diese drei Attribute können auch durch die Einträge im 'Hotkeys·edieren->
Attribute'-Untermenü verändert werden.
Das wichtigste Gadget innerhalb der Gruppe der Gadgets, die den aktuellen
Hotkey-Eintrag verändern, stellt aber sicherlich das Texteingabegadget des
Listen-Darstellungs-Gadgets, in dem die Hotkeys aufgeführt sind, dar.
Mit ihm können Sie die Eingabeereignisse festlegen, die den jeweiligen
Hotkey auslösen, indem sie darin eine gültige Commodities-Eingabeereignis-
Beschreibung eintippen. Falls die Eingabeereignis-Beschreibung ungültig ist,
wird anstelle der neu eingegebenen ungültigen Beschreibung wieder die zuvor
aktive Beschreibung verwendet. Innerhalb dieses Gadgets haben die
Cursor-Hoch-/-Runter-Tasten auch eine spezielle Belegung: Ihre Betätigung
ist analog zu einem Druck auf die Return-Taste bei aktiviertem Gadget und
einem darauf folgenden Druck auf die entsprechende Cursor-Taste außerhalb
des Gadgets. Wie alle Texteingabe-Gadgets von Angie, kann auch dieses
Gadget mit einem Druck auf die ESC-Taste verlassen werden, wobei die im
Gadget gemachten Änderungen verworfen werden.
Das Projekt-Menü sollte selbsterklärend sein:
-Neu setzt Angie auf die Standardeinstellungen zurück.
-Einstellungen·laden lädt die Konfiguration, die derzeit im
PROGDIR:Angie-Piktogramm gespeichert ist.
-Wiederherstellen setzt Angie auf die Konfiguration zurück, die
zuletzt eingelesen wurde - entweder beim Programmstart oder nach
Auswahl des Einstellungen·laden-Menüpunktes.
-Information öffnet ein Fenster mit Informationen über Angie. Beachten
Sie, daß während dieses Fenster dargestellt wird, Angie sich in
inaktivem Zustand befindet.
-Verbergen schließt die interaktive Benutzeroberfläche von Angie
-Beenden beendet Angie.
Das unterstrichene Zeichen im Gadget-Text bezeichnet diejenige Taste, die
verwendet werden kann, um das jeweilige Gadget über Tastatur zu betätigen.
Weiterhin können die Cursor-Hoch-/-Runter-Tasten verwendet werden, um durch
die Hotkey-Liste zu schmökern, die DEL-Taste kann außerdem dazu verwendet
werden, den aktiven Hotkey-Eintrag zu löschen, ein Druck auf die ESC-Taste
außerhalb der Texteingabe-Gadgets bewirkt, daß Angies interaktive
Benutzerschnittstelle geschlossen wird, während ein Druck auf die 'Z'-Taste
dazu dient, die Größe des Benutzerschnittstellenfensters zwischen Normal-
und Minimalgröße hin- und herzuschalten.
Als gemeinsame Nicht-Standard-Tastatur-Belegung aller Texteingabe-Gadgets
von Angie ist die 'ESC'-Taste innerhalb von Texteingabe-Gadgets mit einer
'CANCEL'-Funktion belegt: das Gadget wird verlassen, wobei alle darin
gemachten Änderungen verworfen werden.
DIE VERSCHIEDENEN ANGIE-INTUITION-AKTIONEN
------------------------------------------
Jede Angie-Intuition-Aktion wird hier kurz umrissen:
CX_POPKEY:
Öffnet Angies Benutzerschnittstelle, oder aktiviert ihr Fenster und jagt
es, falls sie schon offen ist.
HuntWindow:
Führt eine Fenster-Jagen-Aktion aus.
Activate:
Aktiviert das Fenster unter dem Mauszeiger.
ActivateNext:
Blättert vorwärts durch die Fenster des aktuellen Schirms.
ActivatePrev:
Blättert rückwärts durch die Fenster des aktuellen Schirms.
ActivateBackdrop:
Aktiviert das erste Backdrop-Fenster des aktuellen Schirms.
ActivateFrontScr:
Aktiviert das vorderste Fenster des vordersten Schirms.
LastActive:
Aktiviert das Fenster, das vor dem derzeitig aktiven geöffnet war,
oder falls dieses nicht mehr existiert und der Schirm, auf dem es geöffnet
war noch existiert, und dieser Schirm vom derzeitig aktiven Schirm
verschieden ist, das vorderste Fenster jenes Schirms.
LastActiveScreen:
Aktiviert dasjenige Fenster, das zuletzt auf einem anderen Schirm als dem
aktuellen geöffnet war, oder falls dieses nicht mehr existert und der
Schirm, auf dem es geöffnet war noch existiert, das vorderste Fenster
des betreffenden Schirms.
ToFront:
Bringt das aktive Fenster nach vorne.
ToBack:
Bringt das aktive Fenster nach hinten.
AdaptWindow:
Diese Aktion könnte man mit 'Umgekehrtes Fenster-Jagen' umschreiben:
das aktive Fenster wird (falls notwendig) so verschoben und verkleinert,
daß es in den gegenwärtig dargestellten Bildschirmausschnitt seines
Schirms passt.
CenterWindow:
Zentriert das aktive Fenster im gegenwärtig dargestellten Bildschirm-
ausschnitt seines Schirms.
Zip:
Das aktive Fenster wird 'gezipt', d.h. seine Position und Größe werden
hin- und hergeschaltet. Dies entspricht der Betätigung des Zoom-Gadgets.
Close:
Simuliert die Betätigung des Schließ-Gadgets des aktiven Fensters.
Max:
Verändert die Größe und Position des aktiven Fensters so, daß es
exakt den gegenwärtig dargestellten Bildschirmausschnitt seines Schirms
ausfüllt.
MaxWidth:
Wie oben, nur werden hier nur die horizontalen Komponenten beeinflußt.
Außerdem wird diese Operation nur dann ausgeführt, falls nach Ausführung
zumindest ein Teilausschnitt des Fensters im gegenwärtig dargestellten
Bildschirmausschnitt seines Schirms sichtbar wäre.
MaxHeight:
Wie MaxWidth, nur vertikal anstatt horizontal.
MinWin:
Verkleinert das aktive Fenster so weit wie möglich und verschiebt es in
die like untere Ecke des gegenwärtig dargestellten Bildschirmausschnitts
seines Schirms.
MoveLeft / MoveRight / MoveUp / MoveDown:
Verschiebt das Fenster in die entsprechende Richtung, wobei das
Verschiebequantum von der gegenwärtigen 'Fenster Schritte'-Einstellung
gewonnen wird.
UpperLeft / LowerLeft / UpperRight / LowerRight:
Platziert das Fenster in der jeweiligen Ecke des gegenwärtig
dargestellten Bildschirmausschnitts seines Schirms.
ExpandWidth / ExpandHeight / ShrinkWidth / ShrinkHeight:
Vergrößert bzw. verkleinert die Breite bzw. Höhe des aktiven Fensters,
wobei das Quantum von der gegenwärtigen 'Fenster Schritte'-Einstellung
gewonnen wird.
DoubleWidth / DoubleHeight / HalveWidth / HalveHeight:
Verdoppelt bzw. halbiert die Breite bzw. Höhe des aktiven Fensters.
ActivateNextScreen / ActivatePrevScreen / ActivateWBenchScreen /
ActivateDefPubScreen:
Blättert vorwärts bzw. rückwärts durch die Schirmliste, bzw. bringt
den Workbench-Schirm bzw. den standardmäßigen öffentlichen Schirm
nach vorne und aktiviert das zuletzt aktive oder das vorderste
Fenster des neuen vordersten Schirms. Falls der 'Jagen: Std-Off.
Schirm setzen'-Schalter gesetzt ist, und das Auto-Fenster-Jagen
aktiviert ist, oder sowohl der 'Jagen bei FensterVor-Hotkeys'-Schalter
aktiv ist als auch das NachVorn-Attribut für die Aktion gesetzt ist,
wird außerdem der neue vorderste Schirm auch dann zum vordersten
Schirm gemacht, falls keine Fenster auf ihm geöffnet sind.
NextScreen / PrevScreen / WBenchScreen / DefPubScreen:
wie oben, nur daß keine Fensteraktivierung vorgenommen wird, und
keine Öffentl. Schirm-Aktionen vorgenommen werden.
ScrollScrLeft / ScrollScrRight / ScrollScrUp / ScrollScrDown:
Rollt den aktiven Schirm in die jeweilige Richtung wobei das
Rollquantum von der gegenwärtigen 'Schirm Schritte'-Einstellung
gewonnen wird.
UpperLeftScr / LowerLeftScr / UpperRightScr / LowerRightScr /
ShowScrCenter:
Macht den jeweiligen Schirm-Ausschnitt in der Anzeige (DisplayClip)
sichtbar.
ScreenTop:
Justiert die horizontale Schirmposition so, daß die obere Schirmkante
mit der oberen Kante des DisplayClips des Schirms übereinstimmt.
SetDefPubScreen:
Macht den aktiven Schirm zum standardmäßigen öffentlichen Schirm.
Falls auf dem vordersten Schirm keine Fenster offen sind, und der
aktive Schirm komplett unsichtbar ist, also kein Ausschnitt von ihm
dargestellt wird, dann wird stattdessen der vorderste Schirm für diese
Aktion verwendet.
Falls der von der Aktion betroffene Schirm kein öffentlicher Schirm ist,
so wird der Workbench-Schirm stattdessen zum neuen standardmäßigen
öffentlichen Schirm erklärt.
Filter: (** Pseudo-Aktion - wählen Sie diese durch das Menu an!! **)
Macht rein gar nichts: die einzige Auswirkung besteht darin, daß
die entsprechenden Hotkey-Eingabeereignisse aus dem Eingabestrom entfernt
werden.
NoKeyActivate: (** Pseudo-Aktion - wählen Sie diese durch das Menu an!! **)
Alle Tastatur-Eingabeereignisse, die der Hotkey-Eingabeereignis-
Beschreibung dieses Hotkeys entsprechen, sind grundsätzlich davon
ausgeschlossen, eine Tastendruck-Schirmaktivierung-Aktion auszulösen.
Dies ist dafür nützlich, rawkey-Hotkeys anderer Commodities bzw.
Inputhandler daran zu hindern, Tastendruck-Schirmaktivierung-Aktionen
auszulösen.
(z.B. sinnvoll beim Intuition-Schirmblättern mit lcommand m/n)
DIE SYNTAX DER ANGIESEQUENZEN
-----------------------------
In der folgenden Definition sind Ausdrücke, die von eckigen Klammern
umgeben werden wahlfrei, während Ausdrücke in geschweiften Klammern
beliebig oft wiederholt oder ausgelassen werden können.
AngieSequenz := [ NachVornAttr ] AngieSequenz1
AngieSequenz1 := { IntuitionSequenz | AsyncDosSequenz | SyncDosSequenz |
CxEingabeBeschreibungSequenz | AsciiText |
VerzögSequenz | EinmalVerzögSequenz }
IntuitionSequenz := '(' [ NachVornAttr ] Angie_Intuition_aktion_string ')'
Angie_Intuition_aktion_string := Angie_Intuition_aktion |
async_dos_kommando_sequenz
Angie_Intuition_aktion := "Name einer beliebigen Angie-Intuition-Aktion,
so wie er im Hotkey-Typ·edieren - Menü
angezeigt wird, ausgenommen sind
pseudo_aktion_namen."
pseudo_aktion_name := 'Filter' | 'NoKeyActivate' | 'Custom'
AsyncDosSequenz := '[' [ NachVornAttr ] async_dos_kommando_sequenz ']'
SyncDosSequenz := '{' [ NachVornAttr ] sync_dos_kommando_sequenz '}'
async_dos_kommando_sequenz := dos_kommando_sequenz
sync_dos_kommando_sequenz := dos_kommando_sequenz
dos_kommando_sequenz := [ zeilen_trenner | dos_kommando_zeile ]
[ zeilen_trenner dos_kommando_sequenz ]
zeilen_trenner := '<control-j>' | '¶' ; '¶' = <alt p>
dos_kommando_zeile := "eine Zeile Ascii-Text, die als Dos-Befehl ausgeführt
wird."
CxEingabeBeschreibungSequenz := '<' eingabe_ereignis_beschreibung '>'
eingabe_ereignis_beschreibung := "eine Zeichenkette, die ein Eingabeereignis
gemäß der commodities.library beschreibt."
AsciiText := esc_sequenz | gültiges_zeichen ; Kurzschluß-Auswertung!
esc_sequenz := '\' esc_umschreibung
esc_umschreibung := [ 'n' | 'r' | '0' | 't' | 'f' | ''' | '"' |
'<' | '(' | '[' | '{' | '\' | 'x' sedezimal_wert ]
gültiges_zeichen := "ein beliebiges ASCII-Zeichen mit Ausname
von ungültiges_zeichen."
ungültiges_zeichen := '<' | '(' | '[' | '{'
sedezimal_wert := sedezimal_ziffer [ sedezimal_ziffer ]
sedezimal_ziffer := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' |
'9' | '0' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
VerzögSequenz := '#' [verzög_dauer] [ ' ' ]
EinmalVerzögSequenz := '~' [verzög_dauer] [ ' ' ]
verzög_dauer := "Dezimaldarstellung der Verzögerungsdauer in Millisekunden,
gültiger Bereich 0..999"
NachVornAttr := '^';
BEMERKUNG:
-Wo immer das NachVornAttr(ibut) angegeben werden kann, und eine
'\^'-Sequenz direkt nach jener Position folgt, wird die '\^'-Sequenz
durch ein einzelnes '^'-Zeichen ersetzt.
-Weiterhin kann innerhalb geklammerter AngieSequenz1-Elemente die
schließende Klammer als normales Zeichen verwendet werden, indem man
ihr ein '\' voranstellt (z.B. ist '[echo "[Hello\]"]' eine gültige
async_dos_kommando_sequenz).
Die bisherige formale Defintion sollte eigentlich größtenteils
selbsterklärend sein. Einige Dinge verlangen jedoch eine ausführlichere
Erörterung:
Die verzög(erungs)_dauer von Verzög(erungs)Sequenzen und
EinmalVerzög(erungs)Sequenzen beträgt standardmäßig 50 Millisekunden, falls
sie nicht in den Sequenzen aufgeführt wird.
Wie sich das NachVornAttr(ibut) auswirkt:
-als erstes Element einer AngieSequenz, löst es eine 'ToFront'-
Angie_Intuition_aktion aus bevor der Rest der AngieSequenz bearbeitet
wird.
-bei dos_kommando_sequenzen bewirkt es, daß der standardmäßige öffentliche
Schirm nach vorne springt bevor die dos_kommando_sequenz gestarted wird.
-bei Angie_Intuition_aktionen hängt die Wirkung von der Aktion selbst ab:
falls von der Aktion ein Fenster betroffen ist, springt dieses nach vorne.
Andernfalls, falls überhaupt kein Fenster, aber ein Schirm involviert ist,
so springt dieser nach vorne. Übrigens: Falls die Aktion 'ToBack' ist, so
hat das Attribut selbstverständlich überhaupt kein Auswirkung!;-)
Die Umsetzung der esc_sequenzen in einzelne Zeichen:
\n - Linefeed, Zeilentrenner (wird als Wagenrücklauf eingefügt)
\r - Wagenrücklauf
\0 - Nul
\t - Horizontaler Tabulator
\f - Formfeed, Neue Seite
\xff - ASCII-Code 0xff (f steht dabei für eine Sedezimal-Ziffer)
\' - Apostroph
\" - Anführungszeichen
\\ - Backslash, Rück-Querstrich '\'
\< - '<' spitze Klammer auf
\( - '(' runde Klammer auf
\[ - '[' eckige Klammer auf
\{ - '{' geschweifte Klammer auf
BEACHTEN SIE FOLGENDES!!!!
sync_dos_kommando_sequenzen sind eine kritische Sache weil während ihrer
Ausführung Angie für ALLE anderen Aktionen BLOCKIERT ist. Verwenden Sie
sync_dos_kommando_sequenzen also nur in AngieSequenzen wie
'{magicpubname q tofront CygnusEdScreen1}(^ActivateFrontScr)', in denen
die dos_kommando_sequenz wirklich synchron ausgeführt werden muß und wo
ihre Ausführung nur wenig Zeit beansprucht. Starten sie NIEMALS
interaktive Anwendungen oder änliches synchron!!!
Die Start-Parameter beim Ausführen von async_dos_kommando_sequenzen:
Die Priorität des gestarteten Tasks, dessen Stapelspeichergröße, dessen
aktuelles Verzeichnis und Dos-Befehls-Suchpfad entsprechen denjenigen,
die beim Starten Angie übergeben wurden. Die aktuellen Eingabe- und
Ausgabekanäle werden auf eine interaktive Konsole mit für den aktuellen
standardmäßigen öffentlichen Schirm optimierter Positionierung und
Abmessung gesetzt. Die Konsole hat dabei die WAIT/AUTO/CLOSE-Attribute
gesetzt, und öffnet ihr Fenster erst bei der ersten auftretenden
Ein- / Ausgabe-Operation.
Bei der Ausführung von sync_dos_kommando_sequenzen wird im Unterschied dazu
keine Konsole geöffnet, und die Taskpriorität des gestarteten Tasks
entspricht der gegenwärtigen Priorität des Angie-Tasks.
So weit, so gut. Für nähere Informationen sehen Sie sich bitte die
beigefügte Angie-Konfiguration näher an oder schauen Sie in die
ausführlichere englischsprachige Dokumentation.
DIE AREXX-SCHNITTSTELLE
-----------------------
Angie besitzt eine ARexx-Schnittstelle, mit der Sie Angie von außen (z.B.
aus Ihren ARexx-Skripten) beliebige ARexx-Sequenzen ausführen lassen
können. Zu diesem Zweck richtet Angie beim Programmstart einen
öffentlichen ARexx-Port namens 'ANGIEREXX' ein.
Ein simples Beispiel für ein ARexx-Skript:
options results
address command 'SetActiveWin tpat (%|#?/|#:)Clock'
if rc = 0 then address 'ANGIEREXX' '(HuntWindow)'
else address command 'run <nil: <nil: sys:utilities/clock'
Weiterhin können Sie, indem Sie das Kommando 'QUIT' an Angies ARexx-Port
schicken, Angie verlassen.
WIE MAN HOTKEYS DEFINIERT
-------------------------
Vorbemerkung:
Angie 3.0 hebt die meisten Beschränkungen auf, die die commodities.library
V37-V40 im Bezug auf das Übersetzen von Commodity-Eingabeereignis-
Beschreibungen in InputXpressions setzt. So können innerhalb von Angie nun
auch die armen Workbench 2.04 - Benutzer die rawmouse-Tastencodes
'MOUSE_LEFTPRESS', 'MOUSE_MIDDLEPRESS' & 'MOUSE_RIGHTPRESS' verwenden, die
sonst erst ab Workbench 2.1 unterstützt werden. Bis zumindest
einschließlich Workbench 3.1 kennt die commodities.library leider keine
Tastencodes für die Tastatur-Qualifier-Tasten wie Shift, Alt, Control, etc.
Innerhalb Angie können Sie jedoch die rawkey-Tastencodes 'CONTROL_PRESS',
'CAPS_PRESS', 'LSHIFT_PRESS', 'RSHIFT_PRESS', 'LALT_PRESS', 'RALT_PRESS',
'LAMIGA_PRESS' & 'RAMIGA_PRESS' verwenden. Die notwendigen Erweiterungen,
um diese zusätzlichen Keycodes übersetzen zu können, wurden dabei so
gestaltet, daß diese Erweiterungen mit jeder zukünftigen Version der
commodities.library zusammenarbeiten.
Einige Commodity-Eingabeereignis-Beschreibungen, die innerhalb von Angie
mit jeder Version der commodities.library richtig übersetzt werden:
'rawmouse leftbutton mouse_leftpress'
'rawmouse -capslock upstroke mouse_middlepress'
'lshift -capslock -control -alt lshift_press'
'-capslock -upstroke caps_press'
DIESE FAKTEN FINDEN IM FOLGENDEN TEXT KEINE BEACHTUNG!!
Der folgende Text ist der Dokumentation von Stefan Becker's ToolManager
entnommen. Freundlicherweise hatte er keine Einwände gegen die Verwendung
innerhalb der Dokumentation von Angie:
Wie man einen Tastenbefehl definiert
*************************************
Diese Kapitel beschreibt wie man einen Tastenbefehl als einen Input
Description String definiert, der dann von Commodities ausgewertet
werden kann. Jedes Mal, wenn ein Tastenbefehl ausgeführt wird, erzeugt
Commodities eine Ereignis, das dann von ToolManager dazu benutzt wird
Programmobjekte zu aktivieren oder Dock-Objekte umzuschalten. Ein
Description String hat die folgende Syntax:
[<Klasse>] {[-][<Qualifier>]} [-][upstroke] [<Tastenkode>]
Alle Befehlsworte können groß oder klein geschrieben werden.
`Klasse' beschreibt die InputEvent-Klasse. Dieser Parameter ist
optional und falls er weggelassen wird, dann wird die Vorgabe `rawkey'
benutzt. Siehe InputEvent-Klassen.
Qualifier sind "Signale", die gesetzt oder nicht gesetzt sein
müssen zu dem Zeitpunkt, an dem der Tastenbefehl ausgeführt wird,
sonst wird kein Ereignis erzeugt. Für jeden Qualifier, der gesetzt
sein soll, müssen Sie das Befehlswort angeben. Alle anderen Qualifier
müssen dann nicht gesetzt sein. Falls Sie einen Qualifier ignorieren
wollen, dann setzen sie ein `-' vor sein Befehlswort. Siehe Qualifier.
Normalerweise wird ein Ereignis erzeugt, wenn eine Taste gedrückt
wird. Falls das Ereignis generiert werden soll wenn die Taste
losgelassen wird, dann müssen Sie das Befehlswort `upstroke' angeben.
Wenn sowohl beim Drücken als auch beim Loslassen der Taste ein
Ereignis erzeugt werden soll, dann müssen sie das Befehlswort
`-upstroke' angeben.
Der Tastenkode ist abhängig von der InputEvent-Klasse. Siehe
Tastenkodes.
Achtung: Wählen Sie ihre Tastenbefehle *sorgfältig*, denn
Commodities hat eine hohe Priorität in der InputEvent-Handlerkette,
d.h. vorgegebene Definitionen werden übergangen.
InputEvent-Klassen
===================
Commodities unterstützt die meisten der InputEvent-Klassen, die von
dem input.device erzeugt werden. Diese Sektion beschreibt die Klassen,
die nützlich für ToolManager sind.
`rawkey'
Dies ist die vorgegebene Klasse. Sie beschreibt alle Ereignisse,
die durch die Tastatur erzeugt werden können. Zum Beispiel
erzeugt `rawkey a' oder `a' jedesmal ein Ereignis, wenn die Taste
"a" gedrückt wird. Sie müssen einen Tastenkode für diese Klasse
angeben. Siehe rawkey Tastenkodes.
`rawmouse'
Diese Klasse beschreibt alle Ereignisse, die durch die Maus
erzeugt werden können. Sie müssen einen Tastenkode für diese
Klasse angeben. Siehe rawmouse Tastenkodes.
`diskinserted'
Ereignisse dieser Klasse werden generiert, wenn eine Diskette in
ein Laufwerk gelegt wird. Diese Klasse besitzt keine Tastenkodes.
`diskremoved'
Ereignisse dieser Klasse werden generiert, wenn eine Diskette aus
einem Laufwerk genommen wird. Diese Klasse besitzt keine
Tastenkodes.
Qualifier
==========
Einige Befehlsworte wurden erst bei Commodities V38 eingeführt.
Diese sind mit einem `*' markiert.
`lshift', `left_shift' *
Linke Shift-Taste.
`rshift', `right_shift' *
Rechte Shift-Taste.
`shift'
Irgendeine Shift-Taste.
`capslock', `caps_lock' *
Caps-Lock-Taste.
`caps'
Irgendeine Shift-Taste oder die Caps-Lock-Taste.
`control', `ctrl' *
Control-Taste.
`lalt', `left_alt' *
Linke Alt-Taste.
`ralt', `right_alt' *
Rechte Alt-Taste.
`alt'
Irgendeine Alt-Taste.
`lcommand', `lamiga' *, `left_amiga' *, `left_command' *
Linke Amiga-/Kommando-Taste.
`rcommand', `ramiga' *, `right_amiga' *, `right_command' *
Rechte Amiga-/Kommando-Taste.
`numericpad', `numpad' *, `num_pad' *, `numeric_pad' *
Dieses Befehlswort *muß* angegeben werden, wenn eine Taste von der
Zehnertastatur benutzt wird.
`leftbutton', `lbutton' *, `left_button' *
Linke Maustaste. Siehe unten.
`midbutton', `mbutton' *, `middlebutton' *, `middle_button' *
Mittlere Maustaste. Siehe unten.
`rbutton', `rightbutton' *, `right_button' *
Rechte Maustaste. Siehe unten.
`repeat'
Dieser Qualifier ist gesetzt, wenn die Tastenwiederholung aktiv
ist. Dies ist nur sinnvoll für die InputEvent-Klasse `rawkey'.
Achtung: Commodities V37 hat einen Fehler, der die Benutzung von
`leftbutton', `midbutton' und `rbutton' als Qualifier verhindert.
Dieser Fehler wurde in V38 behoben.
Tastenkodes
============
Jede InputEvent-Klasse besitzt ihre eigenen Tastenkodes:
Tastenkodes für die InputEvent-Klasse `rawkey'
-----------------------------------------------
Einige Befehlsworte wurden erst bei Commodities V38 eingeführt.
Diese sind mit einem `*' markiert.
`a'-`z', `0'-`9', ...
ASCII-Zeichen.
`f1', `f2', ..., `f10', `f11' *, `f12' *
Funktionstasten.
`up', `cursor_up' *, `down', `cursor_down' *
`left', `cursor_left' *, `right', `cursor_right' *
Cursor-Tasten.
`esc', `escape' *, `backspace', `del', `help'
`tab', `comma', `return', `space', `spacebar' *
Spezial-Tasten.
`enter', `insert' *, `delete' *
`page_up' *, `page_down' *, `home' *, `end' *
Tasten der Zehnertastatur. Diese Tastenkodes *müssen* mit dem
Qualifier `numericpad' benutzt werden!
Tastenkodes für die InputEvent-Klasse `rawmouse'
-------------------------------------------------
Diese Befehlsworte wurden erst bei Commodities V38 eingeführt. Sie
sind nicht verfügbar in V37.
`mouse_leftpress'
Drücke die linke Maustaste.
`mouse_middlepress'
Drücke die mittlere Maustaste.
`mouse_rightpress'
Drücke die rechte Maustaste.
Achtung: Um einen dieser Tastenkodes zu benutzen, müssen sie auch
das entsprechende Qualifier-Befehlswort angeben, z.B.
rawmouse leftbutton mouse_leftpress
Beispiele für Tastenbefehle
============================
`ralt t'
Rechte Alt-Taste festhalten und "t" drücken.
`ralt lalt t'
Rechte *und* linke Alt-Taste festhalten und "t" drücken.
`alt t'
Irgendeine Alt-Taste festhalten und "t" drücken.
`rcommand f2'
Rechte Amiga-Taste festhalten und die zweite Funktionstaste
drücken.
`numericpad enter'
Enter-Taste auf der Zehnertastatur drücken.
`rawmouse midbutton leftbutton mouse_leftpress'
Mittlere Maustaste festhalten und die linke Maustaste drücken.
`diskinserted'
Eine Diskette in ein Laufwerk einlegen.
****
** Ende des von Stefan Becker übernommenen Textes **
TUTORIUM / DIE BEIGEFÜGTE HOTKEY-KONFIGURATION
----------------------------------------------
Es ist ziemlich wichtig, daß Sie sich die beigefügte Hotkey-Konfiguration
genau anschauen, weil Sie nur dann, wenn Sie sich alle darin enthaltenen
Definitionen genau anschauen, sicher sein können, die ganze Vielfalt und
Mächtigkeit, die in Angie steckt, zu kennen, und so Ihr persönliches
Intuition auch wirklich umsetzen können.
Es folgen nun Erläuterungen zu einigen ausgewählten Hotkey-Belegungen:
***
'lcommand esc' ist belegt mit '[^cd ram:¶newshell *]'
Die Auswirkung ist, daß jedesmal, wenn Sie die linke Amiga-Taste gedrückt
halten und dann anschließend die ESC drücken, Angie eine AsyncDosSequenz
startet, die zuerst das aktuelle Verzeichnis des neu gestarteten Prozesses
auf 'ram:' setzt, und danach eine interaktive Shell mit der von Angie für
diesen Prozeß angelegten Konsole als Ein-/Ausgabe-Konsole startet. Das
Konsolenfenster ist dabei größen- und positionsoptimiert für den
derzeit dargestellen Bildschirmausschnitt des standardmäßigen öffentlichen
Schirm und öffnet sich auf dem aktuellen standardmäßigen öffentlichen
Schirm erst genau dann, wenn die erste I/O-Operation auftritt. Weil
außerdem das NachVorn-Attribut '^' für die hier verwendete AsyncDosSequenz
gesetzt ist, wird der standardmäßige öffentliche Schirm vor dem Starten des
neuen Prozesses nach vorn gebracht.
***
'f7' ist belegt mit '^<control x>~80list lformat "%s%s"<left>\
<left><left><left><left><left><left><left><left><left><left><left><left>\
<left><left><left>'
Diese Definition zeigt bereits, wie man verschiedene Aktionen auf einen
Hotkey legt. Sie kann innerhalb einer Shell verwendet werden: falls Sie
f7 drücken, springt das aktive (Shell-)Fenster nach vorn (NachVorn-Attribut
'^' am Anfang der AngieSequenz), Text der bereits im Fenster getippt ist,
wird durch das <control x>-Element der AngieSequenz gelöscht, und darauf hin
wird nach einer kurzen Verzögerung von 80 Millisekunden
('~80'-EimmalVerzögerungsSequenz) der Text 'list lformat "%s%s"' eingefügt,
und schließlich der Cursor auf das zweite Leerzeichen nach 'list'
positioniert.
Warum die EimmalVerzögerungsSequenz, werden Sie sich fragen. Die Antwort
darauf lautet, daß eine Konsole normalerweise fähig ist,
Tastatur-Eingabeereignisse ohne jede Verzögerung zu verarbeiten, außer eben
im speziellen <control x>-Fall: wann immer die Konsole dieses Zeichen
erhält, hat Sie einen kurzen Blackout von mehreren Dutzend Millisekunden,
während dem Sie alle einkommenden Eingabeereignisse verschluckt.
***
'f8' ist belegt mit '#200 <rawmouse leftbutton mouse_leftpress>\
<rawmouse upstroke mouse_leftpress>'
Wenn Sie also die Funktionstaste f8 drücken, wird ein Maus-Klick auf die
linke Maustaste von 200 Millisekunden Dauer simuliert: es werden zwei
rawmouse-Eingabeereignisse in den Eingabestrom eingefügt, mit einer 200
Millisekunden langen Pause dazwischen: das erste Ereignis stellt dabei das
Niederdrück-Ereignis dar, während das zweite Ereignis das Loslass-Ereignis
repräsentiert.
***
'diskinserted' ist belegt mit '[if exists sys:utilities/say¶\
sys:utilities/say "You've inserted a disk right now"¶endif]' und
gesetztem ~Filtern-Attribut.
Diese Definition hat die Auswirkung, daß, wann immer Sie eine Diskette in
eins Ihrer Laufwerke einlegen, Angie eine ASyncDosSequenz startet, die
versucht mit Hilfe des Say-Programms der Workbench 2.04, den
Sprachsynthesizer des Amiga dazu zu bringen, Ihnen auf Englisch zu
erzählen, daß Sie gerade eine Diskette eingelegt haben. Das
~Filtern-Attribut ist gesetzt, damit andere Commodities bzw. InputHandler,
die mit niedrigerer Priorität als Angie laufen und auf 'diskinserted'-
Eingabeereignisse reagieren, diese Ereignisse auch mitgeteilt bekommen.
Ansonsten würden alle 'diskinserted'-Ereignisse von Angie verschluckt.
***
'rawmouse leftbutton rightbutton mouse_rightpress' ist belegt mit
'#100<rawmouse upstroke mouse_leftpress><lcommand shift l>' und
'lcommand shift -repeat l' ist belegt mit '(ToBack)'
BEACHTEN SIE: Diese Definition funktioniert nur, falls Sie Workbench 2.1
oder besser verwenden - aus folgendem Grund: Aufgrund eines Fehlers
ignoriert die commodities.library Version 37 der Workbench 2.04 alle
'leftbutton'-, 'midbutton'- und 'rbutton'-Qualifier wenn Sie nach einem
passenden Eingabeereignis sucht. Als Konsequenz würde dieser Hotkey bei
JEDEM Klick auf den rechten Mausknopf ausgelöst. Das ist jedoch nicht
hinnehmbar; deshalb wurde in dieser Definition der 'rbutton'-Qualifier
durch den 'rightbutton'-Qualifier ersetzt, den die commodities.library V37
nicht versteht - so kommt es schließlich, daß, falls Sie Workbench 2.04
verwenden, dieser Hotkey-Eintrag nicht aktiviert wird.
Die zuerst aufgeführte Definition ist ein spezielles 'Magic', um ein
Fenster nach hinten zu legen, indem man die rechte Maustaste niederdrückt,
während man die linke Maustaste gedrückt hält. DIESE DEFINITION
FUNKTIONIERT SOGAR BEI AKTIVER AUTO-FENSTER-JAGEN-FUNKTION, falls Sie
kleine 'Stabilisier-Spanne'- & 'Schnüffelintervall'-Werte verwenden
(Andernfalls ersetzen Sie die '#100'-VerzögerungsSequenz einfach durch
'#200' etc). Schauen Sie sich diese Definition genau an, besonders die
'<rawmouse upstroke mouse_leftpress>'-CxEingabeBeschreibungSequenz: jedes
Mal, wenn Sie einen rawmouse-Hotkey definieren, in dem der
leftbutton-Qualifier ohne den mouse_leftpress-Tastencode auftritt, und Sie
diesem Hotkey eine Intuition-Fenster-Aktion zuweisen wollen, wird Ihnen
geraten, es so wie hier zu machen: Belegen Sie den Hotkey zuerst mit jener
<rawmouse upstroke mouse_leftpress>-CxEingabeBeschreibungSequenz, danach
entweder nach einer EimmalVerzögerungsSequenz von ca. 150 Millisekunden
und dann den restlichen Aktionen oder wie hier nur mit einer weiteren
CxEingabeBeschreibungSequenz, die die eigentliche Aktion auslöst. Dies
sollten Sie deshalb machen, weil andernfalls WORKBENCH-Fenster äußerst
träge auf einen solchen Hotkey reagieren. Das ist in keinster Weise Angies
Schuld, sondern liegt nur an Intuition selbst. Die
'#100'-VerzögerungsSequenz in diesem Beispiel dient übrigens lediglich
dazu, die Auto-Fenster-Jagen-Funktion von Angie auszutricksen.
Die zweite Definition in diesem Beispiel ('lcommand shift -repeat l') zeigt
schließlich, wie man normale rawkey-Hotkeys innerhalb von Angie definiert:
falls Sie die linke Amiga-Taste in Verbindung mit einer Shift-Taste gedrückt
halten, und dann die 'l'-Taste drücken, wird das aktive Fenster nach hinten
gelegt.
***
'lcommand shift -repeat z' ist belegt mit '(Zip)' &
'lcommand -repeat z' ist belegt mit '(^Zip)'
Diese Definition sind zwei normale rawkey-Hotkey-Definitionen, die beide
das aktive Fenster zwischen zwei Größen und Positionen hin- und
herschalten. Bei der zweiten Defintion wird außerdem das Fenster nach
vorne gebracht (und es wird gejagt, falls die 'Jagen bei
FensterVor-Hotkeys'-Funktion aktiv ist), da das NachVorn-Attribut '^' für
diese Aktion gesetzt ist. Wenn Sie die Auto-Fenster-Jagen-Funktion
aktiviert haben wird übrigens stets in beiden Fällen das Fenster nach vorn
gebracht und gejagt.
Beachten Sie den '-repeat'-Qualifier in der Definition. Er bewirkt, daß,
falls Sie die 'z'-Taste gedrückt halten, die dann generierten
Wiederhol-Tastatur-Eingabeereignisse auch in dieser Definition
berücksichtigt sind. 'ABER', werden Sie sagen, 'Ich erhalte doch nur EINE
Zip-Aktion, auch wenn ich die 'z'-Taste gedrückt halte.' Beruhigen Sie sich,
dies ist vollkommen korrekt und liegt an Angie: Standardmäßig verschluckt
Angie alle Wiederhol-Tastatur-Eingabeereignisse selbst. Um dies für einen
Hotkey zu verhindern, brauchen Sie lediglich das 'Wdholbar'-Attribut für
diesen Hotkey zu setzen - dann wird auch bei Wiederhol-Tastatur-
Eingabeereignissen, die auf ihre Hotkey-Definition passen, die zugehörige
AngieSequenz ausgeführt.
***
'lcommand -shift -repeat help' ist belegt mit '(^HuntWindow)' und dem
~SchrmAktv-Attribut gesetzt und
'lcommand lamiga_press' ist belegt mit der 'NoKeyActivate'-PSEUDO-Aktion
und gesetzten ~Filtern-, ~SchrmAktv- & Wdholbar-Attributen.
Die erste Defintion ist eine rawkey-Hotkey-Definition mit einer
ungewöhnlichen Eigenschaft: das ~SchrmAktv-Attribut ist für diese
Definition gesetzt. Das hat die Auswirkung, daß auch dann, wenn der
aktive Schirm vollkommen unsichtbar ist und mindestens ein sichtbarer
Schirm mit Fenstern existiert, während die Tastendruck-Schirmaktivierung-
Funktion aktiv ist, ein Tastendruck auf diesen Hotkey NIEMALS eine
Tastendruck-Schirmaktivierung-Aktion auslöst. Falls sich also das aktive
Fenster auf einem vollkommen verdeckten Schirm befindet, können Sie
grundsätzlich in jedem Fall <lcommand help> drücken, um dieses Fenster zu
jagen. Falls sie das ~SchrmAktv-Attribut nicht angegeben hätten, würde ein
Druck auf die Help-Taste bei aktiver Tastendruck-
Schirmaktivierung-Funktion möglicherweise ein neues Fenster auf einem
sichtbaren Schirm aktivieren, das dann jejagt würde, was natürlich Quatsch
wäre.
Falls der zweite Hotkey nicht defniert wäre, würde bereits ein Tastendruck
auf die linke Amiga-Taste, die ja gedrückt sein muß, um den ersten Hotkey
auszulösen, möglicherweise eine solche unerwünschte Fensteraktivierung
auslösen (mehr dazu im nächsten Beispiel).
***
'lcommand lamiga_press' &
'lcommand -repeat -shift -alt -control -capslock m' &
'lcommand -repeat -shift -alt -control -capslock n' sind allesamt mit
der 'NoKeyActivate'-PSEUDO-Aktion und den ~Filtern-, ~SchrmAktv- &
Wdholbar-Attributen belegt.
Diese Definition sind in mehrerlei Hinsicht ungewöhnlich: zum einen
ist die 'NoKeyActivate'-Aktion eine PSEUDO-Aktion, d.h. sie löst keine
Aktion aus. Zum zweiten sind für eine 'NoKeyActivate'-PSEUDO-Aktion die
~Filtern-, ~SchrmAktv- & Wdholbar-Attribute erzwungen. Alle passenden
Eingabeereingnisse sind grundsätzlich davon ausgenommen, eine
Tastendruck-Schirmaktivierung-Aktion auszulösen, auch dann, wenn alle
Voraussetzungen für eine solche Aktion vorliegen (siehe vorheriges
Beispiel).
Die beiden zuletzt aufgeführten Pseudo-Hotkey-Definitionen stellen dabei
die gewöhnlichen Intuition-Tastenkombinationen für Schrim-Blättern dar.
Warum sollen diese Tastatur-Eingabeereignisse davon ausgeschlossen werden,
eine Tastendruck-Schirmaktivierung-Aktion auszulösen? - Weil es
normalerweise unerwünscht ist, daß Hotkeys, die Schirme blättern und debei
nicht ein Fenster auf dem nach vorne gebrachten Schirm aktivieren, eine
Tastendruck-Schirmaktivierung-Aktion auslösen, ganz gleich, ob diese
Hotkeys in Angie (in diesem Fall genügt es, das ~SchrmAktv-Attribut zu
setzen) oder außerhalb von Angie definiert sind.
Die erste Pseudo-Hotkey-Definition dieses Beispiels betrifft die linke
Amiga-Taste: alle Tastendrücke auf die linke Amiga-Taste lösen dadurch
niemals eine Tastendruck-Schirmaktivierung-Aktion aus. Das ist nützlich,
weil nahezu alle rawkey-Hotkeys der beigefügten Konfiguration (und die
'lcommand m/n'-Schirmblätter-Hotkeys von Intuition!) diese Taste als
Qualifier beinhalten. Wenn nun ein solcher Hotkey mit dem ~SchrmAktv-
Attribut versehen ist, dann wäre das nutzlos, wenn nicht gleichzeitig für
den darin enthaltenen Tastatur-Qualifier ein 'NoKeyActivate'-PSEUDO-Hotkey
angelegt würde, da ansonsten ein Druck auf die Qualifier-Taste eine
Tastendruck-Schirmaktivierung-Aktion auslösen könnte.
***
WEITERE HOTKEY-BEISPIELE IN ZUSAMMENHANG MIT SYNCDOSSEQUENZEN UND DEM
SETACTIVEWIN-UTILITY BEFINDEN SICH IN DER DOKUMENTATION ZU SETACTIVEWIN!!
DIE EVOLUTION VON ANGIE
-----------------------
v1.0 20.10.93 [fSchwarz]
v1.1 22.10.93 [fSchwarz] improved setDefPubScreen action
fixed ActivateXXXXScreen; fixed Menu Attrs selection
v1.2 23.10.93 [fSchwarz] doesn't send any closeWindow
event on Close action when window is blocked by
requesters.
v1.3 24.10.93 [fSchwarz] added Edithook for hotkey
definition gadget
v1.4a 29.10.93 [fSchwarz] major code cleanup; now
supports dos command and inputevent insertion type
v1.5 4.11.93 [fSchwarz] now really uses the frontmost
window of screens instead of just screen.firstWindow;
improved Key Screen Activation handling for screens
without windows
v1.6 4.11.93 [fSchwarz] removed last Intuition stuff from
cxcustom inputhandler - now all accesses to Intuition
structures are safeguarded by official CBM protocols;
enhanced Intuition/GadTools V37 GUI
v1.7 7.11.93 [fSchwarz] now accounts the fact that
ViewPortExtra.displayClip is volatile and dependent on
the displayids of both, the affected screen & the front
screen; improved timing in msghandler (results in faster
Auto-Hunts when receiving many CxMsgs consecutively
and in better hotkey recursion capabilities); now
needs BlackMagic 1.14; fixed nasty Enforcer hit in
DefinitionProc() that turned out very rarely and was
due to use of post-freed memory (which was usually
immediately reallocated, so Enforcer/Mungwall hardly
ever noticed it); improved Intuition left mouse button
effective detection
v2.0 11.11.93 [fSchwarz] Angie is now completely localized;
fixed rare timing problems that were due to rearranging
Intuition related KeyScreenActivation stuff from the
the cxcustom handler to the main task; changed again
KeyScreenActivation handling; complete code heavily
revised & updated to ensure optimal ergonomics when
there's no current active window, yet an active screen;
now right mouse button blocks all Auto-Hunt (it doesn't
block hotkey-(attribute)-based hunts, though!);
former WinToFront attribute changed to 'ToFront': *If
and only if* the hotkey action doesn't involve a window,
but a screen, the attribute causes a ScreenToFront()
instead of a simple WindowToFront(). HuntWindow action
now hunts the active screen if no active window exists;
the KeyScreenActivation considers that case, too.
Most window-related hotkey-actions (except Hunt) now
simply activate the BestWindow() if there exists no
active window (ToFront/Hunt according to the hotkey
attrs); optimized LastActive-Action (now activates the
frontmost window of the last window's screen if the
last window doesn't exist any more, but the screen it
was opened on, and that screen differs from the active
one). Added Capslock-AutoHunt-mode (default!): capslock
is alienated as an inverse Auto-Hunt toggle switch, all
capslock events & capslock qualifier in inputevents
are eliminated.; Now cxcustom handler code runs at
three different priorities. Moved some IntuitionBase
related window code to own module. Angies minimum
taskpri is now 5; wintask priority increment only
happens if resulting priority isn't greater than
Angies taskpri. Added 'New', 'Read Settings' &
'Restore settings' to the project menu; remembers also
the second last window/screen for LastActive/
LastActiveScr actions; general changes in the code to
obtain better ergonomics in many places; added
'DEFAULTPREFS' argument (especially for CLI): loads
the configuration stored in PROGDIR:Angie.info.
Angie now requires CxLib V1.1 with ArgArrayDiskObj().
All tooltypes longer than 128 chars (the official
length limit as of the RKMs) are now split by Angie
for the icon writing (fixes problems with Workbench's
Icon->Information menu item that prunes all longer
tooltypes). Main module is now split into three modules.
Plus several changes I forgot to mention here.
v3.0 19.11.93 [fSchwarz] COMPLETELY NEW CONCEPT: Angie-
Sequences, consisting of multiple Angie actions, ascii
text, commodities input descriptions, & async / sync
dos command sequences are now assigned to the hotkeys.
The ToFront attribute is now replaced by a 'NoFilter'
attribute (the ToFront attribute may now be specified
separately for each item of an AngieSequence). Angie
parses now qualifier keystrokes like 'LALT_PRESS' in
input descriptions - along with mouse button keystrokes
in input descriptions even for V37 commodities users;
simple NoScrActivate pseudo hotkeys now work for V37,
too (own ParseIX() extension, own V37 MatchIX()).
fixed NewMenu array size of the edit menu. For
proportional fonts, gimmeZeroZero windows are used in
conjunction with other slLevelFormat - this fixes V37
level display problems and keeps the window borders
from messing up in those rare cases where the nominal
proportional font's width is utterly misleading.
Invocation of WindowToFront() is now omitted if the
respective window is already the screen's frontmost
window (results in much better performance for
gimmeZeroZero windows). GetBestWin() now accounts that
visible screens may follow after invisible screens in
the IntuitionBase screen list. cx_pri slider step is
now level-adaptive (like snoopdelay/stabletime sliders)
A new tooltype format for hotkeys is now used - old
format can still be read. Another new (default!)
auto hunt mode is provided: CapsLock1 (functionality
is the same as for the old CapsLock mode which is now
called CapsLock2, except that capslock keystrokes & the
capslock qualifier in the ievents are left untouched).
v3.1 22.11.93 [fSchwarz] removed all code where
LockLayerInfo() is called directly or indirectly with
a locked IntuitionBase due to very unlikely deadlock
situations that may arise from LockLayerInfo() when
IBase is locked. Other protocol to avoid illegal
mem access & to ensure valid window pointer is used
instead. Distribution now includes my SetActiveWin
and MagicPubName shell utilities that can be perfectly
used in SyncDosSequences. In order to disencourage
you from abusing SyncDosSequences for launching
interactive stuff, etc, and in order to improve
performance, SyncDosSequences are now executed without
new I/O channels & with the same priority Angie is
running. Fixed bug that kept Angie from activating
the BestWindow for most Intuition actions in case
no active window exists (bug was due to the severe
code changes that were necessary for inventing the
AngieSequence concept)
v3.2 23.11.93 [fSchwarz] all CxMsgs of cxmIEvent type
that are older than 2.5 seconds are discarded by the
msghandler now; rearranged msghandler code - this
fixes all backlog problems and makes the GUI accessable
even when Angie is busy with CxMsgs & AutoHunt. Support
for proportional fonts has now greatly improved: all
strings in Angies window are now accounted for
calculating the window width - even for the most
excentric proportional fonts, display won't mess up.
The distribution now includes full-featured German
docs, another utility (RawInsert) for DosSequences
and SetActiveWin 1.1 (V1.0 could cause Intuition
deadlocks!)
v3.3 24.11.93 [fSchwarz] Strangely, AddIEvents() doesn't
set the timeStamp of the InputEvents as opposed to
the v37 input device writeEvent command - this caused
problems in conjunction with the anti backlog handling
that was invented in Angie 3.2, so Angie itself now
sets the TimeStamp. The same problem was present in the
RawInsert utility - now fixed in RawInsert 1.1;
improved performance & minimized gadget/menu refresh
for hotkey list browsing.
v3.3a 25.11.93 [fSchwarz] fixed another small bug that
was due to the code changes for the AngieSequence
concept (scrActivateMagic const had to be set to a
unique value outside the range of AngieSequence ids)
v3.5 1.12.93 [fSchwarz] added AREXX interface for
executing AngieSequences from outside Angie. Fixed
bug in the SetActiveWin utility that frustrated
activation of windows on non-public screens (V1.2)
v3.6 3.12.93 [fSchwarz] adapted to Amiga-Oberon 3.10,
fixed active/inactive state handling (now arexx works
great even if Angie is in inactive state); fixed error
exit code; introduced '¶'-lineFeedMagic as a linefeed
substitute within dos_command_sequences.
!!! THIS IS the last revision for 1993 !!!
RECHTLICHES
-----------
Angie ist urheberrechtlich geschützt. Copyright © 1993 Franz Schwarz
Angie ist GIFTWARE. Das heißt, Sie sollten dem Autor ein hübsches
Geschenk, D-Märker oder ZUMINDEST eine originelle Postkarte zukommen
lassen, falls Sie das Programm verwenden.
Außerdem ist Angie TOLERANCEWARE. Das heißt, es ist Personen, die
Gewalttaten gegen andere Menschen wegen deren Herkunft, Hautfarbe,
sexueller Orientierung, Geschlecht, Religion, oder Behinderung
unterstützen oder diese billigen, ausdrücklich und strengstens verboten,
dieses Softwarepaket zu verwenden oder irgendeinen Nutzen daraus zu ziehen.
USE AT YOUR OWN RISK: Der Autor haftet für keinerlei Schäden, die
unmittelbar oder mittelbar vom Gebrauch dieses Programms herrühren.
Angie ist frei kopierbar; es darf auf der AmigaLibraryDisk-Disketten-Serie
und auf anderen nicht-kommerziellen Disketten-Serien vertrieben werden,
inklusive CD-ROM-Versionen derselben, ebenfalls darf es auf dem Weg der
Datenfernübertragung verbreitet werden.
Angie darf nur in diesem Archiv komplett verbreitet werden. Einzige
Ausnahme hiervon: falls dieses Archiv den Quelltext von Angie enthält,
dann dürfen im weiterverbreiteten Archiv die 'txt'- und 'Locale'-
Verzeichnisse und die zugehörigen Piktogramme entfernt sein.
Weiterhin darf Angie nur verbreitet werden, falls der Vertreiber kein
Urheberrecht auf dieses Archiv, den Inhalt dieses Archivs, noch auf
Dateien, die zwangsweise mit ihm verbreitet werden, erhebt (Dateien, die
zwangsweise mit Angie verbreitet werden, sind solche Dateien, die nicht zum
Angie-Archiv gehören und von denen der Vertreiber behauptet, ohne diese
dürfe das Angie-Archiv nicht weiterverbreitet und weiterkopiert werden)
Anfragen auf Ausnahmen von diesen Beschränkungen können an den Autor
gerichtet werden.
Sie erreichen mich folgendermaßen:
----------------------------------
Franz Schwarz
Mühlenstraße 2, D-78591 Durchhausen,
BR Deutschland
Uucp: Franz_Schwarz@mil.ka.sub.org
Fido Classic: 2:2476/506.18
Kto. 951.207 bei BLZ 643 500 70 KSK Trossingen
EPILOG
------
Am Anfang war...
... Angie nur ein hübscher Name, dann kamen die Rolling Stones und machten
daraus eine Rock-Legende. Schließlich kam das Angie-Commodity über alle
Amigas und verhieß ihnen ewige Intuition und erfüllte so die lange
prophezeite Dreieinigkeit in Angie, dem Namen, dem Song und dem Commodity.
Angie ist ein Akronym für
ANother Great Intuition Enhancer
Viel Spaß wünscht
Franz 'Blacky' Schwarz
PS: Diese Dokumentation wurde innerhalb weniger Nachtstunden geschrieben,
und ist bisher nicht redigiert worden - also bitte keine Lamenti über
eventuell darin vorhandene zahlreiche Fehler.;-)