--------------------------------------------------------------------------- A m o k E d =================== Version 1.02 01 Okt 1991 --------------------------------------------------------------------------- AmokEd V1.2 © Copyright 1990,1991 Hartmut Goebel, Alle Recht vorbehalten Das gesamte Paket ist Freeware. Es darf beliebig oft kopiert und weitergegeben werden, solange: · Das Paket vollständig und unverändert bleibt (Der Source-Code ist optional, siehe auch Anmerkung unter Punkt 2: Umfang des Paketes) · Mit der Weitergabe des Pakets in keiner Weise ein Gewinn erzielt wird · Spenden sind willkommen Weitere Informationen siehe AmokEd.LiesMich. Hartmut Goebel Der Quelltext ist bei mir erhältlich: Aufseßplatz 5 einfach Disk mit ausreichend Rückporto (W-)8500 Nürnberg 40 schicken. Deutschland UseNet: htgoebel@faui09.informatik.uni-erlangen.de Z-Netz: HARTMUT@ASN.zer Fido: 2:246/12 Mein Dank gilt: - Matthew Dillon: für seine genialen DME, aus dem ich viele Ideeen bezogen habe. - Volker Rudolph: für seine zahlreichen Tips und die moralische Unterstützung - Werner Speer: für die Starthilfe in Form des ersten Kommando-Parsers - Tobias Ruland: für die Unterstützung in Sachen Assembler --------------------------------------------------------------------------- Vorläufige Dokumentaion!! Vollständig, wird noch einmal gründlich überarbeitet! Inhalt I Einleitung Instalation, Starten II Befehlsfolgen III Tasten belegen IV Das Verhalten bein Laden/speichern von Dateien V Workbench Unterstützung VI ARexx Unterstützung VII Der Application-Port ---------------------- ---------- I ---------- ---------- Einleitung ---------- ---------------------- AmokEd ist ein frei programmierbarer Editor, der auf dem Konzept des bekannten DME vom Matthew Dillon basiert. Er verfügt über einige Fähigkeiten, die ihn zu einem noch mächtigen (Programmier-) Werkzeug machen. Hier ein kurzer Überblick: - eine reichhaltige Kommandosprache, deren Befehle sowohl direkt eingegeben, als auch auf Tasten gelegt werden können. (Jede Taste kann durch Qualifier und Maustasten mit 128 verschiedenen Macros belegt werden.) Jede Tasten und Maus-Tasten Kombination ist belegbar. - Eine ARexx-Schnittstelle ermöglicht eine noch vielfältigere Programmierung von AmokEd durch externe Makros sowie die Steuerung anderer Programme aus AmokEd heraus. - Ein spezieller 'ApplicationPort' - basierend auf ARexx - ermöglicht sehr leicht anwendungsbezogene Erweiterungen, die den Editor selbst nicht unnötig aufblähen sollen. Unterstützung der Compiler Amiga-Oberon und M2Amiga sind in Vorbereitung. - Variablen ermöglichen eine fexible Macroprogrammierung (z.B. können auch Macros in Variablen abgelegt werden), ENV:-Variablen werden unterstützt. - Vom Benutzer definierbare Menüs, die mit allen Macros oder Variablen belegt werden können. - schnelles Scrolling (ca. 40% schneller als original DME), Scrollbalken und Scroll-Gadgets - In der Titel-Zeile jedes Fensters werden Daten über den Text angezeigt: Filename, aktuelle Cursorposition im Text, ob das File geändert wurde ... Zukünftige Versionen werden auch anwenderspezifische Angaben erlauben - mehrere Texte könne in verschiedenen Fenstern gleichzeitig bearbeitet werden, Windows können 'iconified' werden. Ab einer der nächten Versionen wird es möglich sein, einen Text in mehreren Fenstern zu bearbeiten. AmokEd wurde entwickelt, um einige Nachteile des DME zu beheben und diesen weiter zu entwickeln. Durch die Programmierung in der streng stukturierte Sprache Oberon ist er leicht zu erweitern. Dies wird durch den Application- Port noch weiter vereinfacht. AmokEd nimmt beliebig viele Filenamen als Argumente an. Diese Dateien werden gleich nach dem Programmstart automatisch geladen. Normalerweise führt AmokEd zu Beginn zwei Macro-Files aus: 'S:.aedrc' und '.aedrc' im aktuellen Verzeichnis. Diese Dateien brauche nicht existieren. Üblicherweise enthalten diese Dateien Tastaturbelegungen, Menü-Definitionen etc. und stellen verschiedene Dinge ein. Installation ------------ Falls Sie noch kein File 'S:.edrc' (z.B. von DME) haben, sollten Sie das beigefügte '.aedrc' in Ihr 'S:'-Directory kopieren. Falls Sie Ihre '.edrc'- Files von DME übernehmen wollen, lesen Sie bitte die Hinweise in 'doc/von_DME.LiesMich', in der die wenigen vorzunehmenden Änderungen erklärt werden. Kopieren Sie nun AmokEd einfach in ein Verzeichnis, das dem Suchpfad Ihrer Shell/CLI angehört. Fertig! Nach dem ersten Aufruf sollten Sie das Fenster auf die von Ihnen bevorzugte Größe und Position bringen und mit SAVECONFIG abspeichern. Den Befehl können Sie nach Druck aus die -Taste in der Befehlszeile eingeben. - Fertig! Starten ------- AmokEd ist ganz einfach zu starten: vom CLI: AmokEd [name] [name] ... [name] von der WorkBench: einfach anklicken (Multiselect wird unterstützt) ------------------------- -------- II ---------- -------- Befehlsfolgen ---------- ------------------------- AmokEd verfügt über ein große Anzahl von Befehlen, die es ermöglichen, ihn flexibel zu programmieren und weitgehend an die Bedürfnisse des Benutzers anzupassen. Es können mehrere Befehle miteinander angegeben werden, oder auch in andere Befehle eingebetten werden. Ein Befehl besteht aus einem SCHLÜSSELWORT und einer _festen_ Anzahl von ARGUMENTEN (z.Zt. 0..2). Das Trennzeichen zwischen Argumenten ist das SPACE. Um Argumente zu übergeben, die ein Space enthalten, müssen diese in Klammern gesetzt werden. Bsp.: befehl (argument mit spaces). Anstelle der Klammern können auch die einfachen Anführungs-/Schlußzeichen (`') benutzt werden. TEXT, der ausgegeben werden soll, wird ebenfalls in Klammern bzw. Anführungs-/Schlußzeichen gesetzt. Befehle können in Groß- oder Kleinschreibung eingegeben werden, Argumente i.A. auch. Ausnahmen: Variablenname, Tastenbezeichnung (siehe dort) und auszugebender Text. Beispiele: right right (Hallo) right right (Hallo) return map f3 (up right) map f5 (down left) map f10 ((Hallo)) Nochmal - weil's wirklich wichtig ist: Wenn ein Befehl EIN Argument erwartet, dann nimmt es auch nur ein Argument. Alle übrigen Argumente werden für für (einen) weitere(n) Befehl(e) gehalten. Also: map f5 right - `right' ist nur ein Wort, wir brauchen keine Klammern map f5 (right right) - wir wollen f4 mit zwei `right' belegen, also brauchen wir die Klammern, oder das zweite `right' wird nicht aud die Taste gelegt map c-del `repeat cright del' - ist bereits als REMEOL implementiert, aber ein weiteres Beispiel Einige Argumente werden ggf. mehrmals durch den Befehlsinterpreter geschickt. Der MAP-Befehl ist ein gutes Beispiel. Wenn der MAP-Befehl ausgeführt wird, wird beim ersten Lauf durch den Interpreter die Taste mit dem Tastentext ohne die äußersten Klammern belegt. Wenn die Taste gedrückt wird, wird dieser Text nocheinmal vom Interpreter analysiert. Darum muß Text, der ausgegeben werden soll, in doppelte Klammern eingeschloßen werden: ((text)). Einige komplexerer Befehlsfolgen: map f4 (right right (Hallo) wleft) *RICHTIG* map f4 right right (Hallo) wleft *FALSCH* map f4 (map f4 ((Hallo))) - wenn f4 das erste Mal gerückt wird, belegt sie sich selbst um auf die Ausgabe den Textes (Hallo) map c-i (repeat tr (( ))) - Beispiel, wie ein Space in MAP un REPEAT einzubetten ist (durchläuft den Befehls- interpreter dreimal!) Ein einfacher Weg, um mit Befehlsfolgen und/oder Tastaturbelegungen herum zu spielen, ist entweder die ESC-Taste (dadurch gelangt man in den Befehls- modus) oder a-S (alt-shift-s - dadurch wird die Zeile, in der der Cursor ist, ausgeführt) zu drücken ... AmokEd kann also benutzt werden, um Ihre neuen Tastaturbelegungen zu ent- werfen und zu testen. ---------- STRINGVARIABLEN ---------- Stringvariablen werden durch ihren Inhalt ersetzt. Drei Eingabeformen sind erlaubt: $varname - der Varablenname kann nur aus a-z,A-Z,0-9,_,- bestehen $(varname) - alle Zeichen außer `(' und `)' sind erlaubt $`varname' - alle Zeichen außer ``' und `'' sind erlaubt Es gibt einige spezielle Variablen: filename - der aktuelle Filename scanf - der zuletzt geSCANFTe String (siehe SCANF unten) rexxport - der Name des AmokEd-ARexx-Port findstr - der aktuelle Suchstring repstr - der aktuelle Ersatzstring lineno - die aktuelle Zeilennummer (1..n) colno - die aktuelle Spaltennummer (1..n) Andere Variablen werden nach folgendem Schema gesucht: (1) Interne Variablen (siehe SET, UNSET). Interne Variablen beachten die Groß-/Kleinschreibung (case sensitiv). (2) Enviroment-Variblen (siehe SETENV, UNSETENV). Enviroment- Variablen sind NICHT case sensitiv. ENV: der WB1.3 wird benutzt. (3) AmokEd-Tastaturbelegungen oder -Menüdefinitionen. Dies ermöglicht es, etwas wie $sa-tab anzugeben um die Belegung der Taste shift-alt-tab einzufügen (siehe MAP, UNMAP und Menü-Befehle). Die anderen beiden Formen erlauben es, ungewöhnliche Varibalennamen zu vergeben - mit Punkten oder andern Zeug. ANMERKUNG: Was ist an folgenden Befehl falsch? repeat 100 (first ($myvar)) Falsch ist, daß $myvar eingesetzt wird, BEVOR der Repeat ausgeführt wird. $myvar könnte Zeichen enthalten, die die Befehlsbeschreibung durcheinander bringen könnten. Wenn $myvar z.B. ein `(' enthält, kommt etwas heraus wie `repeat 100 (first (()), was offensichtlich falsch ist. Durch die Benutzung von `\' kann dies vermieden werden. repeat 100 (first (\$myvar)) - $myvar wird eingesetzt, wenn die Schleife ausgeführt wird, und nicht vorher Solche Probleme können auch auftreten, wenn Sie Tasten belegen... Wahrscheinlich wollen Sie die Variable nicht in dem Moment eingesetzt bekommen, wenn Sie die Taste belegen, sondern wenn die Belegung ausgeführt wird. Andererseits ist das durchaus erlaubt: set x (tlate +1) repeat 100 ($x) Der Befehl `(tlate +1)' wird 100mal ausgeführt... Würde die Variable nicht mit Klammern umschloßen (abhängig vom Zusammemhang), würde die Variable ausgeführt, und nicht als Text ausgegeben. -------- SPEZIELLE ZEICHEN --------- `^' wird benutzt, um ein Steuerzeichen einzuleiten. Bsp.: ^c entspricht control-c (ASCII-Wert 03) Es ist nicht möglich, ^@ (ASCII-Wert 00) anzugeben, da dieses Zeichen intern das Zeilenende markiert. `\' Der `Backslash' überschreibt die spezielle Bedeutung des nächsten Zeichens. Bsp.: map c-a ((^l)) - belegt ctrl-a mit ASCII-Wert 0C map c-a ((\\\^l)) - belegt ctrl-a mit `^l' Das erste `\' überschreibt das zweite, das dritte das `^'. Die Taste ist dann mit `\^l' belegt. --------- BEFEHLS LISTE --------- # -Rest der Zeile ist Kommentar (für Skript-Files) (text) -gibt Text aus, als wäre er direkt eingegeben taste -führt Tastaturbelegung als Makro aus (Bsp.: c-a) header-item -führt einen Menüpunkt als Makro aus (Bsp.: Project-Save) (case indepentant (?)) ABORT -bricht Makroausführung ab APPL -rufe Application auf (siehe VII. `Application'-Port) APPLCLOSE -beendee Application (siehe VII. `Application'-Port) ARPBSAVE -BSAVE FileRequester \ ARPINSFILE -INSFILE FileRequester | wenn ARP-/ASL-Lib installiert ARPLOAD -NEWFILE FileRequester | ARPSAVE -SAVEAS FileRequester / BACK -identisch mit BS BACKTAB -Tabulatorsprung rückwärts BCOPY -kopiere Block vor die Cursorzeile BDELETE -lösche den Block aus dem Text BLOCK -markiere Anfang/Ende des Blocks BMOVE -verschiebe den Block vor die Cursorzeile BOTTOM -springe zum Textende BS -`backspace' (lösche Zeichen links vom Cursor) BSAVE file -speichere den Block in BSOURCE -`source' Block wie ein Skript-File CD dir -setze aktuelle Verzeichnis des Textes auf CHFILENAME -ändere den Namen des bearbeiteten Files CLEARMAP -lösche Benutzer-Tastaturbelegung und stelle System- Belegung her DEL -`delete' (lösche Zeichen unterm Cursor) DELINE -lösche Zeile (siehe UNDELINE) DOWN -Cursor runter DOWNADD -Cursor runter; wenn am Textende, füge Zeile an ESC -schalte Befehlseingabezeile ein/aus ESCIMM arg -schalte Befehlseingabezeile ein und zeige dort als vordefinierte Eingabe EXECUTE comm -führe CLI-Befehl aus FIND string -setze Suchstring und führe ein NEXT aus FINDR fstr rstr -setze Such/Ersatzstring und führe ein NEXTR aus FINDSTR -setze Suchsting FIRST -spring zu Spalte 1 FIRSTNB -springe zum ersten Nicht-Space-Zeichen in der Zeile GOTO BLOCK -springe zum Anfang des markierten Blocks, bzw. Textanfang GOTO END -springe zum Ende des markierten Blocks, bzw. nicht GOTO START -identisch mit GOTO BLOCK GOTO [+/-]n -springe zur absolut/relativ angegebeben Zeile HEIGHT n -setze die Höhe in Pixels für alle weitern neuen Fenster ICONIFY -`iconify' das Fenster (siehe unten) IF cnd act -IF/WHILE/IFELSE .. (siehe unten) IFELSE cnd ifact elseact -(siehe unten) INSERT text -fügt ein, unabhängig von InsertMode INSFILE file -füge in den Text ein INSLINE -füge Zeile über der Cursorzeile ein JOIN -verbinde ächste Zeile mit dieser LAST -springe hinter letztes Nicht-Space-Zeichen der Zeile LEFT -Cursor links LEFTEDGE n -setze die linke Kante in Pixels für alle neuen Fenster MAP key map -belege Taste mit MARGIN n -setze rechten Rand für WordWrap und Reformat (siehe dort) MENUADD hdr item cmd -füge Menüpunkt an MENUCLEAR -lösche das ganze Menü MENUDEL hdr item -lösche eine Menüpunkt MENUDELHDR hdr -lösche ein Untermenü MENUOFF -schalte Menü aus (mehrfache Aufrufe werden gestapelt) MENUON -schalte Menü ein (mehrfache Aufrufe werden gestapelt) MULTIREPLACE f s -interactives Suchen und Ersetzen MYPRI n -setze Task-Priorität auf n (-128<=n<=127) NEWFILE file -ersetzt aktuelle Text durch das neue NEWWINDOW -öffne ein neues Editor-Fenster NEXT -suche die nächste Stelle, an der der Suchstring auftritt NEXTR -suche nächstes Auftreten und ersetze NULL -mache nichts OVERWRITE text -schreibt über vorhandenen, unabhängig von InsertMode PAGEDOWN -blättere eine Seite abwärts (siehe PAGESET) PAGESET n -setze Seitengröße für PAGEUP/DOWN auf n Prozent Fenstergröße PAGEUP -blättere eine Seite aufwärts (siehe PAGESET) PING n -setze Textmarkierung (0-9) PONG n -springe zu eine vorher gesetzten Textmarkierung (0-9) *) POPMARK -hole Markierung von Stapel und zeige den markierten Block PURGEMARK -lösche den Stapel der Blockmarkierungen PUSHMARK -lege markierten Block auf den Stapel und lösche Markierung QUIT -beende RECALL -gehe in Befehlszeile und zeige den zuletzt eingegebenen Befehl an. Muß auf eine Taste gelegt sein (c-esc). REMEOL -lösche Text unter und rechts vom Cursor REPEAT cnd comm -siehe unten REPSTR string -setzte Ersatzstring RESETTOGGLE toggle -lösche Kippschalter (siehe unten) RESIZE cols rows -ändere Größe des aktuellen Fensters (Bsp.: resize 70 23) RETURN -identisch mit (FIRST DOWNADD) RIGHT -Cursor rechts RX -rufe ARexx-Makro, kein Argument (RX makroname) (s. unten) RX1 -rufe ARexx-Makro, ein Argument (RX makroname arg) RX2 -rufe ARexx-Makro, zwei Argumente (RX makroname arg1 arg2) RXS -rufe ARexx-Befehlsfolge direkt auf SAVEAS file -speichere aktuellen Text als SAVECONFIG -speichere Standard-Einstellungen SAVEMAP file -speichere Benutzer-Tastaturbelegung in SAVEOLD -speichere aktuellen Text unter seinen Namen SAVESMAP file -speichere alle Tastaturbelegungen incl. Systembelegung SCANF ctlstr -scan den String an der Curorposition (siehe unten) SCREENBOTTOM -setze Cursor in die letzte Zeile des Fensters SCREENTOP -setze Cursor in die erste Zeile des Fenstern SCROLLDOWN -rolle Text eine Zeile nach oben, ohne Cursor zu bewegen SCROLLUP -rolle Text eine Zeile nach unten, ohne Cursor zu bewegen SET var str -erzeuge/ändere eine interne Variable SETENV var str -erzeuge/ändere eine Umgebungs-Variable (WB1.3 ENV:) SETFONT font size-setze den Font des Fensters (Bsp.: setfont topaz.font 11) SETTOGGLE toggle -setze Kippschalter (siehe unten) SOURCE file -`source' ein Skript-File SPLIT -spalte die Zeile an der Cursorposition SWAPMARK -PUSHMARK, tausche obere 2 Markierungen auf Stapel, POPMARK TAB -Tabulatorsprung vorwärts TABSTOP n -setze Tabulatorstop alle n Zeichen TITLE string -zeige in der Titelzeile des Fensters TLATE [+/-]n -gib Zeichen unter dem Cursor ASC-Wert n (absolut/relativ) TMPHEIGHT n -setze Höhe in Pixels nur für das nächste neue Fenster TMPWIDTH n -setze Breite in Pixels nur für das nächste neue Fenster TOGGLE toggle -schalte Kippschalter um (siehe unten) TOMOUSE -bewege den Cursor zur Mausposition TOP -springe zum Textanfang TOPEDGE n -setze die Oberkante in Pixels für alle neuen Fenster UNBLOCK -lösche aktuelle Blockmarkierung UNDELINE -holt die zuletzt mit DELINE gelöschte Zeile zurück UNDO -mache Anderungen in der aktuelle Zeile rückgängig (muß auf eine Taste gelegt werden, damit's funktioniert) UNMAP key -lösche Belegung der Taste UNSET var -lösche interne Variable UNSETENV var -löschen Umgebungs-Variable (WB1.3 ENV:) UP -Cursor hoch WHILE cnd act -(siehe unten) WIDTH n -setze die Breite in Pixels für alle weitern neuen Fenster WLEFT -gehe an den Anfang des vorherigen Worts; wenn innerhalb eines Wortes, dann an den Anfang diese Wortes WRIGHT -gehe an den Anfang des nächsten Worts *) PONG springt auch in ein anderes Textfenster. Wenn Sie ein Tool ein- setzten, das das Fenster unter der Maus aktiviert (z.B. DMouse), funktioniert dies nicht mit dem gewünschten Effekt. ---------- Weitere Inforamtionen zu kompizierteren Befehlen ------------ MENUOFF/ON - Diese Befehle schalten das Menü ein bzw. aus. Für Leute, die eine Menge MENUADD in ihrer `.aedrc' haben, ist es gut zu wissen, daß MENUADD wesendlich schneller arbeitet, wenn das Menü vorher ausgeschaltet wird. (Danach natürlich wieder einschalten!) Die Aufrufe sind stapelbar. D.h. wenn Sie MENUOFF, sagen wir, zweimal aufrufen, dann benötigen Sie auch zwei MENUON, um das Menü wieher einzuschalten. Andersrum funktioniert's natürlich nicht :-) SCANF cltstr - Dieser Befehl ist gleichbedeutend mit der C-Funktion scanf(). Es werden jedoch nur Strings gescannt. REPEAT n arg - Wiederhole n-mal Außer einer Nummer kann n folgendes sein: line aktuelle Zeilennummer (Zeilen beginnen bei 1) lbot Anzahl Zeilen zum Textende, mit der Cursorzeile cleft Spaltennummer (Spalten beginnen bei 0) cright Anzahl Zeichen bis zum Zeilenende (EOL), incl. Zeichen unterm Cursor tr Anzahl Zeichen zum nächsten Tabulatorstop tl Anzahl Zeichen zum vorherigen Tabulatorstop Verschiedene Befehle können die Repeat-Schleife abbrechen: Jeder FIND[R], NEXT[R], PREV[R], in dem der Suchstring nicht gefunden wird, bricht die Schleife (und das Makro) ab. Das Selbe geschieht, bei Befehlen über die Textgrenzen hinaus gehen konnen (z.B. UP, DOWN, LEFT, RIGHT ...). Natürlich beendet auch ABORT das Makro. Wenn Sie -1 als n angeben, so wird der REPEAT ewig ausge- führt (genau genommen $7FFFFFFF-mal, was eigentlich reichen müßte), oder bis zu einem Abbruch. Bsp.: Suchen/Ersetzten im ganzen Text map c-R (escimm (findstr ) escimm (repstr ) repeat -1 nextr) IF [!]bedingung arg WHILE [!]bedingung arg IFELSE [!]bedingung ifarg elsearg - Wenn die angegebenen Bedingung erfüllt ist, führe das Argument aus. Bei IFELSE ansonsten das Else-Argument. Bei WHILE wird das Argument solange ausgeführt, solange die Bedingung erfüllt ist. (Vorsicht!) Ein ggf. vorangestelltes `!' invertiert die Logik. Bedingungen: [i]# Kippschalter [i]# gesetzt (siehe unten) t Cursor in Zeile 1 b Cursor in der letzten Zeile l Cursor in Spalte 0 r Cursor am Zeilenende (Space darunter und dahinter) m Text wurde geändert (modified) i Einfügemodus eingeschaltet (insertmode on) x[<=>]# Cursor in Spalte # (beginnen mit 1) *) y[<=>]# Cursor in Zeile # (beginnen mit 1) *) cl Zeichen unter Cursor ist Kleinbuchstabe (`a'..`z') cu Zeichen unter Cursor ist Großbuchstabe (`A'..`Z') ca Zeichen unter Cursor ist alpha-numerisch (`a'..`z', `A'..`Z',`0'..`9', `_', 192..255) cn Zeichen unter Cursor ist Ziffer c[<=>]# Zeichen unter Cursor hat ASCII-Wert # *) cb Curosr ist innerhalb des markierten Blocks *) eines oder eine Kombination der Zeichen `<', `=', `>', gefolgt von einer Dezimalzahl. Bsp.: y=>23 if c<32 .. Zeichen unterm Cursor ist kleiner als 32 if c<>32 .. Zeichen unterm Cursor ist ungleich 32 if !c=32 .. dito while !b down Bsp.: simulieren eines Einfügemodes-Kippschalters (muß natürlich in einer Zeile eingegeben werden) map a-i (ifelse 0 (toggle 0 settoggle insertmode) (toggle 0 resettoggle insertmode)) Bsp.: solange Kleinbuchstabe: mache groß, gehe nach rechts map c-U (while cl (tlate -32 right) ICONIFY - Dies ist eine besondere Fähigkeit des AmokEd: Das Textfenster wird auf die Titelzeile reduziert. Dadurch behalten Sie auch bei vielen Fenstern noch den Überblick. · merkt sich alte Fenstergröße und -position · merkt sich die Position des `iconified'-Fensters für weitere `iconify' Momentan stürtzt der Computer ab, wenn kein Speicher vorhanden ist und AmokEd das Icon- oder das normale Fenster nicht öffnen kann. Seien Sie also Vorsichtig! Abhilfe wird aber bald geschaffen! TOGGLE toggle SETTOGGLE toggle RESETTOGGLE toggle - Mir diesen Befehlen werden Kippschalter (toggles) geschaltet. Es gibt 256 globale Toggles, die im gesammtem AmokEd Gültigkeit haben, sowie für jeden Text 15 texteigene Toggles. Zudem gibt es einige spezielle Toggles, die z.B. den Einfügemodus schalten. Im Einzelnen gibt es folgende Togglen: i0..i15 texteigener Toggles (ein `i' wird vorangestellt) 0..255 globaler Toggle wordwrap automatischer Zeilenumbruch +) *) insertmode Einfügemodus +) savetab File mit Tabs abspeichern (siehe unten) +) autoindent automatisches Einrücken +) *) numlock NumLock für Zehnerblock ignorecase Suchen unabhängig von Groß-/Kleinschreibung +) diese Toggles sind ebenfalls texteigen *) dieser Toggle ist momentan leider noch ohne Wirkung -------------------------- ---------- III ---------- ---------- Tasten belegen ----------- -------------------------- In Abschnitt II haben wir gesehen, wie AmokEd zu programmieren ist (ja, ich denke `programmiernen' ist der richitge Ausdruck. Richtig interessant wird es jedoch erst, wenn man die Markros auf Tasten legt. Dies können Sie auf drei Arten tun: 1. Für Ihre Standardbelegung erstellen Sie am besten ein `.aedrc', das die gewünschten Tastaturbelegungen, die Menudefinitionen etc. ent- hält. 2. Wenn Sie während der laufenden Arbeit mit AmokEd Tasten belegen wollen, weil Sie z.B. den Text `Rübennase' oft benötigen, geben Sie den MAP-Befehl einfach in der Befehlszeile ein. 3. Wollen Sie die neue Makrodefinition zudem in Ihre `.aedrc' aufnehmen, so geben Sie sie dort ein, und führen die neue Zeile mit der Tasten- kombination `a-S' aus. Abspeichern, fertig! TASTATUR Bei AmokEd ist, anders als bei vielen Text-Editoren, JEDE Taste der Amiga- Tastatur belegbar, egal ob mit oder ohne `Qualifier'. Qualifier sind hier Tasten wie Shift, Ctrl, Amiga, aber auch die Maustasten. Es hat sich eigentlich nur aus der Gewohnheit heraus ergeben, daß z.B. die -Taste ein RETURN ausführt und die -Taste ein UP etc. Aber Sie können _alle_ Tasten auch völlig anders belegen. Die Tasten werden nach ihrer Aufschrift benannt, mit einigen Ausnahmen: · `Rückschritt' (Backspace) heißt `BS'. · den Tasten des Zehnerblocks wird `NK' verangestellt, außer bei der `Enter'-Taste, die heißt `ENTER'. · Die vier Cursor-Tasten heißen `UP', `DOWN', `LEFT' und `RIGHT'. Tasten belegen Tasten werden mit dme MAP-Befehl belegt (siehe oben). entspricht dabei folgender Syntax: [qual-] qual: eine Kombination aus den Qualifer- Kennungen, gefolgt von einem Bindestrich `-' taste: Tastenaudschrift bzw. -name Qualifier: `a' ALT `s' SHIFT `c' CTRL `A' AMIGA `L', `M', `R' Maustasten --- Beispiele --- tab tab -tab tab a-a ALT a A-a AMIGA a sA-a SHIFT AMIGA a s-tab SHIFT tab c-tab CTRL tab ac-? ALT-CTRL ? s-f5 SHIFT F5 nk0 Zehnerblock 0 cs-nk0 CTRL SHIFT Zehnerblock 0 s-. SHIFT . (':' auf deutschen Tastaturen) L-f10 LINKE MAUSTASTE f10 L-lmb Linke Maustaste gedrückt L-mmove Maus bewegt mit gedrückter linker Maustaste LR-lmb Linke Maustaste gedrückt, während rechte Maustaste gedrückt bleibt ----------------- MAUSTASTEN Auch die Tasten der Maus können belegt werden, Die drei Maustasten heißen `LMB', `MMB', `RMB'. Die Standardbelegung ist folgende: linker Knopf: Setze den Cursor an die Mausposition (TOMOUSE) rechter Knopf: `iconify' Fenster (ICONIFY), nur wenn Menü aus ist Linken Knopf gedrückt halten, während die Maus bewegt wird, zieht den Cusor mit. Maustasten belegen Die Maustasten dienen sowohl als Qualifier (siehe oben), als auch als Tasten. Dadurch können sie eine Taste belegen, die eine gedrückte Maustaste er- fordert map L-a ((Linke Maustaste und `a')) genause, wie die Maustasten selbst map L-lmb ((Linke Maustaste als Taste)) Beachten Sie, daß hierzu der Qulifier `L' und die linke Maustaste selber `lmb' angegeben werden müssen. Wenn Sie eine Maustaste selbst und diese Maustaste als Qualifier belegten, map L-lmb (tomouse) map L-a ((Hallo)) beachten Sie bitte, daß die erste Belegung immer dann ausgeführt wird, auch wenn Sie L-a ansprechen möchten: BEIDE Belegungen würde ausgeführt! Um Verwirrungen zu vermeiden, sollten Sie die Standardbelegung der rechte Maustaste (belegt mit ICONIFY) löschen (UNMAP), wenn sie diese als Qualifier benutzten wollen. Die MAUSBEWEGUNG wird belegt, indem Sie eine oder mehrere der Maus-Qualifier (`L', `M', `R') und als Taste `mmove' angeben. Also so: map L-mmove ((Maus bewegt mit gedrückter linker Maustaste)) map LR-lmb ((Linke Maustaste drückt, rechte Maustaste bleibt gedrückt)) Wie wäre es damit: Die Zeichen under dem Cursor in Großbuchstaben wandeln, solange die Mause bewegt wird? map LR-mmove (tomouse if cl (tlate -32)) HINWEISE Die normale Amiga-Maus hat nur zwei Tasten, eine linke und eine rechte (LMB, RMB - logisch!). Eine ggf. angeschloßenen Drei-Tasten-Maus wird auch unterstützt. Jede Taste kann mit einer Kombination aus Shift, Alt, Ctrl, Amiga und den Maustasten (oder gar keiner) bestimmt werden. Mit diesen sechs Qualifiern (sieben bei Drei-Tasten-Maus) konnen jeder Taste bis zu 64 (128) Belegungen zugewiesen werden. Die CAPS-LOCK-Taste, wenn sie leuchtet, ist für Alpha-Tasten gleichbedeutend mit . Die Kombination Alt-Amiga (aA) ist nicht sehr brauchbar, da Intuition sie Mause-SELECT interpretiert. Andere Amiga-Konbinationen werden von Intuition für Mausbewegung und andere Dinge benutzt. Einige andere Qulifier-Kombi- nationen können wegen einer speziellen Bedeutung auch unbrauchbar sein. Die Standardbelegung Alle druckbaren Ascii-Tasten sind mit ihrem Ascii-Equiavlent belegt. BS, DEL, UP, DOWN, LEFT, RIGHT, TAB, S-TAB, und ENTER sind korrekt belegt. Und das ist die Standardbelegung: map (a-c) (bcopy) map (a-d) (bdelete) map (a-down) (scrolldown) map (a-l) (while cu (tlate +32 right)) map (a-m) (bmove) map (a-r) (nextr) map (a-s) (bsource) map (a-u) (while cl (tlate -32 right)) map (a-up) (scrollup) map (bs) (bs) map (c-/) (escimm (find )) map (c-]) (ref) map (c-[) (ctags) map (c-1) (goto block) map (c-b) (block) map (c-c) () map (c-del) (remeol) map (c-down) (pagedown) map (c-esc) (recall) map (c-f) (reformat) map (c-g) (escimm (goto )) map (c-i) (insertmode on) map (c-j) (join) map (c-l) (wleft) map (c-n) (next) map (c-o) (insertmode off) map (c-p) (prev) map (c-q) (quit) map (c-r) (wright) map (c-s) (split first down) map (c-u) (unblock) map (c-up) (pageup) map (c-w) (wordwrap toggle) map (del) (del) map (down) (down) map (enter) (return) map (esc) (esc) map (f1) (escimm (insfile )) map (f10) (saveold quit) map (f2) (escimm (newfile )) map (f3) (escimm (newwindow newfile )) map (f6) (saveold iconify) map (f7) (escimm (bsave )) map (f8) (saveold escimm (newfile )) map (f9) (saveold) map (L-lmb) (tomouse) map (L-mmo) (tomouse) map (left) (left) map (R-rmb) (iconify) map (return) (return insline up firstnb down) map (right) (right) map (s- ) (( )) map (s-del) (deline) map (s-down) (bottom) map (s-left) (first) map (s-right) (last) map (s-tab) (backtab) map (s-up) (top) map (sa-s) (unblock block block bsource) map (tab) (tab) map (up) (up) map `a-)' (`:-)') ein Standard-Smily ------------------------------- ---------- VI ---------- ---------- ARexx Unterstützung ---------- ------------------------------- Sie haben von ARexx vollen Zugriff auf alle Funktionen von AmokEd. In zukünftigen Versionen wird es zudem einige Befehle geben, die Sie nur von ARexx oder einem ARexx-Programm nutzen können (z.B. Rückgabewerte). ARexx-Makros aufrufen Es gibt drei Möglichkeiten, externe ARexx-Makros aufzurufen: · Die Befehle RX, RX1, RX2 rufen das als erstes Argument übergeben ARexx-Makro mit keinem, einem oder zwei Argumenten auf. Wollen sie mehr Argumente übergeben, benutzen Sie einfach RX1 und setzen alle Argumente in Klammern. Bsp.: rx demo rx1 renumcomproc 119 rxs DelAllAsterix 23 28 rx1 MakroMitVielenArgs (1 2 3 4 5 6 7) · Die zweite Möglichkeit ARexx-Makros aufzurufen ist, den Markonamen einfach in der Befehlszeile einzugeben, dahinter die Argumente. Stößt AmokEd auf einen Befehl, den er nicht kennt, übergibt er ihn als Makro- name an ARexx. Der gesamte Rest der Befehlszeile wird als Argument übergeben. Dies funktioniert bei Tastenbelegungen genauso, Sie sollten dort aber besser die RX-Befehle explizit benutzen. Bsp.: MakroMitVielenArgs 1 2 3 4 5 6 7 · Der Befehl RXS erlaubt Ihnen, ARexx-Befehle direkt auszuführen. Das Argument wird hierbei nicht als Makroname, sondern als Befehlsstring ("stringfile" lt. ARexx-Handbuch) interprettiert und direkt ausgeführt. Bsp.: rxs (address command 'copy #? ram:') Von den ARexx-Makros aus können Sie die Befehle des AmokEd wie gewohnt benutzen. Anhand es Rückgabewertes rc (in ARexx) können Sie feststellen, ob wie gewünschte Funktion erfolgreich war. Mehr darüber entnehem Sie bitte der gesonderten Dokumentation Über die Applikation-Programmierung. AmokEd über ARexx von außen steuern AmokEd läßt sich auch von externen ARexx-Makros steuern, die nicht von AmokEd aus aktiviert wurden. Dazu muß Ihnen (bzw. dem Makro) lediglich bekannt sein, wie der ARexx-Port des AmokEd heißt, an den sie senden wollen. Der Port-Name ist in der Variablen $rexxport gespeichert, da er von der Task-Adresse abhängig ist. Wenn sie nur einen AmokEd aktiv und die RexxArpLib installiert haben, können sie mit rxs (setenv rexxport $rexxport) den Port-Namen als ARexx-Enviroment-Variable istallieren. Bessere Möglichkeiten bietet der Einsatz von Applikationen (siehe unten). Es gibt zwei spezielle ARexx-Befehle, die nur über den ARexx-Port funktionieren: GetVal - Liefert den die angegebene Variable zurück Bsp: der AEd-Befehl rxs (options results; getval $rexxport; say result) gibt den Name des AEd-Rexx-Ports im Rexx-StdOut aus. QuitQuit - Beendet die aktuellen Texteingabe, auch wenn der Text geändert wurde Es ist nicht möglich, AmokEd von ARexx aus mit Senden von zwei 'quit' Befehlen zu beenden, wenn der Text geändert wurde. ARexx erhält immer RC 5. ACHTUNG: Der aktuelle Text wird beendet, auch wenn er geändert und noch nicht abgespeichert ist. Weitere Informationen über den Einsatz von AReex in AmokEd entnehmen Sie bitte der gesonderten ARexx-Dokumentation. -------------------------------- ---------- VII ---------- ---------- Der Application-Port ---------- -------------------------------- Eine weitere hervoragende Eigenschaft von AmokEd ist der Applikation-Port. Über diesen Port auf ARexx-Basis können Anwendungen eine enge Bindung an AmokEd erreichen. Eine Applikation muß sich selbst bei AmokEd anmelden. Hierzu benötigt sie den Portnamen, über den sie mit AmokEd kommunizieren kann. Dieser Portname ist über die Variable $rexxport erreichbar. Eine Applikation von AmokEd aus zu starten, ist ganz einfach: Bsp.: execute (run nil: AmokEd:ApplDemo $rexxport) Wichtig ist hierbei, daß Sie die Applikation als eigene Task starten, da sich das System sonst aufhängt. Die Applikation meldet sich nun bei AmokEd an und teilt ihm mit, unter welchen Applikations-Namen sie zu erreichen ist. Ist dies geschehen, so kann sie sehr einfach genutzt werden: · Geben Sie den Applikations-Name einfach in der Befehlszeile ein. Der Rest der Zeile wird der Applikation als Argumetn mitübergeben. · Mit dem Befehl `APPL' können Sie wir mit dem Befehl RX1 eine Applikation mit einem Argument aufrufen. Wenn Sie Applikationen in Makros nutzen, sollten sie diesen Befehl nehmen. Bsp.: ApplDemo Hallo Du! appl ApplDemo (Hallo Du!) Genaueres ist von der eingesetzten Appliktion abhängig. Liesen Sie hierzu dir Dikomentaion der Appliketion. Alles weitere über Applikationen - Programmierung etc. - entnehmen Sie bitte der gesonderten Dokumentation. --------------------------------------------------------------------------- Sorry, wenn die deutsche Dokumentation etwas holprig klingt. Aber manche Sachen lassen sich in Englich schöner ausdrücken. Ich werde, wenn ich mal Zeit hab, auch eine vollkommen neue Doku schreiben, da ich von Freunden weiß, das diese nicht so gut ist (insb. zum nachschlagen). Wie gesagt: Vorläufige Dokumentation! -- hartmut --------------------------------------------------------------------------- Release Notes: Bedeutung: + hinzugekommen, - entfernt, ^ Funktion verbessert V1.02b - 21 Oct 1991 - Bug in ArpLoad (File/path-Split) V1.02 - 19 Oct 1991 · ältere Release Notes gelöscht