Sorry Bitnugger , dass du jetzt hier schon über ein Jahr in dem Thread auf mich warten musst. ![]()
Das von dir geschilderte Verhalten ist natürlich unerwünscht aber dem Event geschuldet, auf das das Lua Skript reagiert (OnBeforeSave). Ist auch etwas eine Sackgasse, da es ja recht viele Ausnahmebedingungen in unterschiedlichen Konstellationen gibt.
Ich habe mir jetzt mal eine Notlösung gebastelt, dass ich bei aktiver Option für das gerade offene Skript das Einfügen verhindere. Dazu füge ich (irgendwo im Skript) den Kommentar ;[mdv0] ein. Hier in der Funktion Zeilen 6,7
opt.InsertMustDeclare = function(_opt)
local caret = editor.CurrentPos
local firstVisible, iDiff = editor.FirstVisibleLine, 0
-- Inhalt Editor auslesen
local fileread = editor:GetText()
-- trotz aktiver Option in einzelnem Skript Abwahl der Option möglich: ;[mdv0]
if fileread:find(';%[mdv0%]') then return end
-- suchen, ob bereits Deklaration vorhanden
local optstart, optend, opttxt, posval, val = fileread:find('([Oo]pt%s*%(["'.."'"..'][Mm]ust[Dd]eclare[Vv]ars["'.."'"..']%s*,%s*()(%d)%s*%))')
-- print('Debug: optstart, optend, opttxt, posval, val', optstart, optend, opttxt, posval, val)
-- abhängig von gesetzter Property
if _opt == 1 then -- Option MIT Deklarationspflicht NUR NEUDATEI
local bTimeStamp1st = (tonumber(props['Opt.MustDeclareVars.TimeStamp.First']) == 1)
if bTimeStamp1st then
local a, e = fileread:find(';%-%- TIME_STAMP.*\r\n')
editor:InsertText(e, "Opt('MustDeclareVars', 1)\n") -- in Zeile hinter TimeStamp (und Leerzeile) einfügen
else
editor:InsertText(0, "Opt('MustDeclareVars', 1)\n") -- in erster Zeile einfügen
end
iDiff = 1
elseif _opt == 2 then -- Option MIT Deklarationspflicht ALLE DATEIEN
if optstart == nil then -- keine Optionsdeklaration im Skript
editor:InsertText(0, "Opt('MustDeclareVars', 1)\n") -- in erster Zeile einfügen
iDiff = 1
else -- Deklaration existiert
if val == 1 then -- korrekte Option gesetzt
return
else -- Option muss geändert werden
editor:SetSelection(posval-1, posval) -- Wert der Option markieren
editor:ReplaceSel(1) -- Markierung ersetzen mit "1"
end
end
else -- Option OHNE Deklarationspflicht
if optstart == nil then -- keine Optionsdeklaration im Skript
return -- keine Aktion erforderlich
else -- Deklaration existiert
if val == 0 then -- korrekte Option gesetzt
return
else -- Option muss geändert werden
editor:SetSelection(posval-1, posval) -- Wert der Option markieren
editor:ReplaceSel(0) -- Markierung ersetzen mit "0"
end
end
end
if iDiff == 1 then caret = caret + 27 end -- Cursorposition verschiebt sich um Länge des Eintrags
editor:SetSelection(caret, caret) -- Cursor an alte Position setzen
editor.FirstVisibleLine = firstVisible +iDiff -- erst sichtbare Zeile an vorige Position
end
Alles anzeigen
Aber ich werde mir mal weiter Gedanken machen, ob sich das anders gestalten lässt. Hauptproblem ist beim Speichern: Woher soll ich wissen ob das der erste Speichervorgang (und somit die Erfordernis zum Einfügen der Option) ist oder ich auf ein existierendes Skript zugreife. Sicher geht das nur über irgendeine Kennzeichnung (wie meine momentane Lösung). Bin da aber völlig offen für Ideen.