AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

  • BugFix : Absolut Spitze was du bisher umgesetzt hast.

    Ich bin mittlerweile auch vom ISN Studio auf Sublime gewechselt. So lässt es sich viel angenehmer arbeiten :)

    Frage1: Wäre es möglich noch die Funktion Au3Check (Syntax Check), die es im ISN Studio gibt, mit einzubauen?

    Frage2: Gibt es die Möglichkeit ein Script mit Startparameter zu testen?

    Danke & Gruß
    Espyre

    • Offizieller Beitrag

    Frage1: Wäre es möglich noch die Funktion Au3Check (Syntax Check), die es im ISN Studio gibt, mit einzubauen?

    Frage2: Gibt es die Möglichkeit ein Script mit Startparameter zu testen?


    Zu beiden Punkten: Ja.
    Hat mich auch gewundert, dass im AutoIt-Package das (aus meiner Sicht völlig überflüssige) Tidy implementiert wurde, aber kein SyntaxCheck. Tidy habe ich in meinen ganzen 8 AutoIt-Jahren bestimmt nicht öfter als 6-8 mal benutzt. Und das auch nur ganz am Anfang. ;)
    Mit der Definition der Startparameter kann man das genauso lösen, wie beim Wrapper - durch das Inputpanel.

    Ich lass mir das alles mal durch den Kopf gehen.

    • Offizieller Beitrag

    Habe das jetzt fertig, die neuen commands sind:
    syntax_check_au3
    run_with_parameter
    re_build_completion_files
    An die Hotkeys eurer Wahl koppeln und fertig ;)
    Meine Keymap mal als Muster:

    Spoiler anzeigen

    Edit: So langsam komme ich in Fahrt :D
    Jetzt implementiert: Autocomplete von Variablen
    Dazu erforderlich, das Dollarzeichen aus der Liste der Worttrenner entfernen! Und damit auch Includes, Makros etc. erkannt werden auch @, # und < entfernen.
    <Preferences> <Settings - User> einfügen:

    Code
    {
        ...,
        "word_separators": "./\\()"'-:,.;>~!%^&*|+=[]{}`~?",
        ...
    }

    Edit 24.08.2014:
    Es fehlten noch 2 Fehlerabfragen und das Pattern für Variablenerkennung war nicht korrekt - gefixed.
    Ausserdem ist mir aufgefallen, dass die Autovervollständigung für Keywords nicht im AutoItScript-Package enthalten war. Habe ich nachgeholt. Die Datei Keywords.zip dazu in den Package-Ordner AutoItScript entpacken. (oder gleich einmal alles neu erstellen)
    Jetzt weiß ich auch, warum im AutoItScript-Package Tidy enthalten ist: Weil sich noch niemand an die Erstellung der Preference für AutoIndent gewagt hat. :whistling:
    Das scheint auch nicht ganz einfach zu sein. Meine bisherigen Versuche waren (noch) erfolglos. Aber ich bleibe dran. :rolleyes:

    Jetzt habe ich noch hinzugefügt, dass die Dateien für Autovervollständigung automatisch generiert werden. Einfach nach Installation einer neuen AutoItversion ausführen - die alten Dateien werden als *.bak gesichert und neue erstellt. (command=re_build_completion_files)
    Aber bitte vorher mal in den Package-Ordner von AutoItscript schauen, welche "*.sublime-completions dort existieren. Diese sind zum Teil nicht identisch mit den Keyword-Namen in den properties. Am Besten nach dem Neu Erstellen alle comletion-Dateien, die nicht das aktuelle Datum haben, löschen.
    Dazu sind zwei weitere Schlüssel in den AutoIt.sublime-settings erforderlich:

    Code
    ...,
        "completion_path": "I:\\SublimeText\\Data\\Packages\\AutoItScript",
        "user_include_path": "C:\\Program Files (x86)\\AutoIt3_MyInclude",
        ...


    Einen kleinen Schönheitsfehler haben die automatisch generierten Dateien: CamelCase ist automatisch natürlich nicht möglich. Nur am Wortanfang bzw. nach Unterstrich wird groß geschrieben.

    NEUE Version in Post #50!

    • Offizieller Beitrag

    So,
    jetzt habe ich die Erstellung der Autovervollständigungsdateien (re_build_completion_files) komplett neu gestaltet. Damit ist auch das Problem des CamelCase gelöst. 8o
    Ich lese die ".\SciTE\api\au3.api" aus und schreibe die Keywords, Makros und Direktiven in die "NoFuncs.sublime-completions".
    Die Funktionen werden mit Sprungmarken für den Cursor an allen Parametern versehen und in die "Au3api.sublime-completions" geschrieben. (Anspringen geht nach dem Einfügen immer mit TAB)
    Aus dem AutoIt-Include-Pfad werden alle Includes ausgelesen und in die "Includes.sublime-completions" geschrieben. Dasselbe passiert mit den User-Includes, sofern ein entsprechender Pfad in den Settings angegeben wurde. Von diesen User-Includes werden ausserdem alle darin erstellten Funktionen ausgelesen und wiederum mit Sprungmarken an den Parametern versehen in die "UserUdfs.sublime-completions" geschrieben.

    Im AutoItScript-Package sind noch folgende *.sublime-completions zu finden:
    - CompilerDirectives.sublime-completions --- die ist wenig nützlich, die Parameter sind für den AutoItWrapper von SciTE

    Die beiden folgenden Dateien beibehalten. Ich suche noch nach einer Möglichkeit, wie ich diese mit in die Erstellung einbeziehe.
    - GUIControlStyles.sublime-completions 
    - WindowMessageCodes.sublime-completions

    • Offizieller Beitrag

    Ich habe jetzt auch eine Lösung zum Auslesen von
    - GUIControlStyles und
    - WindowMessageCodes
    gefunden.
    Weiterhin entkoppele ich jetzt alle Funktionen von irgendwelchen Abfragen auf SciTE oder SciTE.properties. Denn wer ST nutzt, möchte ja nicht unbedingt auch SciTE installieren bzw. aktuell halten.

    Die nächste Paket-Version meines Wrappers wird ausschliesslich auf der AutoIt-Installation aufsetzen.
    Der nächste Punkt auf meiner ToDo-List ist dann: ManageIncludes für ST - vergleichbar mit OrganizeIncludes aber mangels grafischer Oberfläche über Menü, Hotkey und Input-Panel gesteuert. Im jetzigen AutoItscript-Package ist ein Include-Helper enthalten. Ich nehme an, der soll ähnlich wie OI arbeiten - nun bei mir tut das Teil nichts(vllt. habe ich meine Version auch schon zu sehr "verpimpt"), insofern baue ich mir dann selber etwas, was so läuft, wie ich es will. ;)

    Wenn noch weitere Wünsche bestehen: Einfach posten.
    (Solche Dinge wie: Debug2MsgBox, Debug2Console etc. werden auch nach und nach eingebunden)

    • Offizieller Beitrag

    8o
    Ich habe eine Möglichkeit gefunden, wie man automatisches Einrücken lösen kann ohne Preference-Datei (die habe ich nämlich nicht ans Laufen bekommen und im Sublime-Forum hat auch keiner eine Ahnung davon).
    Ich habe jetzt das Indent an die Entertaste gekoppelt. Das bedeutet dann aber auch, dass man für Autovervollständigung IMMER die Tab-Taste nehmen muss. Ist aber nur Gewöhnungssache.

    Edit 28.08.2014: Damit nach einzeiligem If-Then nicht eingerückt wird, muss "then$" im Pattern stehen.

    In <Preferences> <Key Bindings - User> bitte folgendes einfügen:

    Code
    [
        ...,
        { "keys": ["enter"], "command": "insert", "args": {"characters": "\n\t"}, "context":
            [
                { "key": "setting.auto_indent", "operator": "equal", "operand": true },
                { "key": "preceding_text", "operator": "regex_contains", "operand": "(?i:case|do|for|func|then$|else|elseif|while|select|switch|with)", "match_all": true },
                { "key": "selector", "operator": "equal", "operand": "source.autoit" }
            ]
        },
        ...