Beiträge von BugFix

    die ich mittig auf dem Bildschirm platzieren möchte. Dafür nutze ich den Optionsparameter "2" (Center the tip at the x,y coordinates instead of using them for the upper left corner) und es klappt wie erwartet.

    Das hast du total falsch verstanden.

    Das Zentrieren bezieht sich auf den Text IM TOOLTIP!! und nicht auf die Platzierung auf dem Bildschirm, dafür sind Koordinaten erforderlich. Mit dem Default-Keyword statt der Koordinaten wird der Tip in der Nähe des Mauszeigers angezeigt.


    Edit: Nochmal deutlicher:

    Normal: die linke untere Ecke des Tooltip wird auf die x,y - Koordinaten gesetzt.

    $TIP_CENTER: die Mitte des Tooltip wird an die x,y - Koordinate gesetzt


    Edit_2:

    Mit einer eigenen (gekapselten) ToolTip Funktion kann man das recht elegant lösen:

    $TIP_FORCEVISIBLE wird außer bei Anzeige in der Mitte immer benötigt. Falls die Option $TIP_CENTER verwendet wird, könnte sonst der Tip ausserhalb des Bildschirmes dargestellt werden. Das wird so verhindert.

    habe dazu was getippt, um an den Style zu kommen

    Da hast du mich falsch verstanden. Den Style an einer bestimmten Position des Editors kann man mit den Api-Funktionen auslesen:

    editor.StyleAt[position]

    Aber man kann nicht abfragen, welchen Style au3 oder lua für comment.box verwenden (bei AutoIt: 2, bei Lua: 1).

    Sofern das nur für AutoIt und Lua genutzt wird, ist das OK. Vielleicht mache ich das, indem ich die Togglefunktion nur für SciTE und Lua aktiv schalte.

    Wenn nichts markiert wurde, sollte es egal sein, wo das Caret steht, solange es sich in einer Start-/Endzeile oder sonstwo innerhalb eines Kommentarblocks befindet, um den Kommentarblock wieder zu entfernen.

    Das halte ich nicht für sehr sinnvoll. Wenn zuviel Möglichkeiten sind, sind zuviel Fehlinterpretationen möglich. "Der Cursor muss in seiner Zeile oder einer der folgenden Zeilen comment.start finden". Das entspricht auch unserem visuellen Vorgehen: Von oben nach unten.

    Die Position innerhalb eines Kommentarblocks zu erkennen, kann ich zwar sicher für Lua und AutoIt (weil ich da weiß, welcher Style jeweils verwendet wird), aber eben nicht allgemeingültig, weil nirgendwo ausgelesen werden kann, welchen Style der jeweilige Dateityp für Blockkommentare nutzt. Das ist in der Lexer.dll definiert. In den Properties sieht man das nur anhand der Kommentare, die aber auch unterschiedlich und somit nicht zuverlässig sind.

    Wo ich noch mitgehen könnte: Cursor vor/in comment.start Zeile oder in comment.end Zeile

    Allerdings wäre das nicht mehr kongruent in der Anwendungsweise, dann sollte man lieber sagen: in comment.start Zeile oder in comment.end Zeile

    Was meinst du?


    Wenn sich in der Selektion eine Start-/Endzeile befindet, jedoch kein Gegenstück dazu, sollte das als Fehler gewertet und kein Kommentarblock erzeugt werden.

    Ähm, der Anwender hat also ohne Sinn und Verstand ein einzelnes #cs oder #ce in sein Skript geklatscht und das soll ich abfangen? In kleinen Skripten könnte man das tun, aber stell dir mal ein paar tausend Zeilen Code vor. Es muss das gesamte Skript vom Anfang bis zur Cursorposition gescannt werden um die korrelierenden start-end Zuordnungen zu erhalten. Das halte ich nicht für erstrebenswert. Etwas an Denkprozessen darf man ruhig auf den Anwender übertragen. :whistling:


    Ich denke, comment.box.middle ist nicht dazu gedacht, um Einrückungen zu definieren, sondern um dem Kommentar ein oder mehrere druckbare Zeichen voranzustellen.

    OK, da kann ich mitgehen.


    Anhand folgender Properties kann bestimmt werden, ob bzw. wie comment.box.middle eingerückt wird:

    Ja OK. Doch trotzdem muss an irgendeiner Stelle definiert werden: Ja, ich will (auch Kommentarblöcke) einrücken oder eben nicht. Denn ich kann ja nicht vom Anwender unabhängig einfach festlegen, dass eingerückt wird. Also ist zumindest eine weitere Property erforderlich, z.B. comment.box.indent.filepattern=0/1

    comment.box.tab.alternation=@Tab ; <== Für diese Variable erkenne ich auch bei aller Anstrengung keinen Mehrwert!

    Da nur sichtbare Zeichen als Property gesetzt werden können, muss der Anwender über ein Ersatzzeichen mitteilen, dass ein Tab zur Anwendung kommen soll.

    Ich hätte auch festschreiben können: Soll ein Tab als box.middle verwendet werden so muss als Zeichen dafür "T" verwendet werden. In diesem Fall wäre die Property tatsächlich überflüssig.

    Da ich aber dem Anwender freie Wahl bei der Definition für seine Tab-Variable ermöglichen will ("@TAB", "tab", "BunteKuh",...) muss für den Fall, dass Tab verwendet werden soll das/die entsprechende/n Zeichen dort definiert werden und in box.middle wird darauf verwiesen: comment.box.middle.au3=$(comment.box.tab.alternation)

    Im Skript prüfe ich:

    comment.box.middle. nicht-leer ? --> comment.box.middle == comment.box.tab.alternation ? --> OK, TAB soll als box.middle verwendet werden.

    ...und das passiert dann damit... das Exit hinter #CE ist zu viel und das Exit darüber dürfte nicht mit im Kommentarblock sein!

    Du hast sowas von Recht, und ich bin froh dich als Tester zu haben. :thumbup:

    Ich hatte zwar im Vorfeld alle möglichen (und vor allem unmöglichen :D ) Markierungsvarianten überlegt, aber dann 2 vergessen umzusetzen:

    Das ist nun korrigiert. (poste es gleich)


    NEU v 0.8 - s. Post #1


    - Start-/Endmarkierung mitten in der jeweiligen Zeile (Zeile gehört zum Block)

    - Endmarkierung in nicht leerer Zeile am Anfang (Zeile gehört nicht zum Block)

    Wie heißen denn Lua-Dateien, in die man Funktionen schreibt, die dann in anderen Lua-Dateien mit "requiere" eingebunden werden

    Das kommt drauf an. Schreibst du ein Modul, dann ist es ein Modul. Schreibst du eine Library, dann ist es eine Library.

    Die Unterscheidung ist auf den ersten Blick nicht so deutlich.

    Eine Bibliothek stellt i.A. eine Funktionssammlung dar (OHKfuncs.lua ist eine Bibliothek mit dem Globalen Table OHK, auf das nach dem Laden aus allen Skripten zugegriffen werden kann). Die Funktionen können aber ebensogut einzeln in der Datei vorhanden sein (nicht in einem Table)

    Ein Modul ist an sich auch eine Bibliothek - aber mit einem Unterschied: Alle Funktionen werden in einem lokalen Table erstellt. Dieses Table wird dann am Ende der Datei exportiert:


    -- z.B. "MeinModul.lua"

    local MeinModul = {

    f1 = function() .... end,

    f2 = function() .... end,

    f3 = function() .... end,

    ...

    }

    return MeinModul


    Schau mal ins Modul-Tutorial.

    Können Funktionen in anderen Lua-Scripts mit "requiere" benutzt werden, die in der eingebundenen Bibliothek mit "local" deklariert wurden?

    Nur wenn sie als Modul erstellt wurden. Alles was lokal ist, kann in anderen Dateien nicht erkannt werden, wenn es nicht exportiert wird.

    Übrigens nicht unwichtig: Im Gegensatz zu AutoIt sind Schleifenvariablen auch lokal. Man braucht sie zwar nicht deklarieren, aber ausserhalb der Schleife existieren sie nicht mehr.

    Was ist der Unterschied zwischen requiere "MyModule", LoadLuaFile("MyModule.lua") und LoadUserLuaFile('MyModule.lua')?

    LoadLuaFile und LoadUserLuaFile machen beide dasselbe: dofile

    Die beiden Funktionen verwenden nur einen vordefinierten Pfad (bzw den Pfad als Zusatzparameter mit Default-Wert), sodass nur der Dateiname übergeben werden muss.

    LoadUserLuaFile hatte ich erstellt um damit direkt eigene Dateien nur mit Angabe des Dateinamens aus dem Lua.User.Scripts.Path zu laden.

    Der Unterschied zu require? - Lies selbst:


    Lua offers a higher-level function to load and run libraries, called require. Roughly, require does the same job as dofile, but with two important differences. First, require searches for the file in a path; second, require controls whether a file has already been run to avoid duplicating the work. Because of these features, require is the preferred function in Lua for loading libraries.

    Setzte ich das Caret aber an den Anfang der zweiten Zeile, dann wurde ja eigentlich nur eine Zeile markiert.

    Eigentlich ist ein schönes Wort. :D

    Denn eigentlich hast du zwei Zeilen markiert - kann ja interpretiert werden als: da gehört jetzt noch eine Leerzeile in den Block und nur wenn die Markierung hinter dem Text endet, ist diese Zeile allein gemeint. ;)

    Ich will aber sowieso noch ein paar Erweiterungen vornehmen, kümmere ich mich am WE drum.

    Meinst du damit, es ist besser ein Table lokal zu deklarieren? Z.B. in "MeinModul.lua" local MyMod = {}?

    Ja. Was du nicht als lokal deklariert hast, landet in _G, dem Globalen Table. Die Suche nach Variablen, Funktionen ist immer:

    - im aktuellen Chunk (Funktion oder do... end - Bereich)

    - im Skript

    - in eingebundenen Modulen

    und zum Schluß im Globalen Table. Somit werden lokale Deklarationen am Schnellsten gefunden.

    Du wirst in vielen Skripten z. B. die Lokalisierung nativer Funktionen finden. lokal string = string

    Das bringt wieder ein paar Millisekunden. ;)

    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.

    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

    Das # kommentiert doch in den properties files die Zeile aus, also wieso interessiert es Lua, was in der auskommentierte Zeile steht?

    In Properties ja, du hast aber dort eine Zeile reinen Lua-Codes mit # verunreinigt.

    dostring ist der Beginn von Lua-Code. Dort darfst du nicht auskommentierte!

    Machst du das wirklich? Schreibst du dort längeren Code und sendest den dann an deinen PC, um den Code dort auszuführen?

    Meinen Code brauch ich nicht hin- und herschicken, der ist in der "Wolke" ^^.

    Oft habe ich, wenn ich gerade ins Bett gegangen bin eine Idee zu irgendeinem Problem. Jetzt greif ich einfach zum Tablet neben meinem Bett und kann das erfassen, bevor ich es am nächsten Morgen vielleicht nicht mehr weiß.

    Für Nim und Lua habe ich sogar die Möglichkeit den Code am Tablet im Browser auszuführen (sofern es um Standardbibliotheken geht).

    Also ich setze mich jetzt nicht hin und entwickle Projekte am Tablet. Das ist dann doch etwas zu fiktiv. Aber für den o. a. Zweck eignet sich das ganz gut.

    Bitte wie starte ich genau das Programm mit deinen Script zusammen.

    Das Skript ist von 2007. Da dürfte der Zahn der Zeit dran genagt haben, habe nicht näher reingesehen - aber es arbeitet mit dem Programm "mp3DirectCut" (musst du also installieren) und steuert dieses mit ControlCommand/Send und auch mit Pixel-Gedöns. Ich denke, dafür gibt es mittlerweise andere Programme/Bibliotheken, die auch entsprechend in AutoIt angesteuert werden können.