SciTE - Farbe eines Hexwertes im Skript anzeigen

    • Offizieller Beitrag

    Hi,
    kennt ihr sicher alle: Im Skript sind einige Farben. Nach einiger Zeit guckt ihr rein, habt auch anhand der Werte eine grobe Vorstellung ob Richtung blau oder rot, aber gerne würde man schon genau sehen, was man da für Werte gesetzt hat.
    Das folgende Lua-Skript setzt bei Aufruf einen leeren Calltip über den Hexwert, indem der Cursor steht. Der Hintergrund des Calltipps ist in der Farbe des Hexwertes eingefärbt.

    EDIT: Jetzt zusätzlich auch Erkennung von Html-Hex-Farbcode "#12AB34"

    EDIT-2: Es ist besser, die Funktion nicht an au3-Code zu koppeln. Dann kann man z.B. auch die Farbwerte in den Farbschemata der .properties ansehen.
    Dazu in allen Einträgen ändern von command.13.*.au3=... zu command.13.*=...

    EDIT-3: Mir ist eingefallen, dass man öfter mal testen möchte, wie ein bestimmte Schriftfarbe auf einem farbigen Hintergrund aussieht. Dazu habe ich jetzt dieses Skript ergänzt und eine weitere Funktion PreviewBackForeColor erstellt.
    Diese Funktion sucht aus der Zeile, in der der Cursor steht, die ersten 2 Hex-Farbwerte und wertet diese als Backcolor und ForeColor. Man kann die Funktion auch mit einem Bool-Flag = true aufrufen (Standard false), dann wird die erste Farbe als ForeColor und die zweite als BackColor interpretiert. Wird nur eine Farbe gefunden, wird diese als Standard für BackColor, mit Flag für ForeColor verwendet. Die fehlende ForeColor wäre dann standardmäßig schwarz und mit Flag die fehlende BackColor die Standard GUI-Hintergrundfarbe (0xF0F0F0).

    EDIT-4 [2018-01-11]: Jetzt lassen sich auch die Farben von Farb-Variablen anzeigen, sofern diese im Skript oder in einem in diesem Skript aufgeführten Include zugewiesen werden. Eine rekursive Suche nach Include im Include erfolgt aber nicht! Nur im Skript aufgeführte Dateien werden auch durchsucht.

    Die Zuweisungen müssen jeweils in einer Zeile erfolgen. ACHTUNG: Es wird nicht auf Kommentarzeile geprüft, die erste Zuweisung im Skript wird ausgelesen, auch wenn sie innerhalb eines Kommentars steht!

    Die Zuweisung selbst darf keine Variablen enthalten. Danach zu suchen wäre nicht realisierbar (z.B. wenn eine Variable aus einer INI-Datei befüllt wird, oder mit einem anderen Wert, der erst zur Laufzeit des Skripts entsteht.)

    Zuweisungen können aber auch durch Funktionen (aus dem Skript oder den Includes) erfolgen (s. Bsp. von Bitnugger hier), sofern die Funktionen nicht mit Variablen aufgerufen werden.

    Zur Zuweisungssuche in den Includes, ist ein Eintrag in SciTEUser.properties erforderlich, ansonsten werden nur Zuweisungen im Skript berücksichtigt.

    Get.Color.Assignment.Includes=1

    Nachtrag:

    Das Problem mit den Func-Calltips konnte ich nun lösen. Version 0.5

    EDIT-5 [2018-01-12]: Ich habe nochmal ordentlich dran geschraubt. Zum Überwachen von Maus und Tastatur (löst Verschwinden des Calltips aus) hatte ich eine Klassenfunktion benötigt. In diese habe ich jetzt alle anderen Funktionen integriert. Im Ablauf habe ich noch Einiges optimiert, deshalb ist es auch erforderlich, das Skript vor dem Aufruf zu Speichern, bzw. im Aufruf "savebefore:yes" zu hinterlegen. Siehe Installationsanweisung im Skript.

    • Jetzt werden Zuweisungen in Kommentarzeilen oder -blöcken ignoriert.

    • Ein Fehler war noch enthalten beim Lesen von Includes mit kpl. oder relativer Pfadangabe. Ist jetzt gefixed.

    • Das Suchen nach Zuweisungen in Includes ist jetzt standardmäßig aktiviert. Nur wer das nicht möchte muss den Eintrag anlegen

    Get.Color.Assignment.Includes=0

    • Die Standardeinstellungen für Calltips werden gespeichert (dafür gibt es eine Property, die vermutlich kaum jemand nutzt) und nach jedem Color-Calltip wiederhergestellt

    aktuelle Version: v0.6

    EDIT-6 [2018-01-13]: Bug bei Includes für das temporäre au3-Skript gefixed.

    EDIT-7 [2018-01-16]: Noch eine kleine Änderung:

    Sind im Skript Includes auskommentiert, werden diese jetzt nicht mehr berücksichtigt. Ansonsten habe ich das Skript nochmals etwas umgebaut, hat aber keinen Einfluß auf die Funktionalität, ich wollte es nur "schöner" haben. ;)

    Wenn ihr also mit der v0.7 zufrieden seid, ist die Installation der v0.8 nicht zwingend.

    EDIT-8 [2018-02-20]: In der v0.8 war noch ein Fehler bei der Erkennung von Variablen aus einem Include im Skriptverzeichnis.

    aktuelle Version: v0.9

    EDIT-9 [2018-02-22]:

    Fixed: Unerwartetes Verhalten, wenn bei Funktionsaufruf Cursor nicht in einem Hexwert steht

    Added: Erkennen von Hex-Werten ab Länge 1 Hex-Zeichen

    Added: Statt Standardverhalten zum Ausblenden des Calltip kann mit [Zeile 75] local bCALLTIP_END_ANYKEY = true der Tip bei jedem Tastendruck/ jeder Mausbewegung sofort ausgeblendet werden.

    aktuelle Version: v0.10


    Damit die Funktionen aus einem Skript geladen werden können, muss die Einbindung so erfolgen:


    Hier das aktuelle Skript:

    So schaut es aus:



    !! -- NEU -- !!

    • Offizieller Beitrag

    Im SciTeStartup.lua funktioniert LoadLuaFile("ShowHexColorFromCursor.lua") nicht.

    Im Skriptheader steht doch die Anweisung, wie du vorgehen musst.
    Einträge in der SciTEUser.properties.

    Code
    # 13 Show HexColor    --- 13 ist nur ein Bsp., es kann jede andere freie Nummer verwendet werden
    command.name.13.*.au3=Show Color From Cursor
    command.13.*.au3=dofile $(Lua.User.Scripts.Path)/ShowHexColorFromCursor.lua
    # oder: command.13.*.au3=dofile C:/Dein_Pfad/ShowHexColorFromCursor.lua
    command.mode.13.*.au3=subsystem:lua
    command.shortcut.13.*.au3=Ctrl+Shift+F11
  • Mir ist gerade aufgefallen, dass es bei Farben denen eine Variable zugewiesen ist (z. B. $COLOR_RED) nicht funktioniert.

    Der Cursor steht über $COLOR_RED statt 0xFF0000.

  • Mir ist gerade aufgefallen, dass bei Farben denen eine Variable zugewiesen ist (z. B. $COLOR_RED) es nicht funktioniert.

    ... , dass bei Variablen, denen eine Farbe zugewiesen ist... 8o


    Dazu müsste der Wert der Variable ermittelt werden... und das könnte evtl. schwierig werden, wenn das Script nicht läuft. ;)

    AutoIt
    Local $COLOR_RED = '0x' & Hex(Mod(@SEC, 2) ? Random(0,0x000FFF, 1) : Random(0x001000, 0xFFF000, 1), 8)
    • Offizieller Beitrag

    Allerdings werden jetzt die Call-Tips auch gefärbt.

    Oops, da ist meiner Meinung nach ein Fehler in den Calltipps. Dort geht man wohl davon aus, dass niemand die SCI_CALLTIPSET... Funktionen verwendet und ruft sie nur auf ohne die Farbe zu setzen. Somit wird die zuletzt verwendete Farbe genutzt.

    Mal suchen, ob ein Event existiert, wenn der Calltip verschwindet. Dann würde ich daran koppeln, das die Farbe zurückgesetzt wird. - Ich versuche das mal zu ergründen.

    Edit:

    So, wie ich vermutet habe: Eine ziemlich idiotische Umsetzung der Calltips.

    In der Annahme, dass Calltips ausschliesslich für die Infos zu Funktionen genutzt werden, werden die Farben für die Calltips bei jedem Öffnen/Wechseln eines Tabs im Editor geladen.

    Durch mein Skript wird der Calltip entsprechend des gefundenen Wertes eingefärbt. Wird danach ein Funktions-Calltip angezeigt, greift er auf die jetzt aktuellen Einstellungen zu.

    Ich schaue mal, wie ich das am einfachsten lösen kann.

  • Hab mal Version 0.6 getestet.

    Bei einfachen Beispielen funktioniert es.

    Mit dem folgenden wird jedoch das Skript gestartet und mehr nicht.

    Spoiler anzeigen
    • Offizieller Beitrag

    Oops, da wollte ich besonders clever sein, und statt dem Einbinden aller Includes (in die Temp.au3, die den Farbwert ermittelt) aus dem Skript das Skript selbst einbinden - nicht bedacht habe ich, dass die Datei dabei ja ausgeführt wird. :Face:

    Das korrigiere ich mal fix.