Lua - Grundkenntnisse

  • Indem du das print einfach noch dem Block für dostring hinzufügst...

    Danke. :thumbup: Ich hatte es paralell parallel dazu selbst rausgefunden, aber es wird immer noch nur die Startseite des Manuals angezeigt.

    Edit: Onkel Musashi sieht alles! 8o

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    Einmal editiert, zuletzt von Professor Bernd (5. Oktober 2020 um 23:54)

  • In einer Test-Lua-Datei hatte ich "function" oder "print" markiert. Nun habe ich "string" dazu geschrieben, aber nichts davon bewirkt etwas, es wird immer die Startseite des Manuals geöffnet.

    Ich habe nun auch Google Chrome installiert, aber dann öffnet sich gar nichts. Wenn ich io.popen benutze, flackert kurz das SciTE Fenster, aber auch da öffnet sich kein Browser.

    os.execute('"'..chrome..'" "'..manual..sel..'"')

    io.popen('"'..chrome..'" "'..manual..sel..'"')

    Kannst du deinen funktionierenden Befehlsblock posten? Dann werden ich alle Programme (Chrome, ...) so einrichten, wie bei dir. Google Chrom hat sich bei mir in "C:/Program Files/Google/Chrome/Application/chrome.exe" ohne das "(x86)" installiert, das dürfte aber keinen Unterschied machen, wenn ich den Pfad im Befehlsblock angepasst habe: local chrome = "C:/Program Files/Google/Chrome/Application/chrome.exe" \

    Liegt es vielleicht an os.execute/io.popen? Oder dem command.help.subsystem.$(file.patterns.lua)=3?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • print('"'..chrome..'" "'..manual..sel..'"') ergibt

    "C:/Program Files/Google/Chrome/Application/chrome.exe" "file:///C:/CODE/Lua/doc/lua5.3/manual.html#pdf-string"

    Kannst du mal bei dir probieren, wie es mit os.execute oder io.popen funktioniert?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    • Offizieller Beitrag

    file:///C:/CODE/Lua/doc/lua5.3/manual.html#pdf-string

    Wenn du das in die Adresszeile des Browsers eingibst, funktioniert es dann?

    Wenn ja, ist der os.execute Aufruf fehlerhaft. Probiere dann mal mit "start " vor dem eigentlichen Kommando.

    Ich liege bereits im Bett und dreh mich jetzt um. GN8

  • Code: AutoIt Text.au3
    Run("C:/Program Files/Google/Chrome/Application/chrome.exe" & " " & "file:///C:/CODE/Lua/doc/lua5.3/manual.html#pdf-string")

    In AutoIt funktioniert der Aufruf einwandfrei, die Webseite wird aufgerufen und zeigt "6.4 – String Manipulation" an. Also wirds an os.execute/io.popen liegen.

    Edit: Da hatten wir wohl die gleiche Idee zur gleichen Zeit. Gute Nacht. :sleeping:

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Ich mache das beim Debuggen auch gerne so:

    print('shell.exec = ', shell.exec('"'..firefox..'" "'..manual..'"'))

    shell.exec = true Der Vorgang wurde erfolgreich beendet

    Eine Zeile geändert, um einen Fehler zu provozieren:

    local firefox = "C:/Program Files/Mozillas Firefox/firefox.exe" \

    shell.exec = false Das System kann die angegebene Datei nicht finden

    Evtl. liegt es daran, dass os noch unbekannt ist... das kannst du so testen:

    command.help.$(file.patterns.lua)=dostring \

    if type(os) ~= 'table' then print('require "os"!!!', 'type(os) = ', type(os)) return end \

    ...

    Für os.execute musst du die Zeile etwas ändern... hier beide Zeilen zum Vergleich:

    shell.exec('"'..firefox..'" "'..manual..'"')

    os.execute('""'..firefox..'" "'..manual..'""')

    Einmal editiert, zuletzt von Bitnugger (6. Oktober 2020 um 00:47)

  • Dank eurer Hilfe funktioniert es nun. Mein Befehlsblock sieht nun so aus:

    Code: SciTEUser.properties
    command.help.$(file.patterns.lua)=dostring \
    local chrome = "C:/Program Files/Google/Chrome/Application/chrome.exe" \
    local manual = "file:///C:/CODE/Lua/doc/lua5.3/manual.html#pdf-" \
    local sel = props["CurrentWord"] \
    if sel == "" then manual = "file:///C:/CODE/Lua/doc/lua5.3/manual.html" end \
    os.execute('start "" "'..chrome..'" "'..manual..sel..'"')
    command.help.subsystem.$(file.patterns.lua)=3

    Folgende positiven Dinge sind hervorzuheben:

    • os.execute('start "" "'..chrome..'" "'..manual..sel..'"') lässt das Windows CMD Fenster nur kurz aufblitzen, anstatt die ganze Zeit zu laufen, bis der Browser geschlossen wird.
    • local sel = props["CurrentWord"] ermöglicht es, die Hilfe aufzurufen, ohne dass ein Wort markiert ist. Es genügt, wenn das Caret in oder an einem Wort steht.
    • Zusätzlich funktioniert damit auch das Markieren des Suchwortes, so wie mit local sel = props["CurrentSelection"]. was nützlich ist bei Suchworten, die mit Punkt verbunden sind, z.B. "os.execute" oder "string.format".

    Wer auch das Markieren von Suchworten, die mit Punkt verbunden sind, automatisch haben will, kann folgendes in die SciTEUser.properties hinzufügen.

    Code: SciTEUser.properties
    # Wort-Erkennung in Lua Dateien auf zweiteilige Wörter mit Punkt "." dazwischen erweitern.
    # Dadurch wird z.B. beim Aufrufen der Hilfe mit Param "CurrentWord" ein zweiteiliges Wort
    # mit Punkt dazwischen als Suchbegriff erkannt, z.B. "os.execute", wenn das Caret darin steht.
    # Auch werden beide Wortteile markiert, wenn man auf nur einen Wortteil doppelklickt.
    word.chars.lua=$(chars.alpha)$(chars.numeric)$(chars.accented)._%
    word.characters.$(file.patterns.lua)=$(word.chars.lua)

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    3 Mal editiert, zuletzt von Professor Bernd (6. Oktober 2020 um 07:49)

  • Code
    command.help.$(file.patterns.lua)=dostring \
    ...
    shell.exec('"'..chrome..'" "'..manual..sel..'"')
    ...

    Muss man für shell.exec noch etwas in der SciTEUser.properties einfügen, um die Bibliothek einzubinden?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Muss man für shell.exec noch etwas in der SciTEUser.properties einfügen, um die Bibliothek einzubinden?

    Wäre ich gehässig, würde ich jetzt einfach nein sagen... doch du hast unverdienterweise unverschämtes Glück. 8o

    Einfügen muss man was, aber wie in aller Welt kommst du dabei auf SciTEUser.properties?

    Tatsächlich muss dies entweder lokal in dem Lua-Script, welches Funktionen der shell.dll benötigt, oder aber global in der SciTEStartup.lua geschehen, womit dann alle Scripts darauf zugreifen können.

    -- load library - Info --> shell.html

    require "shell"

    --~ if shell then table.foreach(shell, print) end

    Das funktioniert allerdings nur bis SciTE-Version 3.7.5.0, denn in den neueren ist der Einsprungpunkt luaL_register nicht mehr enthalten, weil veraltet.

    Liest du hier: RE: Erkennen wenn User eine öffnende runde Klammer schreibt, unabhängig vom Keyboard Layout

    Folgende positiven Dinge sind hervorzuheben:

    Zu 1.) os.execute() lässt das Windows CMD Fenster nur kurz aufblitzen und versteckt es dann wieder - es wird nicht geschlossen und läuft im Hintergrund weiter, bis SciTE beendet wird.

    Zu 2.) Die Hilfe kann auch ohne props["CurrentWord"] aufgerufen werden... wenn kein Text markiert wurde, ist dies allerdings eine gute Alternative, um den Text, der unter dem Caret steht, zu verwendet, oder halt nichts, wenn das Caret nicht vor/in/hinter einem Word oder in einer leeren Zeile steht.

    Zu 3.) Mit props["CurrentWord"] und auch mit props["CurrentSelection"] wird nichts markiert. props liefern lediglich die Werte der angefragten Eigenschaften, welche von SciTE bereitgestellt werden.

    Wer auch das Markieren von Suchworten, die mit Punkt verbunden sind, automatisch haben will, kann folgendes in die SciTEUser.properties hinzufügen.

    Keine schlechte Idee... sollte aber gut überlegt sein... denn andere Scripte gehen evtl. davon aus, das diese Properties auf Default stehen.

  • Wäre ich gehässig, würde ich jetzt einfach nein sagen... doch du hast unverdienterweise unverschämtes Glück. 8o

    Hast du deine Schuhe und Strümpfe ausgezogen? ;)

    Zu 1.) os.execute() lässt das Windows CMD Fenster nur kurz aufblitzen und versteckt es dann wieder - es wird nicht geschlossen und läuft im Hintergrund weiter, bis SciTE beendet wird.

    Das kommt darauf an, ob du den neuen Schalter "create.hidden.console" gesetzt hast. Wenn gesetzt (=1), blitzt das CMD Fenster 1x bei SciTE Start auf und läuft dann im Hintergrund, bis SciTE beendet wird. Wenn nicht gesetzt, wird mit jedem os.execute das CMD Fenster gezeigt. Wenn du "start" im Aufruf benutzt, blitzt das CMD Fenster bei jedem Aufruf auf, ohne "start" läut das CMD Fenster bis das damit gestartete Programm beendet ist.

    Keine schlechte Idee... sollte aber gut überlegt sein... denn andere Scripte gehen evtl. davon aus, das diese Properties auf Default stehen.

    Das sehe ich auch so. Beim Aufrufen der Lua Hilfe ist es einerseits angenehm, das Caret z.B. in "package.cpath" zu setzen und F1 zu drücken - dann öffnet sich die Lua Hilfe automatisch an der richtigen Stelle. Andererseits ist es aber auch nicht immer gewollt, wenn man z.B. im Text "Lua.User.Scripts.Path" auf "Path" doppelklickt und dann alle 4 Wörter markiert werden. Auch an deinem Argument, dass andere Scripts davon betroffen werden, ist was dran. - Aber das ist wohl mit allem so, dass es 2 Seiten gibt. :saint:

    Viel wichtiger wäre, Informationen z.B. zu "table.foreach" zu finden, ohne zusätzlich noch Google und anderes bemühen zu müssen. :/

    Einfügen muss man was, aber wie in aller Welt kommst du dabei auf SciTEUser.properties?

    Geraten? :P

    Das funktioniert allerdings nur bis SciTE-Version 3.7.5.0, denn in den neueren ist der Einsprungpunkt luaL_register nicht mehr enthalten, weil veraltet.

    Das betrifft nur DLLs, nicht lua Bibliotheken.

    Ich habe an einem Ersatz für shell.execute gearbeitet, bisher soweit erfolgreich, dass es z.B. in der SciTEStartup.lua funktioniert. Leider lässt sich meine Funktion aus meiner Lua Bibliothek NICHT mit "dostring" in der SciTEUser.properties benutzen. Deshalb habe ich gefragt. - Auch mit require "MeinModul" lässt sich meine Funktion zwar in der SciTEStartup.lua benutzen, aber nicht mit "dostring" in der SciTEUser.properties.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Wie kann man Shift+F1 und Alt+F1 benutzen, um andere Lua Hilfen aufzurufen? (Ctrl+F1 ist von der SciTE4AutoIt3 Hilfe belegt.)

    Mit eurer Hilfe habe ich den Tipp von BugFix ins Laufen gebracht, um mit F1 die lokale Lua Hilfe aufzurufen. Manche Sachen findet man dort, manche nicht. Deshalb würde ich gerne andere Quellen zusätzlich einbinden, z.B. Garry's Mod Wiki (online!) und mit Shift+F1 aufrufen. (Möglichst OHNE einen der wenigen Tool-Menu Shortcuts 35 - 49 zu opfern!)

    Aufruf: https://wiki.facepunch.com/gmod/Suchbegriff

    Beispiel: https://wiki.facepunch.com/gmod/table.foreach

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Wofür ist denn "OHK = {}" am Anfang der OHKfuncs.lua?

    Code: http://lua-users.org/wiki/TablesTutorial
    Creating tables
    
    Tables are created using table constructors, which are defined using curly brackets, e.g. { } . To define an empty table we can do the following.
    
        > t = {}    -- construct an empty table and assign it to variable "t"
        > print(t)
        table: 0035AE18
    
    Notice when the value of a table is displayed only the type and unique id of the object are displayed. To print out the contents of a table we must do so explicitly. We'll learn how to do this later.
    • Offizieller Beitrag

    Wofür ist denn "OHK = {}" am Anfang er OHKfuncs.lua? In anderen Scripts habe ich z.B. "F = {}" gesehen.

    Mal noch als Hintergrund:

    Lua besteht intern ausschließlich aus Arrays - in Lua: Tables.

    Alle Funktionen und Werte sind darin gespeichert. Daraus resultiert auch, dass Lua extrem davon profitiert, wenn Funktionen/Variablen explizit lokal deklariert werden.