Dokumentation | 
Mit externen Programmen arbeiten
Arachnophilia © Copyright 2011, P. Lutus.
Arachnophilia ist CareWare (Englische Webseite)

Übersetzt ins Deutsche von Wolfram Strempfer

Um diese Seite zu verstehen, sollte der Leser schon etwas über Die Arachnophilia Makro-Architektur wissen — die beschriebenen Funktionen gehen davon aus, dass man sich mit dem Makrosystem ein wenig auskennt.

Allgemeine Eingabe-Ausgabe-Funktionen

Diese Funktionen wurden mit Arachnophilia Version 5.5 eingeführt.

Die in diesem Abschnitt beschriebenen Funktionen können zur Interaktion mit Ihrem Betriebssystem und allen darunter laufenden Programmen benutzt werden. Die eine Funktion liest die Ausgabe eines Programmes ein, die andere Funktion gibt das aktuelle Dokument oder die aktuelle Markierung an ein Programm weiter.

  • SystemCom

    SystemCom führt einen System-Befehl oder ein Programm aus und fügt das Ergebnis in das aktuelle Dokument ein. Im Arachnophilia-Makroeditor könnte ein Befehl zum Beispiel wie folgt aussehen:

    Beispiel für Linux:   [SystemCom:date]
    Beispiel für Windows: [SystemCom:date /T]
                      

    Dieses Beispiel fragt beim Betriebssystem nach dem aktuellen Datum und der Uhrzeit (unter Windows nur das Datum) und fügt es in das aktuelle Dokument genau dort ein, wo der Cursor gerade steht.

    Es ist sehr wichtig, zu verstehen, dass dieses Kommando mit jedem System-Kommando oder Programm arbeiten kann, also auch mit Programmen oder Skripten, die Sie selbst geschrieben haben. Hier kommt noch ein Beispiel:

    Beispiel für Linux:   [SystemCom:ls -la (Pfad)]
    Beispiel für Windows: [SystemCom:dir (Pfad)]
                      

    In diesem Beispiel wird der Inhalt eines bestimmten Verzeichnisses abgefragt und ins aktuelle Dokument eingefügt.

  • SystemProcess

    Mit SystemProcess kann man noch viel mehr machen — dieser Befehl liest das aktuelle Dokument oder die Auswahl, gibt die Daten an ein externes Programm zur Verarbeitung weiter und fügt das Ergebnis an die aktuelle Cursorposition ins Dokument ein. Das ist eine sehr mächtige Funktion, und für die Erklärung müssen wir etwas tiefer einsteigen.

    Hier kommt ein praktisches Beispiel — wir werden zur Demonstration, wie die FUnktion arbeitet, ein kleines Python-Skript benutzen, um den übergebenen Text in GROSSBUCHSTABEN zu verwandeln. Hier ist das Programm-Listing für das Python-Skript:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import sys
    
    for line in sys.stdin.readlines():
      line = line.upper()
      sys.stdout.write(line)
      
                      

    Das obige Skript kann als Vorlage für jede denkbare Textverarbeitung dienen, die der Leser eventuell benötigt. Dabei kann man beliebige Textverarbeitungsschritte programmieren (und auch jede gewünschte Skriptsprache benutzen)

    Um nun dieses Skript (oder ein ähnliches) benutzen zu können, würde man ein Makro wie folgt erstellen (wenn man diesen Anweisungen folgt):

    [SystemProcess:Pfad/zu/Skript/name.py]
                      

    Dann kann man sich auch einen Werkzeugleisten-Button oder einen Menüeintrag anlegen, um das Makro auf bequeme Art starten zu können. Wenn das Makro aktiviert wird, holt sich Arachnophilia das aktuelle Dokument oder die Auswahl und reicht sie an das Python-Skript weiter. Das Python-Skript verarbeitet den Text und gibt ihn an Arachnophilia zurück, dann wird er wieder ins Dokument eingefügt.

    Denken Sie dabei immer an Arachnophilias Makroarchitektur: Wenn kein Text ausgewählt wird, wird das gesamte Dokument an das Makro weitergegeben und durch das Ergebnis ersetzt. Wenn eine Auswahl vorhanden ist, wird nur diese durch das Makro verändert.

Der Unterschied zwischen SystemCom und SystemProcess liegt darin, dass der erste Befehl dem externen Programm keinerlei Text übergibt, wohingegen zweiterer Befehl genau das tut. Deshalb sollte man gut überlegen, welches Kommando man für das erwünschte Ergebnis braucht:

  • SystemCom wird den Text Ihres Dokuments in Ruhe lassen (es sei denn, Sie haben etwas ausgewählt), es wird nur die Ausgabe eines Programmes an die Stelle eingefügt, wo der Cursor gerade steht.
  • SystemProcess nimmt den kompletten Inhalt oder die aktuelle Auswahl und ersetzt sie durch die Ausgabe des externen Programms.
  • Was auch passiert, wenn Ihnen das Ergebnis nicht gefällt, klicken Sie einfach auf den Undo-Button, um die Änderung rückgängig zu machen.
Kompiler-spezifische Funktionen
Die Funktionen, die nun beschrieben werden, werden wohl in den meisten Fällen zusammen mit Compilern benutzt, aber im Prinzip kann jedes Programm von Arachnophilia aktiviert werden und Werte zurückgeben.

Die Aktivierung von Programmen von Arachnophilia aus benutzt eins von zwei Systemmakros, abhängig von den Anforderungen:
  • Das erste Makro ist eher für Compiler gedacht, die möglicherweise Fehlermeldungen zurückgeben. [SystemExec:arg] führt dazu, dass ein Programm mit optionalen Argumenten gestartet wird. Hier ist ein typischer Makrotext für dieses Kommando:

    [Save][SystemExec:g++ [FileName]]
    Mit diesem Makro wird die momentan angezeigte Datei an ihrem schon festgelegten Speicherort gespeichert, dann wird ein beliebter C++-Compiler gestartet, wobei der Dateiname als Argument übergeben wird (Denken Sie daran, dass Arachnophilia-Makros verschachtelt werden können!). Wenn der Compiler irgendwelche Fehlermeldungen produziert, werden Sie unten im Dokumentenfenster aufgelistet und der Cursor wird automatisch auf die erste als fehlerhaft gemeldete Zeile platziert. So ungefähr:

    Das obige Makro könnte zum Beispiel für interaktives Programmieren eingesetzt werden — nach ein paar änderungen am Quellcode würde der Programmierer das Makro mit einer Tastenkombination starten. Wenn Fehler gemeldet würden, könnten sie interaktiv beseitigt werden (das "Feedback-Panel", das im Bild oben gezeigt wird, kann angeklickt werden, um mit dem Cursor zu jeder fehlerhaften Zeile zu springen), und dann könnte das Makro erneut aktiviert werden.

  • Ein anderes Makro — [SystemConsole:arg] — ist dazu eher geeignet, wenn Rückmeldungen vom Programm nicht so sehr gewünscht sind und ein Terminal-Fenster gebraucht wird. Hier sind zwei Beispiele:

    (Linux/Unix) [SystemConsole:bash -i]
    (Windows) [SystemConsole:cmd /k]

    Diese Befehle starten mit einem einfachen interaktiven Terminal Kommandozeileninterpreter in einem eigenen Fenster auf den jeweiligen Plattformen, um Eingaben/Ausgaben zu handhaben.
  • Es ist zugegebenermaßen etwas unglücklich, dass die beiden Compiler-spezifischen Makros Namen haben, die den neueren beiden, darüber beschriebenen, so ähnlich sind, aber diese beiden wurden schon vor Jahren geschrieben, und ich habe mich dagegen entschieden, sie umzubenennen, weil dadurch womöglich viele existierende Benutzermakros nicht mehr funktionieren würden.

 

Dokumentation |