HM-CodeEditor für Windows mit CCU-Anbindung

Begonnen von BadenPower, 18 Januar 2018, 13:09:57

Vorheriges Thema - Nächstes Thema

BadenPower

HM-CodeEditor
Beschreibung des ReGaScript-Editors

Der HM-CodeEditor ist Bestandteil der HM-Internals.
Download hier: https://forum.fhem.de/index.php/topic,82923.msg750766.html#msg750766

wichtiger Hinweis:
Der HM-CodeEditor ist bis zum heutigen Zeitpunkt (2018 - Mai. 2023) der einzige existierende Editor mit vollwertiger Erkennung und automatisch korrekt hervorgehobener Darstellung der eingegebenen Homematic-Script- (Rega-Script)- Syntax. (falls irgendwann nicht mehr zutreffend, bitte melden)
Dies bedeutet, dass der Highlighter selbst erkennt, was der Benutzer geschrieben hat und nicht der Benutzer seinen Code so schreiben muss, dass in der Highlighter erkennt.

Letzteres ist bei allen anderen bekannten Editoren leider der Fall, was natürlich nicht im Sinne eines richtig arbeitenden Highlighter ist und somit der Editor seinen eigentlichen Zweck grundlegend verfehlt und für Laien sowie Exoerten eigentlich unbrauchbar ist, da die Syntax komplett falsch dargestellt wird.


Was kann der HM-CodeEditor?

Der HM-CodeEditor ist ein vollwertiger Editor, welcher speziell auf die Entwicklung von Skripten für die CCU abgestimmt wurde.
Die direkte Anbindung an die CCU zur Skriptausführung, zusammen mit dem Funktionsumfang, machen ihn somit einzigartig.

- spezieller Syntax-Highlighter für die HomeMatic-Skriptsprache (für verschiedene Firmware-Versionen)
- eingesetzte ReGa-Version (Highlighter-Typ) einstellbar oder automatisch ermittelbar
- automatisches Erkennen und Hervorheben veralterter oder zu neuer Syntax (entsprechend der ReGa-Version)
- Highlighter arbeitet syntax-abhängig auch bei mehrzeiligen Anweisungen
- synchrones mehrzeiliges Editieren von Worten/Text
- perfektionierte String ("" und '') und Ausrufezeichen (Ungleich bzw. Kommentar) Erkennung
- vollständiger Befehlsumfang enthalten
- alle Konstanten enthalten
- alle Variabletypen enthalten
- alle Namespaces enthalten
- alle vordeklarierten globalen Skriptvariablen enthalten
- zahlreiche Stringkonstanen wie Geräte- Kanal- und Datenpunktbezeichnungen enthalten
- automatische Code-Vervollständigung (z.B. für Methoden / Konstanten) mit Verwendungs-Typ-Angabe -> Screenshots/Beschreibung
- Objekttypbezogene Auswahlboxen der für den Objekttyp zulässigen Skriptmethoden -> Screenshots/Beschreibung
Auswahlbox zur Code-Vervollständigung der im Skript verwendeten eigenen Skript-Variable-Namen (Bezeichner) -> Screenshots/Beschreibung
- Autovervollständigung von Kürzeleingaben (nach eigenen Belieben anpassbar)
- Skripte direkt aus der Anwendung heraus auf der CCU ausführbar
- Skriptprüfung ("Skript testen") direkt aus der Anwendung heraus ausführbar
- schnelle Umschaltung zwischen mehreren CCUs
- Ausgabe der letzten Werte der eingesetzten Skriptvariablen
- Separates Ausgabefenster für zum Beispiel Mehrmonitor-Systeme anzeigbar
- LowLevel-Debugger - Syntaxfehler-Erkennung und Markierung direkt wärend der Eingabe. -> Screenshots/Beschreibung
- Integrierte Mauszeigerhilfe -> Screenshots/Beschreibung
- automatische Methoden-Prototypanzeige der verwendbaren Parameter -> Screenshots/Beschreibung
- umfangreiche Einstellmöglichkeiten zur individuellen Anpassung -> Screenshots/Beschreibung
- Schriftfarben des Highlighters den eigenen Wünschen entsprechend anpassbar


Tastaturbelegung:
Allgemein:

F2                  -> Skript auf CCU ausführen
Shift + F2          -> Skript auf CCU testen
Alt + F4            -> Editorfenster schließen


Datei:

Strg + N            -> neue Datei
Strg + O            -> Datei öffnen
Strg + S            -> Datei speichern
Strg + Alt + S      -> Datei speichern unter...
Strg + W            -> Datei schließen
Shift + Strg + W    -> alle Dateien schließen
Strg + P            -> Drucken


Eingabemarker:

Shift + Strg + B    -> zur zugeordneten Klammer springen

Links                -> ein Zeichen nach links
Rechts              -> ein Zeichen nach rechts
Hoch                -> eine Zeile nach oben
Hinunter            -> eine Zeile nach unten
Bild Hoch            -> eine Seite nach oben springen
Bild Hinunter        -> eine Seite nach unten springen
Pos1                -> zum Zeileanfang springen
End                  -> zum Zeilenende springen
Strg + Links        -> zum nächsten Wortanfang
Strg + Rechts        -> zum nächsten Wortende
Strg + Bild Hoch    -> zur ersten vollständig sichtbaren Zeile springen
Strg + Bild Hinunter -> zur letzten vollständig sichtbaren Zeile springen
Strg + Pos1          -> zum Skriptanfang springen
Strg + End          -> zum Skriptende springen


Auswahl:

Shift + Strg + C    -> Auswahlmodus "Spalten" wählen
Shift + Strg + L    -> Auswahlmodus "Zeilen" wählen
Shift + Strg + N    -> Auswahlmodus "normal" wählen


Ansicht:  (Eingabemarker verbleibt immer im sichtbaren Bereich)

Strg + Hoch          -> Ansicht nach oben scrollen
Strg + Hinunter      -> Ansicht nach unten scrollen

Alt + Hoch          -> Ansicht hineinzoomen
Alt + Hinunter      -> Ansicht herauszoomen


Bearbeiten:

Strg + A            -> alles auswählen
Strg + C            -> kopieren                    (Strg + Einfügen)
Strg + V            -> einfügen                    (Shift + Einfügen)
Strg + X            -> ausschneiden                (Shift + Entfernen)
Strg + J            -> synchrones mehrzeiliges Editieren aktivieren (ESC zum Beenden des Modus)

Strg + Backspace    -> bis zum Wortanfang löschen
Strg + M            -> Zeile umbrechen            (Enter)
Strg + L            -> Zeile unterhalb einfügen
Strg + T            -> bis zum Wortende löschen
Strg + Y            -> Zeile löschen
Shift + Strg + Y    -> bis zum Zeilenende löschen
Strg + Z            -> Rückgängig                  (Alt + Backspace)
Shift + Strg + Z    -> Wiederherstellen            (Shift + Alt + Backspace)

Shift + Strg + I    -> Block- / Einrücken
Shift + Strg + U    -> Block- / Ausrücken


Suchen und Ersetzen:

Strg + F            -> Suchen...
Strg + R            -> Ersetzen...
F3                  -> weitersuchen
Shift + F3          -> entgegengesetzt suchen
Alt + links          -> zum vorherigen Vorkommen des selektierten Textes springen
Alt + rechts        -> zum nächsten Vorkommen des selektierten Textes springen


Lesezeichen:

Strg + 0            -> gehe zum Lesezeichen 0
Strg + 1            -> gehe zum Lesezeichen 1
Strg + 2            -> gehe zum Lesezeichen 2
Strg + 3            -> gehe zum Lesezeichen 3
Strg + 4            -> gehe zum Lesezeichen 4
Strg + 5            -> gehe zum Lesezeichen 5
Strg + 6            -> gehe zum Lesezeichen 6
Strg + 7            -> gehe zum Lesezeichen 7
Strg + 8            -> gehe zum Lesezeichen 8
Strg + 9            -> gehe zum Lesezeichen 9

Shift + Strg + 0    -> setze Lesezeichen 0
Shift + Strg + 1    -> setze Lesezeichen 1
Shift + Strg + 2    -> setze Lesezeichen 2
Shift + Strg + 3    -> setze Lesezeichen 3
Shift + Strg + 4    -> setze Lesezeichen 4
Shift + Strg + 5    -> setze Lesezeichen 5
Shift + Strg + 6    -> setze Lesezeichen 6
Shift + Strg + 7    -> setze Lesezeichen 7
Shift + Strg + 8    -> setze Lesezeichen 8
Shift + Strg + 9    -> setze Lesezeichen 9


Spezial:

Shift + Space        -> Codevervollständigung auslösen
Shift + Strg + Space -> Hilfefenster: Prototypen/Parameterisierung der aktuellen Methode

Shift + Alt + Space  -> Auswahlbox: alle hinterlegten Werte/Methoden
Shift + Alt + Y  -> Auswahlbox: verwendendete Bezeichner (Variablenamen)
Shift + Alt + D  -> Auswahlbox: alle Deklarationen
Shift + Alt + C  -> Auswahlbox: alle Konstanten
Shift + Alt + B  -> Auswahlbox: alle Basismethoden
Shift + Alt + N  -> Auswahlbox: alle Namensräume
Shift + Alt + V  -> Auswahlbox: alle vordefieniert Bezeichner
Shift + Alt + M  -> Auswahlbox: alle Objektmethoden
Shift + Alt + K  -> Auswahlbox: alle Anweisungen (keywords)
Shift + Alt + S  -> Auswahlbox: alle Zeichenketten (Strings)
Shift + Alt + F  -> Auswahlbox: alle Format-Parameter
Shift + Alt + I  -> Auswahlbox: ID-Konstanten
Shift + Alt + O  -> Auswahlbox: Objekttyp-Konstanten

Strg + *        -> Filter in geöffneter Auswahlbox toggeln (aktivieren/deaktivieren)



Tip:
Der HM-CodeEditor kann mittels einer Verküpfung direkt aufgerufen werden ohne über das Startfenstern navigieren zu müssen, in dem man in der Verküpfung den Parameter "-ce" (ohne Anführungszeichen) übergibt.

Wählt man im Windows-Explorer eine Datei mit der rechten Maustaste aus, so kann man unter "öffnen mit" die HM-Internals auswählen und so auch mit der gewünschten Dateiendung verküpfen. Dann startet der HM-CodeEditor direkt und öffnet die ausgewählte Datei.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

CCU-Firmware-Versions-Abhängigkeit:

Der Highlighter des HM-CodeEditors zeigt die Unterschiede der verschiedenen ReGaHss-Versionen an.

In diesem Beispiel sollte man die Zeile 5 des Skriptes beachten.
Je nach eingesetzter Firmware- und ReGaHss-Version der CCU wird diese Zeile unterschiedlich behandelt.

Bis Firmware 2.27.8 war diese Zeile eine Kommentarzeile, da die Zeile darüber nur ein Ausrufezeichen ohne darauffolgene weitere Zeichen enthält.

Man beachte die Verschiedenen Ausgaben in Bild 2 und 3, die dies verdeutlichen. So ist der ausgegebene Wert der Skriptvariable lInt je nach Firmware einmal 0 oder 1.

Der Highlighter zeigt autmatisch richtig an, ob es sich um einen Kommentar oder eben eine Befehlszeile handelt.
Auch kann man Anhand der Bilder sehen, dass das Ausrufezeichen in Zeile 8 keinen Kommentar einleitet, sondern eben zur Befehlssyntax gehört und ein NICHT/Ungleich signalisiert. Dies würde auch richtig angezeigt werden, wenn man die Syntax in dieser Form

WriteLine(dom.BuildLabel());
boolean lBool = false;
integer lInt = 0;
!
lInt = lInt + 1;
WriteLine(lInt);

if(
! lBool
)
{
  WriteLine(lBool);
}


in den Editor eingibt, da dies immernoch eine gültige und ausführbare Syntax wäre, welche keinen Kommentar enthält, obwohl ein Ausrufezeichen am Zeilenanfang steht.

Dies ist ein weiterer Vorteil des syntax-äbhängigen Highlightings, welches auch über mehrere Zeilen hinweg funktioniert.

Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

Code-Vervollständigung mit Verwendungs-Typ-Angabe.

Hier einmal zwei kleine Beispiele im Anhang.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

separates Ausgabefenster

Um ein möglichst großes Eingabefenster zu erhalten kann die Ausgabe in ein separates Ausgabefenster "ausgelagert" werden.

Im Anhang kann man das Ausgabefenster sehen, welches hier in diesem Screenshot die letzen Werte der im Skript verwendeten Skriptvariablen nach der Ausführung anzeigt.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

#4
LowLevel-Debugger
Syntaxfehler-Erkennung und Markierung direkt wärend der Eingabe

Bild 1 zeigt die Fehlermarkierungen anhand verschiedener Syntax-Fehler.
Die Fehleranalyse und Markierung erfolgt direkt wärend der Eingabe des Codes.

Des weiteren werden auch Warnungen, z.B. Verwendung eines Skriptvariablenamens, welcher dem Namen einer Methode entspricht und Informationen, wie z.B. unnötige Semikolon, ausgegeben.
Die Markierungen können wahlweise als Wellenlinie, Umrandung oder voller Hintergrund dargestellt werden.


In Verbindung mit dem HM-Analyser, welcher einen Syslog-Server beinhaltet, lassen sich beim Ausführen von Skripten innerhalb von Millisekunden Skriptfehler automatisch anzeigen.

Bild 2 zeigt den HM-Analyser mit aktiviertem SysLog-Meldungs-Empfänger.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

#5
Hallo zusammen,

gerade einmal einen Hinweis auf eine grandiose Errungenschaft aus dem orangenen Forum erhalten.
https://homematic-forum.de/forum/viewtopic.php?f=65&t=47083&start=250#p473089

Zitat von: jmaus
Zitat von: EckartS
Ein Kleinigkeit beim neuen Script-Editor in WebUI: Kommentarzeilen werden nur nach "! ", nicht nach "!" ohne Leerzeichen richtig formatiert angezeigt.
So ist das eben, änder die Kommentare in "! " mit Leerzeichen dahinter ab, sieht eh schöner aus.. Anders geht das nicht weil ! auch der negierungsoperator ist und daher die syntax sich prinzipiell mit dem kommentieren beisst.

Es wurde in RaspberryMatic ein CodeEditor mit Syntax-Highlighter eingebaut.
Wie bei den meisten Dingen halt nur wieder halbherzig, bzw. wahrscheinlich ohne die erforderlichen Kenntnisse.
Da kann man bei einer solchen Arbeit und einer solchen Aussage dazu wieder nur einmal den Kopf schütteln.

Der User soll seinen Code so schreiben, dass ihn der Highlichter auch anzeigen kann.
Wo kommen wir denn dahin?


Wieso sollte das Darstellen eines Ausrufezeichens als Kommentar UND Operatorzeichen Probleme machen?

Der HM-CodeEditor kann dies selbstverstänlich. (siehe Bild)


BadenPower
.

Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

Tibin

Hallo BadenPower,
ich habe gestern in das Skript von blackhole meine SV eingetragen und wollte eigentlich nur mal zur Kontrolle das Skript testen.
Da wirft der mir tatsächlich einen Fehler raus. In einer Zeile die eigentlich mit einem Ausrufezeichen versehen ist. :) (siehe Anhang)
Gruß Tino

BadenPower

Hallo Tino,

herzlichen Dank für Deinen Hinweis.

Das ist mir selbst noch gar nicht aufgefallen.

Da muss ich einmal schauen, weshalb der HM-CodeEditor beim Skript testen hier die Zeile tatsächlich umbricht und statt
!Gültige Werte sind beliebige Zeichen. Zeilenumbruch mit "\n". (Default: " ")

fälschlicherweise
!Gültige Werte sind beliebige Zeichen. Zeilenumbruch mit "
". (Default: " ")


an die ReGaHss sendet, was natürlich dann einem fehlerhaften Code entspricht.

Beim Ausführen des Codes existiert das Problem hingegen nicht, da wird alles richtig übertragen.


viele Grüße
BadenPower
,
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

Tibin

Bitte ;)
War purer Zufall. Da ich mit Alchy's Allinkl-Skript noch nie eine Pushover-Meldung meiner HKT's (sonst geht alles) bekommen habe, wohingegen die SV korrekt befüllt wird, wollte ich es jetzt mal mit dem von blackhole versuchen und die SV separat abfragen.
Aber das ist ne andere Geschichte.
Dir einen schönen Abend noch.
Gruß Tino

BadenPower

integrierte Mauszeigerhilfe
zusätzliche Informationen beim Überfahren mit der Maus

Bild 1 zeigt die Ausgabe beim Überfahren eines Bezeichners (Skriptvariablenamen)
Die Ausgabe enthält die Angabe wie oft eine Variable im Skript verwendet wird, ob, wie oft und in welcher Zeile und Spalte sie zuerst verwendet und/oder deklariert wurde. 

Bild 2 zeigt die Angaben wie Bild 1
jedoch zusätzlich einen Fehlerhinweis, dass der Verwendete Variablenamen einem vordefinierte Namen zum. Beispiel einer Basis- oder Objektmethode oder vordefinierten Variable entspricht. Der Fehler ist auch direkt wärend der Eingabe erkennbar da fehlerhafte oder fehlerauslösende Elemente durch farbliche Hervorhebung automatisch wärend dem Schreiben gekennzeichnet werden.

Bild 3 zeigt die Ausgabe beim Überfahren einer Zahl
Die Ausgabe enthält den Variabletyp sowie die möglichen Konstanten, welche der Zahl entsprechen

Bild 4 zeigt die Ausgabe beim Überfahren einer Konstanten
Die Ausgabe enthält den Wert der Konstante.

Bild 5 zeigt die Einstellungsmöglichkeiten zur Mauszeigerhilfe
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

BadenPower

#10
Prototypanzeige
automatische Anzeige der benötigten und/oder anwendbaren Parameter

Die integrierte Methoden-Prototyp-Anzeige umfasst mehr als 900 ReGa-Script-Methoden-Prototypen.


Bild 1 zeigt die Methoden-Prototypanzeige für die Objektmethode .CreateObject().
Zu sehen sind alle möglichen Parameter mit deren Datentypen sowie der Rückgabetyp der Methode.
Die Anzeige erfolgt automatisch bei der Eingabe der geöffneten Klammer hinter dem Methodenname oder bei der Eingabe eines parametertrennenden Kommas. Die Automatik kann selbstverständlich deaktiviert werden. Auch kann die Anzeige jederzeit manuell durch die Tastenkombination Strg + Shift + Leertaste aktiviert werden.

In Bild 2 kann man sehen, dass die Hervorhebung in der Anzeige wechselt, je nach dem bei welchem einzugebenden Parameter der Eingabemarker steht.

Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

vbs

Nur mal so aus Interesse: Hast du das Projekt "from scratch" aufgesetzt oder basiert das auf irgendwas? Ist es open source? Hab es nicht getestet, aber sieht von den Bildern her sehr vernünftig aus!

BadenPower

Zitat von: vbs am 16 Juni 2019, 23:28:19
Nur mal so aus Interesse: Hast du das Projekt "from scratch" aufgesetzt oder basiert das auf irgendwas?
Das gesamte Projekt ist eine vollständige Eigenentwicklung vom Nullpunkt an.
Auch der Editor-Baustein und die Highlighter sind spezielle Eigenentwicklungen, wobei hier die Grundlagen aus den Lazaruskomponenten der SynEdit-Reihe zugrunde liegen.

Zitat von: vbs am 16 Juni 2019, 23:28:19
Ist es open source?
Das Projekt war ursprünglich als Open-Source-Projekt für alle, aber im speziellen für das HomeMatic-Forum bestimmt.

Dann gab es dort aber 4 Wesen, welche dafür gesorgt haben, dass es eben nun kein Open-Source-Projekt ist und eine Freischaltung benötigt.


viele Grüße
BadenPower
.

Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

vbs


BadenPower

Code-Vervollständigung
automatische Anzeige der verwendbaren gültigen Objektmethoden

Die Code-Vervollständigung ist in der Lage eine gefilterte Auswahl der für den Objekt- oder Variabletyp zulässigen Objektmethoden anzuzeigen.

Die automatische Anzeige nach der Eingabe des Methodenpunktes ermittelt durch eine integrierte KI in den meisten Fällen automatisch den benötigten Objekt- oder Variabletyp und zeigt die für diesen Typ gültige Methodenliste als Auswahlbox an.

Die Automatik kann selbstverständlich deaktiviert werden. Auch kann die gefilterte Anzeige für jeden beliebigen Objekttyp, Variabletyp oder Namesraum jederzeit manuell durch die entsprechenden Tastenkombinationen Strg + ALT + ??? oder Auswahl per Maus aktiviert werden.

Auch für Konstanten und vordefinierte Strings ist diese gefilterte Werte-Auswahl vorhanden


Bild 1 zeigt die Auswahlbox für den Objekttyp "OT_DOM" nach der Eingabe des Methodenpunktes nach dem vordefinierten Bezeichner "dom".

Bild 2 zeigt die Auswahlbox für den Varibaletyp "string" nach der Eingabe des Methodenpunktes hinter der Objektmethode .BuildLabel() da die Rückgabe der Methode ein "string" ist und daher nur die angezeigten Methoden zulässig sind.

Bild 3 zeigt das Auswahlmenu der Code-Vervollständigung für die manuelle Auswahl und Anzeige des benötigent Typs.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.