Da es oft bemängelt wurde, daß JFE ja ganz brauchbar, aber ohne jede Dokumentation die nahezu unerschöpflichen Möglichkeiten gar nicht auszunutzen seien, soll jetzt endlich Abhilfe geschaffen werden. Hier werden aber nur die wichtigen Dinge beschrieben sein, die sich von anderen Editoren unterscheiden.
Downloads: | Dokumentation: | ||||||||||
JFE V3.95 | 6. 1. 2010 | (Englisch) | Zur Homepage | ||||||||
JFE V3.95 | 6. 1. 2010 | (Deutsch) | To the description in English | ||||||||
JFE V3.90 | 29. 12. 2006 | (Englisch) | JFE-Dokumentation | (HTML) | |||||||
JFE V3.87 | 16. 6. 2005 | (Deutsch) | JFE-Dokumentation | (PDF) | |||||||
JFE V3.87 | 16. 6. 2005 | (Englisch) | |||||||||
JFE V3.84 | 25. 2. 2004 | (Deutsch) | Konfiguration von JFE V3.94 (Portugiesisch) | ||||||||
JFE V3.84 | 25. 2. 2004 | (Englisch) | Configurando o Jens File Editor | ||||||||
JFE V3.79 | 25. 6. 2002 | (Deutsch) | Configurando o Jens File Editor | ||||||||
JFE V3.53 | 18. 9. 2000 | (Englisch) | Configurando o Jens File Editor | ||||||||
JFE V3.53 | 18. 9. 2000 | (Deutsch) |
Das funktioniert mit der Maus im Zusammenhang mit der ALT-Taste.
Bereiche, die über die Zeile hinausgehen, werden dabei mit Leerzeichen aufgefüllt und mit Zeilenumbruch abgeschlossen. Es entsteht also immer ein Textrechteck. Die Farbe für solche beim Markieren tatsächlich nicht vorhandenen Leerzeichen kann im Farbmenü eingestellt werden. (15. Texthintergrund Farbe). Blöcke (aber auch normal markierter Text) können entweder wie üblich an der aktuellen Cursorposition (CTRL-V) eingefügt oder aber in eine Spalte eingefügt werden. Letzteres geht folgendermaßen vor sich:
Es gibt drei Varianten Blöcke einzufügen.
Das könnte so aussehen (B=eingefügter Block, T=Text)
TTTTTTTT TTTTTTTTTTTT TTTTTTTT BBBBBTT TTTTTTTT BBBBB TTTTTTTT BBBBBTTTTTTTTTT TTTT BBBBB TTTTTTTT BBBBBTT TTTTTTTT TTTTTTTTTTTT Dazu:
TTTTTTTT TTTTTTTTTTTT TTTTTTTT BBBBBTT BBBBB BBBBB BBBBB BBBBB TTTTTTTT TTTTTTTTTT TTTT TTTTTTTT TT TTTTTTTT TTTTTTTTTTTT Dazu:
TTTTTTTTTTTTTTTTTTTT TTTTTTTTBBBBB BBBBB BBBBB BBBBB BBBBB TT TTTTTTTTTTTTTTTTTT TTTT TTTTTTTTTT TTTTTTTTTTTTTTTTTTTT
Natürlich können auch eigene Tastaturmakros definiert werden.
Zu jedem Zeichen existiert ein Byte für die Farbinformation. Davon beschreibt das untere Nibble die Textfarbe, das obere Nibble den Texthintergrund. Die Farbnummer (0...15) ist ein Index auf eine Tabelle, die dann den tatsächlichen 24Bit-RGB-Farbwert enthält. Es sind also beliebige Farben auswählbar, aber eben nur 16 verschiedene gleichzeitig. Die Farbeinstellung erfolgt über den Menüpunkt "Einstellungen-Farben". Alle Farbeinstellungen werden in der INI-Datei bzw. einer Projektdatei gespeichert. Geändert werden kann eine Farbe durch Markieren des jeweiligen Kästchens mit der Maus und Click auf "Ändern". Aus dem Farbdialog kann dann eine andere Farbe gewählt werden. Die Textvordergrundfarbe im Index 1 (das erste Kästchen) ist die voreingestellte Schriftfarbe, die immer für nicht selektierten und nicht syntaxcolorierten Text verwendet wird (voreingestellt schwarz). Gleichermaßen steht die voreingestellte Texthintergrundfarbe im Index 0 der darunterliegenden Tabelle für den Texthintergrund. Der Texthintergrund bezieht sich tatsächlich nur auf die tatsächlich durch Text belegten Bereiche. Alle anderen Flächen werden mit der "Default Hintergrundfarbe" eingestellt. Zur Vereinfachung ist es so eingerichtet, daß eine Änderung dieser Farbe auch den Index 0 der Farbtabelle, d.h. die Texthintergrundfarbe mit ändert. Wer tatsächlich einen andersfarbig hinterlegten Text wünscht, muß erst den Default Hintergrund einstellen und danach den Texthintergrund. Besondere Bedeutungen haben noch die Indizes 14 und 15. Der Farbindex 15 legt fest, wie selektierte Bereiche in Vorder- und Hintergrund dargestellt werden sollen. Damit ist es möglich, daß die Selektierung anders als durch die Windows Defaulteinstellung vorgegeben aussieht. Der Index 14 hat eine doppelte Funktion. Zum einen bestimmt er das Aussehen der Zeilennummerierungsleiste, zum anderen gibt die Texthintergrundfarbe an, wie bei Blockmarkierung nichtvorhandene Leerzeichen markiert werden.
Für C und C++ ist das Syntaxcoloring schon grundsätzlich vordefiniert. Man kann aber für verschiedene Programmiersprachen noch zusätzlich unterschiedliche Farbtemplates erstellen. Dazu öffnet man das Menü: "Einstellungen-Syntaxfarben.." und legt ein neues Template an. Der abgefragte Name ist beliebig und dient dazu, die folgenden Einstellungen im INI-File zu unterscheiden. Das neue Template ist initial leer und muß erst mit den hervorzuhebenden Schlüsselworten gefüllt werden. Ein neuer Eintrag wird angelegt mit dem Button "neuer Eintrag". Im darauf geöffneten Dialog können das Schlüsselwort, die Textfarbe und spezielle Flags angegeben werden. Die Schlüsselworte werden mit fallender Priorität abgearbeitet. Das bedeutet, die weiter oben stehenden Schlüsselworte werden zuletzt bearbeitet und können u.U. andere, davor liegende überschreiben.
Beispiel:
1. else würde so coloriert werden: #else 2. #else anders herum wird das gewünschte Ergebnis erreicht:
1. #else würde so coloriert werden: #else 2. else
Die Flags haben folgende Bedeutung:
Die Hintergrundfarben sind nicht änderbar.
Eine Besonderheit gibt es noch: Man kann auch einen Zeilenumbruch in ein Schlüsselwort aufnehmen mit "\n". Dafür funktioniert aber auch die genauso geschriebene Zeichenkette nicht mehr! |
Durch "OK" wird das neue Keywort übernommen.
Das Ändern erfolgt analog.
Farben und Schlüsselworte sind im Klartext
in der INI-Datei abgelegt und können auch direkt editiert werden.
Es gibt vier Stufen der Suchfunktion:
Zur einfachen Bedienung läßt sich durch Setzen des Checkmarks "markierten Text übernehmen" jede Selektion im Dokument direkt in das Suchfenster übernehmen. Ein wie in anderen Konkurrenzprodukten erforderliches Kopieren-Einfügen ist nicht erforderlich. Ansonsten entspricht die Suchfunktion unter 1. der sonst üblichen Funktionalität mit der Erweiterung, daß auch nach Sonderzeichen wie TAB "\t" oder Zeilenumbruch "\n" in Verbindung mit Text gesucht werden kann. Das Suchen nach Backslash muß dadurch anders formuliert werden. Wird die Option "nur in aktueller Datei suchen" aktiviert, so werden die Suchergebnisse nicht einzeln angefahren, sondern als Liste im Ausgabefenster dargestellt. Durch Doppelklick kommt man dann an die entsprechende Stelle.
Beispiel: | c:\tmp | sucht nach "c:TABmp" |
c:\\tmp | sucht nach "c:\tmp" |
Das Suchen nach den Varianten 2., 3. und 4. stellt das Suchergebnis im Ausgabefenster dar. Durch Doppelklick auf die jeweilige Zeile wird das entsprechende Dokument aktiviert bzw. geladen. Zusätzlich gibt es die Option, sich Suchergebnisse innerhalb von C-Kommentaren nicht anzeigen zu lassen. Das ist zwar eine sehr sprachspezifische Einstellung (auf Wunsch eines einzelnen, nicht genannt werden wollenden Nutzers), aber bei der vorgesehenen Anwendung als Programmiereditor sicher ganz nützlich.
Die Suchvariante 4. wird durch Click auf "Erweitert" aus Suchvariante 2. eingestellt. Damit ist es möglich, auch in nicht aktuell geöffneten Dateien nach einem Text zu suchen. Hier ist es natürlich sinnvoll, die Zahl der zu durchsuchenden Files einzuschränken. Das ist möglich über die Angabe eines Dateifilters. Mehrere Filter werden durch Leerzeichen getrennt. Wildcards sind möglich.
Beispiele: | *.c *.h | Sucht nach allen Dateien mit der Erweiterung "h" und "c" |
O?t*.* | Sucht nach allen Dateien, die mit "O"
beginnen, dann ein beliebiges Zeichen, gefolgt von "t" und weiter
beliebigen Zeichen bis zum Punkt und eine beliebige Erweiterung besitzen. Findet: Otto.txt, Ottokar.cpp |
Die Suche wird in dem Verzeichnis durchgeführt,
das als Initial-Verzeichnis eingetragen ist.
Das ist beim Öffnen des Dialogs zunächst der aktuelle Arbeitspfad.
Unterverzeichnisse werden mit durchsucht, wenn die entsprechende Option selektiert ist.
Lesezeichen (oder Bookmarks) dienen dazu, eine Stelle in einem Dokument schnell wiederzufinden. Das macht sich besonders gut, wenn man in einem File ständig hin und her scrollt, oder aber ständig zwischen mehreren Dokumenten umschaltet. Ein Bookmark wird dargestellt als eine Taste in einem Toolbar der (default) an der rechten Seite des Arbeitsbereiches angezeigt wird. Die Bookmarks des gerade aktiven Fensters sind gelbe Büroklammern, alle anderen schwarze. Der zu jedem Button verfügbare Tooltip zeigt Filename und Zeilennummer des Lesezeichens an. Einem Lesezeichen kann auch ein beliebiger Tooltiptext zugewiesen werden. Dazu klickt man mit der rechten Maustaste auf den zu ändernden Bookmark und gibt in das erscheinende Eingabefeld den gewünschten Namen ein.
Bookmarks werden gesetzt durch:
Gelöscht wird auf die gleiche Weise. Man geht zu dem zu löschenden Lesezeichen und löscht es mit den gleichen Kommandos.
OpenWindows Mehrfach Click | Damit werden auch Mehrfach-Clicks möglich
| |
Markierung nach Paste halten | Normalerweise wird nach dem Einfügen aus der Zwischenablage der Cursor an das Ende des eingefügten Textes gesetzt und die Markierung entfernt. Durch die Einstellung "Markierung nach Paste halten" bleibt der Text selektiert. | |
Focus erst beim 2. Click | Beim Wechsel zwischen unterschiedlichen Dokumenten wird das aktuelle Dokument erst editierbar nach dem zweiten Click. | |
nur eine Instanz öffnen | Normalerweise würde für jedes File, das aus dem Explorer geöffnet würde (Drag, Doppelklick, SendTo), eine neue Instanz von JFE gestartet. Das kann man mit dieser Option verhindern. So wird bei schon existierender Applikation das File von dieser geöffnet und aktiviert. | |
Tabulatoren | ||
Tabulatoren können entweder als Hard-TABs (Zeichencode 0x09) oder als Folge von Leerzeichen (SoftTABs) eingefügt werden. Eine Umwandlung von Hard- in Softtabs ist möglich, kann aber nicht umgekehrt erfolgen. Hard-TABs können auch als Zeichen dargestellt werden (intern wird ein Hard-TAB durch die Zeichen 0x09 + variable Anzahl von 0x01 dargestellt). Hardtabs können auch angezeigt werden. Das Tabulatorzeichen ist ein Kästchen, die (virtuellen) Leerzeichen Unterstriche. | ||
Backup | Die Möglichkeiten von Backups eines Files können verschieden konfiguriert werden. Zunächst kann beim Öffnen einer Datei eine Kopie angelegt werden, die auch während der gesamten Session nicht mehr geändert wird. Diese bekommt die Erweiterung ".org". Backups (Erweiterung ".bak", aber auch beliebig wählbar) können sonst bei jedem Speichern des Dokumentes angelegt werden. Um das Risiko des Datenverlustes in Folge von (nie auszuschließenden) Systemabstürzen zu minimieren, kann ein Dokument automatisch in einstellbaren Intervallen gespeichert werden. | |
Autoindent | Bei Zeilenumbruch wird der Cursor unter den Anfang der vorhergehenden Zeile gesetzt. Zeilenumbruch nach einer öffnenden geschweiften Klammer '{' rückt die nächste Zeile zusätzlich um eine Tabweite ein. Eine schließende geschweifte Klammer '}' wird wenn möglich wieder unter der zugehörigen Spalte der öffnenden Klammer plaziert. Makros werden, auch wenn sie mehrzeilig sind, in allen Zeilen eingerückt. | |
Keine Suchergebnisse in C-Kommentaren | Beim Suchen werden gefundene Strings, die innerhalb von C-Kommentaren liegen, nicht angezeigt. Diese Einstellung wirkt sowohl für das Suchen in Dateien wie auch für das Suchen nach Klammern. Die normale Suchfunktion wird dadurch nicht beeinflußt. | |
Speichern im UNIX-Format | Speichert nicht wie unter DOS den Zeilenumbruch mit CR/LF (0x0D/0x0A), sondern nur mit LF (0x0A). Diese Funktion kann auch durch Click auf das entsprechende Symbol in der Statusleiste ausgeführt werden. Das Format einer Datei wird beim Öffnen erkannt und - wenn nicht geändert - auch wieder so gespeichert. Der Menüpunkt zeigt immer das Format der gerade aktiven Datei an! | |
Auto Kopieren | Markierter Text wird dabei automatisch in die
Zwischenablage übernommen. Ist die Funktion eingeschaltet, wird die
Markierung mit einem Rahmen um jedes markierte Zeichen versehen. (Farbe = Hintergrundfarbe14) | |
Zeilenumbruch | Damit wird eingestellt, bei welcher Spalte
die Zeile selbständig umgebrochen wird. Man kann dann wählen, ob der
automatische Umbruch mit abgespeichert werden soll.
Manchmal möchte man zwar einen automatischen Zeilenumbruch, den aber
nicht mitten in einem Wort. Dann markiert man
"Zeilenumbruch nur an Wortgrenzen". Der Umbruch erfolgt dann an
der nächsten Wortgrenze (Leerzeichen oder Tab) vor dem eingestellten Limit.
Findet sich in der Zeile kein Trennzeichen, wird trotzdem im Wort getrennt! ACHTUNG, der automatische Zeilenumbruch verlangsamt den Editor enorm, sollte also besser ausgeschaltet bleiben. | |
Auto Suche | Schaltet den Autobrowser ein/aus. | |
Autosuch Konfiguration | Öffnet den Konfigurationsdialog für den Autobrowser. | |
Defaultverzeichnis | Wenn dieser Eintrag gesetzt ist, wird für alle Öffnen/Speichern-Operationen das gleiche Defaultverzeichnis angeboten. Das Defaultverzeichnis wird sowohl in Arbeitsbereichen als auch in der INI-Datei gespeichert. | |
Split | Wenn aktiviert, läßt sich die Ansicht in maximal 4 unabhängig scrollbare Sichten auf das Dokument splitten. |
Es ist eine sehr angenehme
Einrichtung, editierte Quellen gleich aus dem Editor heraus zu
assemblieren, compilieren oder zu linken. JFE liefert auch diese
Mögklichkeit. Unter dem Menüpunkt: "Einstellungen-Tools hinzufügen"
öffnet sich rechts dargestellter Dialog. (Bei einem neuen Tool ist er
leer.) Da unterschiedliche Windows-Versionen und Applikationen doch sehr
verschieden auf den Start aus einer anderen Anwendung heraus reagieren,
gibt es eine Reihe verschiedener Einstellungen, um das gewünschte Verhalten
zu erzielen. Prinzipiell kann die Ausgabe einer DOS-Anwendung, d.h.
die Ausgabe auf STDOUT und STDERR, auf drei verschiedene Arten
gehandhabt werden:
|
||||||||||||||||||||||||||||||
Für den Start einer Anwendung gibt es drei mögliche
(aber nicht immer notwendige) Parameter:
Für die Parameter gibt es einige Makros, die das Leben leichter machen:
Die Parameter können direkt aus der Liste
ausgewählt und an der Selektion im Editfeld eingetragen werden.
Wenn ein File compiliert wurde, stehen die (zweifellos zu erwartenden)
Fehlermeldungen im Ausgabefenster. Nun wäre es ja schön, wenn man diese
nicht erst lesen und sich dann in den geöffneten Dateien mühselig zu
den Fehlern hinscrollen müßte. Auch das Problem läßt sich mit JFE
lösen. Doppelklick auf die Fehlermeldung und das Dokument wird gesucht
und an die Stelle gescrollt. Das Problem, jeder Compiler produziert eine
andere Ausgabe. Deshalb kann man aus einer Reihe von Formaten unter
"Compilerfilter" einen passenden auswählen.
(Wenn es keinen gibt, kann ich auch noch weitere einbauen!)
In der rechten Spalte ist ein Beispiel für die erzeugte Ausgabe angegeben. So kann man einen passenden Filter auswählen. Rot markiert sind die Suchkriterien in der Ausgabe anhand derer die Zeilennummer erkannt wird. Ein Tool erscheint, wenn es angelegt wurde, als Button in einer eigenen Toolbarleiste. Der dort angezeigte Name ist die Bezeichnung im Eingabefeld "Name" (max. 15 Zeichen). Die Tools in der Toolleiste können nachträglich per Drag-Drop sortiert werden. Der Einstellungsdialog kann zu Einstellungsänderungen mit rechtem Mausklick auf den jeweiligen Toolbutton geöffnet werden. Es hat sich gezeigt, daß die Ausgabeumleitung manchmal nicht funktioniert, wenn im Hintergrund ein Virensuchprogramm läuft. Das äußert sich dann dadurch, daß plötzlich unmotiviert auf das Diskettenlaufwerk zugegriffen wird, oder make.exe hängen bleibt. Da hilft bloß, dieses auszuschalten, oder auf die Ausgabeumleitung zu verzichten. Manche alten Tools lassen sich nicht umleiten, sondern produzieren immer eine Datei eines bestimmten Namens. Da hilft es manchmal, in einer Batchdatei, nach Beendigung des Tools, den Aufruf "TYPE ausgabedatei" anzugeben. Damit erfolgt dann die Ausgabe doch in das Ausgabefenster. Die Checkboxen haben folgende Bedeutung:
|
Es ist sehr unangenehm, wenn man beim Editieren und Bearbeiten größerer Projekte ständig zwischen verschiedenen Dateien hin und her springen bzw. scrollen muß, um sich Variablennamen, Typen, Definitionen, Funktionsprototypen und Werte zusammenzusuchen. Sofern diese Informationen innerhalb des Projektes eindeutig sind, könnte diese Arbeit auch durch das Programm selbst erledigt werden. Genau das tut der Autobrowser. Wenn er gestartet wird, durchsucht er alle konfigurierten Dateien oder Pfade nach diesen Informationen und baut sich eine interne Liste mit Verweisen auf die entsprechenden Stellen in den Dateien auf. Wird der Cursor in einem Dokument über einem Schlüsselwort, das sich in der Liste befindet, gehalten, wird ein Tooltip angezeigt. Je nach Listeninhalt hat der Tooltip nachstehenden Inhalt:
Tagtyp Schlüsselwort Tooltipinhalt Definition #define Wert des Defines Enum enum Enumname Typdefinition struct
unionName der Struktur bzw. Strukturmember Funktion (entsprechend Kontext) Funktionsprototyp Variable (entsprechend Kontext) Typ der Variablen extern Funktionen extern Funktionsprototyp
Die Suche kann entweder innerhalb der konfigurierten
Pfade einschließlich der Unterverzeichnisse oder aber innerhalb der
geöffneten Dateien durchgeführt werden.
Auch die Auswahl einzelner Dateien ist möglich.
Für jeden Pfad kann ein Filter für die einzubeziehenden Dateien
angegeben werden. Bei mehreren Dateitypen werden diese
mit Leerzeichen voneinander getrennt. In dem Feld "Suchen nach:" kann ausgewählt werden, welche C-Konstrukte mit in die Browserliste aufgenommen werden sollen. Die interne Browserdatenbank kann über "Tagfile exportieren" als ASCII-Textdatei geschrieben werden. (Eventuell wird man später ein solches File auch wieder importieren können.) Der Browser wird über den Button "B" in der Statuszeile oder über den Menüpunkt "Einstellungen-Auto Suche" gestartet. Der Browser kann auch vor Beendigung durch Click auf den rotierenden Pfeil in der Statuszeile angehalten werden. Spätestens nach 5s sollte sich der Browserthread beenden. Der Browserthread läuft im Hintergrund der Anwendung mit niedriger Priorität und stört deshalb nicht bei der normalen Arbeit. Wird während des Browserlaufes und Suche in den geöffneten Dateien eine Datei geschlossen, wird der Browserlauf abgebrochen. |
|
Die Operationen dieses Dialogs können nicht rückgängig gemacht werden! Also besser vorher speichern.
Strukturiert C zu schreiben, ist natürlich Geschmackssache. Demzufolge wird jede Form automatischer Ausrichtung von irgendwem auch wieder kritisiert werden. Deshalb folgendes Statement: Die C-Syntaxstrukturierung realisiert meine persönliche Vorstellung davon, wie C/C++ lesbar strukturiert werden sollte! Wer's nicht mag, muß es ja nicht benutzen. Es bleiben aber trotzdem noch genügend Freiheiten. Hier die Regeln, nach denen ausgerichtet wird:
Welcher Softi kennt das Problem nicht: Man bekommt
einen Haufen Quellen und Headerfiles (oder man hat's selbst geschrieben) und
soll's jetzt dokumentieren oder auch nur den Sinn des Ganzen verstehen. Und schon
fängt man an, nach einem Zipfel zu suchen, von dem aus man das Knäuel
aufwickeln kann. Üblicherweise ist der erste gegriffene Faden leider der falsche
und man braucht unendliche Zeit, um irgendwie Sinn in das Chaos hineinzudenken.
Da wäre es doch schön, wenn man ein Werkzeug hätte, das einem die
Arbeit abnehmen würde, aufzuklären, wer wen von wo aus und wie oft aufruft
und wenigstens das mal aufschreibt. Alle Kommentare, die als erstes Zeichen
mit ' * ' beginnen, werden auch als
Funktionsbeschreibung mit in das HTML-Referenzfile übernommen.
Und genau das soll diese Funktion tun.
Und damit es besonders angenehm wird, werden Funktionsaufrufe gleich mit Links
versehen. Damit kann man dann schön die Aufrufe per Link nachvollziehen.
Darüber hinaus kann man das erstellte HTML-File sehr gut als Basis für eine
Softwaredokumentation verwenden. (HTML läßt sich ja auch in Word
importieren.)
Soweit so gut. Allerdings gibt's auch Grenzen, wo die
Maschinenlogik nicht mehr kann. Es lassen sich keine indirekten Aufrufe
über Zeiger auflösen. Genauso unmöglich ist es, Informationsflüsse über
Messages zu dokumentieren. Hier muß man immer noch selbst im Code graben.
Template: Alphabetische Funktionsliste: Mehrfache Aufrufe auflisten: Zeilennummern in HTML-Datei angeben: Kommentare in Funktionen nach Klammerebene einrücken: |
Wie in diesem Beispiel, das (fast) dem
Defaulttemplate entspricht.
Wichtig ist, daß nach der Überschrift
eine horizontale Linie <HR> eingebaut ist.
Tabellen lassen sich nicht nutzen.
Es gibt einige Variablen, die ersetzt werden:
$f | der Funktionsname |
$s | der Name des Quellfiles |
$h | der Name des Headerfiles, in dem die Funktion deklariert wurde |
$r | Funktionen, die diese Funktion aufrufen. Wenn die aufrufende Funktion gefunden wurde, wird hier ein Link eingefügt. |
$c | Funktionen, die durch diese Funktion aufgerufen werden. Wenn die aufgerufene Funktion gefunden wurde, wird hier ein Link eingefügt. |
$p | Der Prototyp der Funktion |
$dx | Kommentare, die in das HTML-File übernommen werden sollen.
Dabei steht "x" für ein beliebiges Zeichen, das als
erstes nach dem Kommentarbeginn steht (kein Leerzeichen).
Damit ist es möglich, auch verschiedene Informationen aus den
Kommentaren in der HTML-Beschreibung zu separieren. Beispiel: $d# übernimmt alle Kommentare, die mit # beginnen. /*# dieser Kommentar wird genommen auch diese Zeile bis hier */ //#auch das kommt mit in das HTML-File |
Wenn das File erstellt wurde, kann es natürlich weiter editiert werden, zum Beispiel durch Einfügen von Struktogrammen und verbaler Beschreibung. Ein erneutes Erstellen überschreibt solche Änderungen aber wieder.
Im Header des erstellten HTML-Files (also vor der ersten Funktionsbeschreibung) können auch noch Informationen, die aus Kommentaren der jeweils einzelnen Dateien extrahiert wurden, gesammelt werden. Das könnten zum Beispiel Versionskennungen usw. sein. Da es keine allgemein übliche oder notwendige Schreibweise dafür gibt, habe ich versucht, es so universell wie möglich zu gestalten.
Was muß man tun?
Angenommen, man hat in jeder Datei einen solchen Dateikopf:
/******************************************************************************/
// CLASS: < ISDNPORT >
// CLASS ID:
/******************************************************************************/
// FILE NAME: isdnPort.h
// VERSION: 3.2.00
// FUNCTION: main function for anything
// REMARKS:
//----------------------------------------------------------------------------*/
// Copyright © 1999 */
/*----------------------------------------------------------------------------*/
// AUTHOR/S: Jens Altmann (TCD) */
//----------------------------------------------------------------------------*/
// CREATION DATE: 02.11.99
//----+------+---------------------------------------------+------------------*/
// VER| DATE | CHANGES | AUTHOR */
//----+------+---------------------------------------------+------------------*/
//
/******************************************************************************/
Nun hätte man gerne die Informationen über Autor,
Version und Erstellungsdatum jeder
der einbezogenen Dateien in den Kopf der zu erstellenden HTML-Datei übernommen.
Man sucht sich im Quellfile einen Kenner für die Information,
die man übernehmen möchte.
Also:
Autor | AUTHOR/S: | |
Version | VERSION: | |
Erstellungsdatum | DATE: |
Dieser Merker darf keine Trennzeichen
(Leerzeichen, Tabs, Zeilenumbrüche) enthalten!
Für den Dateinamen und den Arbeitsbereich gibt es vordefinierte Merker:
Datei | $f | |
Arbeitsbereich | $prj |
Man schreibt das Template. Dazu ist es unbedingt wichtig, den Bereich,
in dem diese Informationen stehen sollen, durch den Kommentar
<!--prjinfo-->
am Anfang und Ende einzugrenzen.
Dieses Stück HTML-Code wird dann für jede Datei kopiert und mit den entsprechenden
Informationen gefüllt. Die im Quellfile zu suchenden Merker werden im Template mit
vorangestelltem $ definiert. Also:
$VERSION:
$AUTHOR/S:
$DATE:
Man speichert ab und erstellt das HTML-File. JFE sucht zuerst nach dem Kommentarbereich. Wenn dieser existiert, werden alle mit $ markierten Worte gesucht. Wenn ein solches Wort gefunden wird, werden alle Dateien nach diesem Wort (ohne $) durchsucht. Wenn es in einer Datei innerhalb eines Kommentars gefunden wird, wird der unmittelbar danach folgende Text bis zum Zeilenende in das Template anstelle des Merkers eingetragen.
Klingt ziemlich verwirrend. Am besten man sieht sich mal das Beispieltemplate und seinen Quelltext an.
Arbeitsbereiche sind eine bequeme Einrichtung wenn man in mehreren Dateien arbeitet und nicht jedesmal beim Starten alle Files wieder einzeln öffnen will. In einem Arbeitsbereich werden alle wichtigen Einstellungen abgespeichert wie:
JFE verwaltet auch eine Liste der zuletzt geöffneten Arbeitsbereiche.
Ein Arbeitsbereich wird automatisch beim Beenden gespeichert.
Der Name eines Arbeitsbereiches (Projektes) ist in einem Makro über die Variable $PRJ verwendbar. Man kann sich auch eine Verknüpfung im Explorer einrichten, so daß Projekte auch direkt mit Doppelklick im Explorer geöffnet werden können.
1. | Der Text soll so aussehen und man will vor dem Semikolon den String "xFF" einfügen | ||
2. | Den gewünschten Bereich markieren | ||
3. | Kontextmenü "Spalte ausfüllen" wählen und in dem Dialog "xFF" eingeben | ||
4. | "OK" Abhängig vom Text und der ALT-Taste ergibt sich folgendes Ergebnis: | ohne ALT-Taste | |
mit gedrückter ALT-Taste |
1. | Markiere den zu verschiebenden Bereich. Der Anfang muß dabei auf dem ersten zu verschiebenden Zeichen stehen. |
|
2. | Click auf rechte Maustaste und wähle Einrücken. Vor der einzurückenden Spalte wird ein roter Strich gezeichnet. Das Cursorsymbol ändert sich. (Mit ESCAPE kann abgebrochen werden.) |
|
3. | Verschiebe mit der Maus (gedrückte linke Taste) die rote Linie nach links bzw. rechts an die gewünschte Position. Dann lasse die linke Maustaste los. Der Text steht nun, immer noch markiert, in der neuen Spalte. |
Makros können das Leben leichter machen! Es gibt bei JFE zwei Möglichkeiten, Makros zu definieren und zu benutzen. Einmal können Makros als Textbausteine eingefügt werden, oder auch als Tastaturmakros, die Tastaturanschläge aufzeichnen.
JFE ermöglicht es, bis zu 20 beliebige Textbaustein-Makros aus einer externen Datei zu laden. Diese Datei muß "macro.txt" heißen und im gleichen Verzeichnis wie "jfe.exe" stehen. Makros werden zugänglich über das Kontextmenü. Ein Makro kann ein beliebiges Stück Text sein und auch ersetzbare Variablen enthalten. Das Format, um ein Makro zu definieren, ist folgendes: (Beispiel)
$macro Switch switch( ) { case: break; case: break; default: break; } $endmacro
Ein Makro beginnt immer mit der Anweisung $macro und endet mit $endmacro. Damit können die Makros in der Datei auseinander gehalten werden. Was dazwischen steht, ist dann der Makrotext. Der Name, der nach $macro in der gleichen Zeile folgt, ist der Name, unter dem das Makro im Kontextmenü erscheint. Nun gibt es vordefinierte Variablen, die beim Einfügen eines Makros erst aktualisiert werden:
$dd Das aktuelle Datum im deutschen Format dd.mm.yy $de Das aktuelle Datum im amerikanischen Format mm/dd/yy $FILE Der Filename ohne Pfad des aktuellen Dokumentes $USER Der im Windows eingeloggte Username $PATH Der komplette Pfadname des aktuellen Dokumentes $wd Der abgekürzte Wochentag in Deutsch $we Der abgekürzte Wochentag in Englisch $PRJ Der Name des Arbeitsbereichs (Projekt)
Ist kein Arbeitsbereich vorhanden, wird die Variable nicht ersetzt.$t Die aktuelle Zeit im Format hh:mm
Diese Variablennamen können in den Textmakros eingebaut sein und werden zum Zeitpunkt des Einfügens durch ihre Werte ersetzt.
Eine Spezialität sind aktualisierbare Makros. Was soll das sein?
Normalerweise werden Variablen beim Einfügen des Makros ersetzt und damit ist
der Text festgelegt. Nun wäre es manchmal wünschenswert, daß ein Makro bei jedem
Speichern einer Datei aktualisiert würde, beispielsweise um immer die letzte
Änderung einer Datei zu dokumentieren. Nun ist ein Makro, einmal eingefügt, ja
nicht mehr als solches zu erkennen. Man muß sich also ein Merkmal künstlich
schaffen. Und das geht so: (Beispiel)
$macro $LETZTE AENDERUNG
: $dd /$t $USER
$endmacro
Dem Makronamen wird ein '$' vorangestellt.
Beim Speichern wird der Text nach allen Makronamen, die mit $
beginnen, durchsucht und der Text um den Makrotextersatz verlängert. Im
Beispiel würde das bedeuten, daß wenn der Text den String
"LETZTE AENDERUNG"
enthält, dieser (beispielsweise) durch:
LETZTE AENDERUNG: 05.05.99 /20:23 altj
ersetzt würde. Und das bei jedem Speichern.
Das Verhalten der Variablen beim Expandieren ist unterschiedlich.
Die Variablen, die beim Expandieren eine unvorhersehbare Länge
haben, überschreiben die nachfolgenden Leerzeichen (! nur solche). Die
Variablen, die eine feste Länge haben (Zeit, Datum, ..), werden eingefügt und
der danach liegende Text nach hinten geschoben.
Tastaturmakros müssen vor der Benutzung aufgezeichnet werden. Dazu startet man über das Menü: "Bearbeiten-Macro aufzeichnen" den Makrorekorder. Die Bedienung ist leicht verständlich. Nach dem Click auf den roten Aufzeichnungsbutton werden alle Tastaturbetätigungen und ausgewählten Kommandos aufgezeichnet. Nach Beendigung der Aufzeichnung (Taste-dunkles Rechteck) kann das Makro als Datei mit der Endung ".mcr" gespeichert werden. (Diese Datei ist binär und kann nicht als ASCII-Text gelesen werden.) Gleichzeitig wird dem Benutzer angeboten, das Makro als neues Tool in der Toolleiste anzulegen. Benutzt wird es dann auch wie ein solches. Ein Click auf den entsprechenden Button startet das Makro, d.h. alle aufgezeichneten Tasten und Kommandos werden an der aktuellen Position !! des Cursors eingefügt bzw. abgearbeitet. Man muß sich also sehr genau überlegen, was man erreichen will. Neben den Tastatureingaben werden auch noch folgende Kommandos aufgezeichnet:
Ausschneiden Kopieren Kopieren ++ Einfügen Zeile löschen Suchen (einschließlich Suchtext und Suchflags) Suche passende Klammer Selektiere Klammerebene Großschreibung Kleinschreibung Kapitälchen An Port senden Von Port empfangen
Ich selbst benutze Hotkeys kaum, aber es wurde immer wieder gewünscht.
Da aber jeder eine andere Tastaturbelegung bevorzugt, kann sich nun jeder
seine Tastaturbelegung selbst definieren. (Menü Tastaturbelegung..).
Voreingestellt sind die folgenden Hotkeys:
CTRL-C
CTRL-EinfgKopieren CTRL-X
CTRL-EntfAusschneiden CTRL-V
SHIFT-EinfgEinfügen CTRL-Z Rückgängig CTRL-I Markierten Bereich eine Spalte nach rechts einrücken CTRL-U Markierten Bereich eine Spalte nach links einrücken CTRL-B Markierten Block eine Spalte nach rechts einrücken CTRL-M Markierten Block eine Spalte nach links einrücken CTRL-F Such-Dialog öffnen CTRL-R Suchen/Ersetzen-Dialog öffnen F3 Weitersuchen CTRL-G Gehe zur Zeile.. CTRL-Y Lösche Zeile CTRL-F9 Tool starten F12 Lesezeichen setzen/löschen CTRL-P CTRL-N Neues Dokument CTRL-S Speichern CTRL-O Öffnen F11 Speichern und beenden, ohne zu fragen CTRL+F11 ohne Rückfrage beenden, ohne zu speichern F6 nächstes Dokument
JFE verfügt natürlich auch über eine ausgebaute Druckfunktionalität. Im Gegensatz zu anderen Editoren kann auch ein farbiger Ausdruck erzeugt werden. Voraussetzung ist, daß das Syntaxhighlighting eingeschaltet wird. Über die Seitenansicht kann das Layout kontrolliert werden. Der eingestellte Schriftfont wird auch für den Ausdruck verwendet.
Um den Druck individuellen Wünschen anzupassen,
ist dem Druckdialog ein spezieller Einstelldialog vorangestellt. Jede Seite kann ein Banner erhalten. Dieses kann oben oder unten auf der Seite angeordnet sein. Das Banner kann enthalten:
|
Der Toolbar zum Aufzeichnen von Makros enthält zwei zusätzliche
Buttons zum Versenden und
Empfangen von Text über TCP-Ports.
Damit ist es möglich, externe Filter über Makros anzubinden.
Der Button "Sende zum Port" sendet den Inhalt der
Zwischenablage an das gewählte Serverport.
Der Button "Lesen vom Port" löscht die Zwischenablage,
wartet auf Daten vom eingestellten Port
und kopiert in die Zwischenablage.
Der Autor:
Jens Altmann
Dresden,
DeutschlandJens.Altmann@t-online.de
Copyright © 2000-2010 by Jens Altmann
Letzte Änderung: W.W. Heinz, 30. April 2022