Diskussion zu: FAQ SciTE Editor

  • BugFix:

    Da in der FAQ ( Link ) Diskussionen entstehen, die zu schade sind, um sie später in den Papierkorb zu schieben, werde ich sie stattdessen hierhin "entsorgen". :whistling:


    Dickes Lob für den automatisch ausgrauenden Button! Da hast du echt gute Arbeit geleistet. :thumbup:

    Gibt es vielleicht auch eine Möglichkeit, das "von innen" zu bewerkstelligen, also ohne dass ein extra Programm gestartet werden muss? Falls nicht, ich bin auch für diese externe Lösung dankbar! :) Die werde ich in den nächsten Tagen ausgiebiger testen.

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

  • Ich habe das Script geändert, damit es auch mit mehreren SciTE-Instanzen funktioniert.

    If StringRegExp($__sTitle, 'SciTE( \[\d+ of \d+\])?$') Then

    So wird bei dem RegEx auch eine eingedeutschte Version berücksichtigt:

    If StringRegExp($sTitle, 'SciTE( \[\d+ (of|von) \d+\])?$') Then

    Mir ist auch aufgefallen, dass SciTE den Save-Button selbst nicht mehr aktiviert. Wenn SciTE_EnDisable_SaveBtn.au3 also beendet wird, muss der Save-Button in allen Instanzen wieder aktiviert werden, da er sonst nicht mehr nutzbar ist. Dafür kann man die von mir geänderte Version dann einfach mit dem Parameter /Exit aufrufen.

    4 Mal editiert, zuletzt von Bitnugger (24. Juli 2019 um 20:20)

  • :thumbup:

    Vielleicht könnte man beim Schließen von SciTE_EnDisable_SaveBtn einen Rundumschlag (Broadcast?) einbauen? Gibts ein OnClose-Ereignis oder was ähnliches? Dann könnte man allen SciTE-Instanzen eine "Enabled"-Message schicken.

    Kommando zurück! Ist das überhaupt notwendig? Bei kurzen Tests habe ich festgestellt, dass SciTE_EnDisable_SaveBtn nicht mehr nach SciTE gestartet weden muss, sondern auch vorher schon laufen kann. Zudem fand ich keinen Ausschalter, außer das Abschießen im Taskmanager. Ein versehentliches Schließen ist somit unwahrscheinlich.

    Daraus ergibt sich für mich folgende mögliche Handhabung:

    - SciTE_EnDisable_SaveBtn starten (evtl. auch per Win-Autostart!?)

    - SciTE nach belieben starten, auch mehrere Instanzen.

    - SciTE nach belieben schließen.

    - SciTE_EnDisable_SaveBtn beenden, ODER laufen lassen bis System-Shutdown.

    Sehe ich das richtig?

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

    5 Mal editiert, zuletzt von Professor Bernd (24. Juli 2019 um 18:56)

  • Hallo Bitnugger, deine Version war gemeint. Entschuldige bitte, ich war mit anderen Sachen beschäftigt und habe überhaupt nicht mitbekommen, dass da zwei Meister am Werk waren! :thumbup:

    - - -

    Nun studiere ich den Code (beide) schon eine gefühlte Ewigkeit. Boah, seit ihr gut! ... Der Code ist ja jetzt nicht wirklich lang und dennoch recherchier ich mich zu Grunde! Da sind Mutexerstellung, Bit-Operationen und zu meinem Entsetzen auch noch RegExp-Dingens. (Die machen mich immer konfus!) Und weil ich jahrelang "Außer Betrieb" war, muss ich für jedes Element einen Test bauen und laufen lassen, damit ich euch hier keinen Unsinn schreibe.

    Für den Moment habe ich aufgegeben. Ich versuche es vielleicht morgen wieder. Bis dahin hier meine Idee.

    Beim Beenden von SciTE_EnDisable_SaveBtn während SciTE-Instanzen noch laufen, könnte ein automatisches Enablen des Save-Buttons in allen SciTE-Instanzen ausgelöst werden.

    Das war meine Idee. Nachdem ich nun einige weitere Tests gemacht habe, scheint mir das jedoch eigentlich gar nicht nötig. Sollte der Save-Button in SciTE-Instanzen disabled bleiben, ist das überhaupt kein Problem. Zum einen kann man sowohl mit Strg-S, als auch mit dem Datei-Menü speichern. Nach einem Neustart von SciTE ist der Button wieder ganz normal.

    Ich bin gerade etwas überfordert, war ein anstrengeder Tag. Korrigiert oder bestätigt gerne, was ich hier geschrieben habe. :)

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

  • [...] und zu meinem Entsetzen auch noch RegExp-Dingens. (Die machen mich immer konfus!)

    Du solltest nicht zulassen, dass Reguläre Ausdrücke zu Deiner persönlichen Nemesis werden :P.

    Das vorliegende Beispiel, also StringRegExp($sTitle, 'SciTE( \[\d+ (of|von) \d+\])?$') ist für eine Analyse sehr gut geeignet. Es ist nicht zu komplex und Du weißt genau, worauf es hinauslaufen soll.

    Ansonsten gilt - wie schon häufiger erwähnt :

    - man kann mit Stringoperationen im Grunde alles umsetzen, was Reguläre Ausdrücke machen

    - es gibt kein Gesetz welches besagt, dass ein Regulärer Ausdruck aus einer Endloszeile bestehen muss.

    - man darf Reguläre Ausdrücke in mehrere Schritte aufteilen und sogar mit Stringoperationen mischen

    Falls Du möchtest, dann kann ich Dir den Ausdruck mal schrittweise 'auseinanderfleddern' ;).

    Das machen wir aber besser in einer Konversation, da BugFix diese Beiträge hier löschen wird.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Gibt es vielleicht auch eine Möglichkeit, das "von innen" zu bewerkstelligen, also ohne dass ein extra Programm gestartet werden muss?

    Nein. Lua Skripte sind an kein OS gebunden, was den Nachteil hat, das bestimmte OS-Methoden nicht zur Verfügung stehen. Alle Funktionen, die in dem au3 Skript ausgeführt werden, basieren auf der WinAPI. Es gibt zwar die Möglichkeit, mithilfe der Alien-Bibliothek WinAPI Funktionen in Lua Skripten zu verwenden, aber die Portierung ist recht aufwändig und umfasst in diesem Fall auch eine Vielzahl von Funktionen, sodass Aufwand und Nutzen in keinem Verhältnis stehen.

    Somit ist hier der Weg über ein externes Skript die bessere Lösung.

  • Kann man mit LUA die SciTE_EnDisable_SaveBtn.exe automatisch mit SciTE starten?

    Ja. Bei mir habe ich die Zeile ans Ende der SciTEStartup.lua gehängt. Dafür benötigst du dann allerdings die shell.dll.

    Zu beachten sind hier die doppelten Backslashes:

    shell.exec('f:\\_Archive\\_Programmieren\\AutoIt3\\User\\BugFix\\SciTE_EnDisable_SaveBtn.exe')

    Oder so, damit es nur 1x gestartet wird:

    Code
    if SciTE_EnDisable_SaveBtn == nil then
        SciTE_EnDisable_SaveBtn = shell.exec('f:\\_Archive\\_Programmieren\\AutoIt3\\User\\BugFix\\SciTE_EnDisable_SaveBtn.exe')
    --~     print('SciTE_EnDisable_SaveBtn = ', SciTE_EnDisable_SaveBtn)
    end

    Das Archiv shell.zip musst du in das Verzeichnis entpacken, in dem deine Lua-Scripts sind. Den Pfad zu deinen Lua-Scripts gibst du in der SciTEUser.properties an.

  • Erst mal danke dafür!

    Leider bin ich etwas überfordert mit dem großen Aufwand, nur um einen Button automatisch zu En-/Disablen. Vorallem bei dem Hintergrund, dass die Funktionalität schon in SciTE drin war und durch Jos (?) entfernt wurde. Es musste von euch Experten Code geschrieben werden, was ich selbst niemals geschafft hätte. Und nun scheitere ich daran, dies möglichst einfach und wiederholbar zur Zusammenarbeit zu bringen. (Es will mir nicht behagen, dass 4 Dateien dafür nötig sind!)

    Wie dem auch sei, ich danke euch für eure Ideen und Arbeit! Vielen Dank! :thumbup:

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

    • Offizieller Beitrag

    (Es will mir nicht behagen, dass 4 Dateien dafür nötig sind!)

    Sind ja auch nicht nötig. Das ist nur für den Fall, wenn du die mit AutoIt erstellte Exe mit SciTE aufrufen willst. Warum? Starte die Exe mit dem Autostart und lass sie werkeln. CPU-Bedarf: nicht messbar.

    Oder wenn du wirklich möchtest, dass diese Datei ausschliesslich gestartet wird, wenn SciTE läuft, ersetze die SciTE.exe durch ein Startprogramm, dass SciTE.exe und das Skript aufruft.

  • (Es will mir nicht behagen, dass 4 Dateien dafür nötig sind!)

    Es geht auch mit os.execute(), dann wird die shell.dll (shell.zip) nicht benötigt und es muss lediglich eine Zeile in der SciTEStartup.lua hinzugefügt werden, um die Exe zu starten.

    os.execute('start f:\\_Archive\\_Programmieren\\AutoIt3\\User\\BugFix\\SciTE_EnDisable_SaveBtn.exe')

    Von welchen 4 Dateien redest du?

  • BugFix Danke für die Tipps!

    Bitnugger Danke für die Erklärung mit os.execute! Ob du es glaubst oder nicht, ich habe gestern stundenlang erfolglos gesucht. Ich habe nur gefunden, dass es das gibt, aber wie und wo das gemacht wird, war nicht zu finden.

    Von welchen 4 Dateien redest du?

    Ich meinte dein Script bzw. kompiliert als exe "SciTE_EnDisable_SaveBtn", die "shell.dll", das "SciTEStartup.lua" Script und das "SciTEUser.properties" Script.

    Übrigens: Ich habe deine Dateien aufmerksam durchgelesen und gesehen, dass du vieles für mich (und andere) reingepackt und kommentiert hast. Dafür herzlichen Dank! :thumbup:

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

  • Danke für die Erklärung mit os.execute! Ob du es glaubst oder nicht, ich habe gestern stundenlang erfolglos gesucht. Ich habe nur gefunden, dass es das gibt, aber wie und wo das gemacht wird, war nicht zu finden.

    Das findest du in der Hilfe zu SciTE4AutoIt3, die du mit Strg+F1 öffnen kannst.

    Die shell.dll stellt dir zusätzliche Funktionen zur Verfügung, so z.B. shell.exec(). os.* bzw. io.* und einige andere "Erweiterungen" werden bereits von SciTE geladen, doch um die shell-Funktionen (shell.*) nutzen zu können, musst du sie manuell einbinden, indem du an das Ende der SciTEStartup.lua die Zeile require "shell" hinzufügst.

  • Danke!

    Wehrmutstropfen: Man findet es nur, wenn man weiß wo's steht. Und dann steht da immer noch nicht, wie man es benutzt.

    Aber darum geht es jetzt nicht, du hast es ja schon erklärt. Es geht darum, dass es so kompliziert ist. Ohne euch würde ich das nie finden. :thumbup: Leider wirft das meinen Grundsatz um, erst selbst zu versuchen ein Problem zu lösen. - - - Selbst lösen: über 10 Stunden erfolglos - - - Hier fragen: in Minuten erfolgreich gelöst.

    Vielen Dank!

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

  • Hallo Bitnugger, es funktioniert einfach nicht so, wie ich will. Was mache ich falsch?

    Ich habe folgendes ausprobiert:

    os.execute('start "F:\\SciTE Helper\\SciTE_EnDisable_SaveBtn.exe"')

    Es erscheinen 2 CMD-Fenster und bleiben. SciTE wird geöffnet, die Btn-Exe wird NICHT gestartet.

    os.execute('"F:\\SciTE Helper\\SciTE_EnDisable_SaveBtn.exe"')

    Es erscheint 1 CMD-Fenster. Erst wenn weggeklickt läuft die Btn-Exe und SciTE wird geöffnet.

    os.execute('explorer "F:\\SciTE Helper\\SciTE_EnDisable_SaveBtn.exe"')

    Es erscheinen 2 CMD-Fenster und schließen sich sofort wieder. SciTE wird geöffnet, die Btn-Exe wird gestartet. Leider passiert das bei jedem SciTE-Start.

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

  • Man findet es nur, wenn man weiß wo's steht.

    Na ja, nicht wirklich. Dir fehlt es lediglich an Basiswissen, was SciTE und Lua angeht.

    Wikipedia: Lua (portugiesisch für Mond) ist eine imperative und erweiterbare Skriptsprache zum Einbinden in Programme, um diese leichter weiterentwickeln und warten zu können.

    In unserem Fall ist Lua halt in SciTE eingebettet und somit ergibt es sich doch quasi von selbst, dass ich in der Hilfe zu SciTE suchen muss, wenn es um Lua geht.

    Und dann steht da immer noch nicht, wie man es benutzt.

    Eigentlich doch...
    os.execute (command)

    This function is equivalent to the C function system. It passes command to be executed by an operating system shell. It returns a status code, which is system-dependent.

    Es sollte allerdings klar sein, dass man diesen Aufruf in einem Lua-Script ausführen muss.

    Um Lua-Skripte direkt in SciTE (mit F5) ausführen zu können, so wie ein AutoIt-Script, musst du folgende Zeilen in die SciTEUser.properties einfügen:

    Code
    # Lua-Skripte in SciTE ausführen - ja wie geil ist das denn?! ;-)
    command.go.$(file.patterns.lua)=dofile $(FilePath)
    command.go.subsystem.$(file.patterns.lua)=3

    Nun kannst du in SciTE (neu starten) eine neue Datei mit dem Namen Test.lua und folgenden Inhalt erstellen... speichern und dann mt F5 ausführen... und schon hast du dein erstes Lua-Erfolgserlebnis. ;)

  • Ich habe folgendes ausprobiert:


    os.execute('start "F:\\SciTE Helper\\SciTE_EnDisable_SaveBtn.exe"')

    Es erscheinen 2 CMD-Fenster und bleiben. SciTE wird geöffnet, die Btn-Exe wird NICHT gestartet.

    Im Prinzip schon richtig, aber wegen des Leerzeichen im Pfad funktioniert es nicht.

    Ändere den Pfad so um und es funktioniert:

    os.execute('start F:\\SciTE_Helper\\SciTE_EnDisable_SaveBtn.exe')

    PS: Mit shell.exec() geht es auch mit Leerzeichen...

  • ... somit ergibt es sich doch quasi von selbst, dass ich in der Hilfe zu SciTE suchen muss, wenn es um Lua geht.

    Genau das meine ich doch. DIR ist das ganz klar. MIR nicht. Wie soll ich von shellexec auf LUA kommen? Hier gefunden.

    Zitat von Bitnugger

    os.execute (command)

    This function is equivalent to the C function system. It passes command to be executed by an operating system shell.

    Die Win 10 Shell kann mit Leerzeichen umgehen, wenn der Pfad mit Anführungszeichen umschlossen ist. Warum geht es mit dann mit LUA nicht? Ohne Leerzeichen funktioniert es mit deinem Tipp an sich, aber die CMD-Fenster blitzen bei jedem SciTE-Start auf. Warum benutzt du als Command "start"? Welche Commands gibts denn noch? "Open" habe ich probiert, da passiert gar nichts.

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

    • Offizieller Beitrag

    aber die CMD-Fenster blitzen bei jedem SciTE-Start auf. Warum benutzt du als Command "start"? Welche Commands gibts denn noch? "Open" habe ich probiert, da passiert gar nichts.

    Das ist der Nachteil bei Verwendung von os.execute - das CMD-Fenster popt kurz auf -- deshalb besser die shell verwenden. :P

    Das Kommando "start" ist nun mal in der Windowswelt der Befehl um einen Programmpfad in der CMD aufzurufen. Link