Bibliotheken für SciTE-Lua: Alien, VCL, GUI u. a.

    • Offizieller Beitrag

    Da in den entsprechenden Threads einige Anhänge verloren gegangen sind, werde ich hier nochmals in SciTE nutzbare Bibliotheken für Lua posten.

    • Alien Eine Art Schweizer Taschenmesser, man kann sich z.B. die WinAPI damit zugänglich machen
    • Shell Datei-, Kommandozeilenoperationen, MsgBox in Lua
    • LPEG Reguläre Ausdrücke (das Wiki ist russisch, bei Bedarf einfach vom Browser übersetzen lassen 8o) war der falsche LInk :Face:
    • RE LPEG ist schon etwas speziell, für einfacheres Handling hier die re.lua, die auf LPEG basiert
    • LFS LuaFileSystem --- Scheinbar hatte ich doch nicht mehr die SciTE-Variante dieser Dll. Diese hier ist leider nicht in SciTE ladbar. ;(
    • GUI in SciTE, siehe gui.html im Ordner doc
    • VCL Umfangreiche Bibliothek für GUI in Lua
    • HiResTimer Ein hochpräziser Timer, erfordert Alien

    Einbinden der Bibliotheken

    - Einen Ordner für eigene Luaskripte und Bibliotheken anlegen

    - In der SciTEUser.properties dafür eine Property festlegen, z.B. Lua.User.Scripts.Path=Lw:\DEIN\PFAD

    - In der SciTEStartup.lua muss jetzt dieser Pfad für Lua- und Dll-Dateien registriert werden.

    Code: SciTEStartup.lua
    local sUserLua = props["Lua.User.Scripts.Path"]
    LUA_USER_PATH = sUserLua .. "\\?.dll;" .. sUserLua .. "\\?\\?.dll;"
    package.cpath = LUA_USER_PATH .. package.cpath
    
    LUA_USER_LUA = sUserLua .. "\\?.lua;" .. sUserLua .. "\\?\\?.lua;"
    package.path = LUA_USER_LUA .. package.path

    Die Art der Registrierung ermöglicht, dass die Dateien direkt im benannten Pfad gespeichert sind oder in einem Unterordner, der denselben Namen wie die Datei trägt (ist übersichtlicher, wenn jede Bibliothek in einem eigenen Ordner liegt, mit evtl. weiteren zugehörigen Dateien, Doc, Bsp., etc.).

    Die angehängten Bibliotheken sind nach dem Entpacken jeweils in einem eigenen Ordner. Diese Ordner in den Lua.User.Scripts.Path kopieren.

    Nach einem Neustart stehen die Bibliotheken zur Verfügung.

    In ein Skript werden Bibliotheken mit variable = require("Bibliothek") eingebunden. "Bibliothek" ist der Dateiname ohne Endung.

    "Normalerweise" kann der Name der Variablen, der die Bibliothek zugewiesen wird, beliebig sein. Wenn die Bibliothek ihre Funktionen aber nicht sauber exportiert (bei "gui" war das mal der Fall) ist es unbedingt erforderlich den Bibliotheksnamen auch als Variablennamen zu verwenden (gui = require("gui").

    Um sich mal schnell einen Überblick über die Funktionen einer Bibliothek zu verschaffen, könnt ihr diesen Code verwenden (Funktionen in alphabetischer Reihenfolge).

  • Sehr gut erklärt!

    shell... da hast du zwar den richtigen Link, aber die Dateien im Archiv sind nicht mehr aktuell. Wieso hast du hierfür kein eigenes Verzeichnis im Archiv angelegt?

    Code
    @BugFix
    ..\Lua-Bibliotheken\shellDLL\shell.dll                    35.328    02.02.2011 09:06    -a--
    ..\Lua-Bibliotheken\shellDLL\shell.html                   19.483    23.02.2011 10:41    -a--
    
    @Bitnugger
    ..\AutoIt3_LuaScripts\shell\Shell-Dateien\SciTEIco.png    10.091    27.02.2019 09:25    -a--
    ..\AutoIt3_LuaScripts\shell\Shell-Dateien\style.css        3.324    27.02.2019 09:25    -a--
    ..\AutoIt3_LuaScripts\shell\shell.dll                    133.120    27.02.2019 09:07    -a--
    ..\AutoIt3_LuaScripts\shell\Shell.html                    26.316    27.02.2019 09:25    -a--
    • Offizieller Beitrag

    shell... da hast du zwar den richtigen Link, aber die Dateien im Archiv sind nicht mehr aktuell. Wieso hast du hierfür kein eigenes Verzeichnis im Archiv angelegt?

    Hatte ich gar nicht bemerkt, dass da eine neue Version existiert :whistling:

    Ich werde mal auch noch ein paar Bsp. posten.

    Als erstes für vcl: ein rudimentärer Taschenrechner.

    Dabei werdet ihr aber auch auf ein Problem von vcl in SciTE stossen. Der Aufruf führt stets zu einem Crash von SciTE. Soweit ich das nachlesen konnte, wäre es wohl erforderlich den Loop in einen anderen Prozeß auszulagern, weil es mit dem SciTE-Prozeß immer Komplikationen gibt.

    Läßt sich mit meinem Bsp-Skript jederzeit nachvollziehen:

    - erster Start: Skript funktioniert

    - GUI schliessen

    - zweiter Start: SciTE schmiert ab

    Wenn ihr übrigens mal schnell einen Überblick über die Funktionen und Konstanten haben wollt, die in der Bibliothek enthalten sind, geht das so:

    local vcl = require "vcl"

    for k,v in pairs(vcl) do print(k,v) end

    Noch etwas zu den Aufrufkonventionen (Einbinden der Bibliotheken)

    require "vcl" ( ist identisch mit require("vcl") ) - hier wird die Bibliothek mit ihrem Namen im Globalen Space bereitgestellt :(

    vcl = require "vcl" - auch hier wird die Bibliothek im Globalen Space bereitgestellt :(

    local vcl = require "vcl" - die Bibliothek wird im Lokalen Space bereitgestellt :)

    Warum ist das wichtig. Alle Funktionen und Variablen werden in Lua in Tables gespeichert. Sind diese Global, ist das also eine umfangreiche und somit langsame Suche. Bei lokaler Deklaration wird dann nur in dem Skript gesucht. Man sieht z.B. häufig, dass oft genutzte native Funktionen im Skriptkopf lokalisiert werden: local print = print

    • Offizieller Beitrag

    HiResTimer

    Da Lua nativ keinen brauchbaren Timer besitzt, bietet HiResTimer.lua (unter Verwendung der Alien.dll) hier Abhilfe.

  • HiResTimer - kann es sein, dass du hier ein require vergessen hast...

    Code: HiResTimer_Example.lua
    ----------------------------------------------------------------------------------------------------
    local oTimer = {
    
    hrt = require("HiResTimer"),       -- requires "Alien"
    require("os"),                     -- <-- den brauchen wir für "os.clock"!
    time = nil,
    ...

    oder...

    Code: HiResTimer.lua
    do
        --
        -- take the alien module
        --
        require"alien"
        require("os")                  -- <-- den brauchen wir für "os.clock"!
       ...

    4 Mal editiert, zuletzt von Bitnugger (27. Februar 2019 um 22:01)

    • Offizieller Beitrag
    Zitat

    kann es sein, dass du hier ein require vergessen hast...

    Kann durchaus sein. Ich bemerke das nicht, weil ich viele Skripte beim Startup lade, die bereits diese Bibliotheken einbinden.

    EDIT: Also für os benötigen wir kein require, das ist eine der Standardbibliotheken. Und Alien wird explizit innerhalb von HRT eingebunden, somit dürfte eigentlich kein Fehler erscheinen. :/

    EDIT2: Die shell habe ich im Startpost aktualisiert. Bei der Gelegenheit habe ich auch die zugehörige css-Datei etwas angepasst. Das Original hat ja kaum Ähnlichkeit mit der Webseite.