Bisher haben alle Skripte irgendwelche Dinge beim Start ausgeführt. Das ist von begrenztem Nutzen und erlaubt es nicht, auf Nutzeraktionen zu reagieren. Um anspruchsvollere Sachen zu tun, benötigen wir Funktionen, die auf ein bestimmtes Ereignis reagieren. Und das üblichste Ereignis ist ein Kurzbefehl.
Nun starte Ansel, gehe zu “Ansel-Voreinstellungen > Kurzbefehle > lua > Kurzbefehl, der seine Parameter druckt”, weise einen Kurzbefehl zu und probiere ihn aus. Eine schöne Meldung sollte auf dem Bildschirm erscheinen.
Lass uns den Code genauer ansehen. Wir definieren zuerst eine Funktion mit zwei Zeichenketten (Strings) als Eingabeparameter. Die erste ist der Typ des augelösten Ereignisses (“shortcut”) und der zweite ist der Name des Kurzbefehls (“Kurzbefehl, der seine Parameter druckt”). Die Funktion selber ruft Ansel.print
auf, was die Meldung auf dem Bildschirm einblendet (als Overlay).
Wenn die Funktion definiert ist, wird diese als Callback eines Kurzbefehls registiert. Dazu wird Ansel.register_event
aufgerufen, die eine generische Funktion für alle Typen von Ereignissen ist. Wir teilen ihr mit, dass wir ein Kurzbefehl-Ereignis registrieren, dann geben wir den Callback für Aufruf an und schließlich definieren wir die Zeichenkette, die als Beschreibung für den Kurzbefehl in den Voreinstellungen erscheinen soll.
Nun probieren wir einen Kurzbefehl aus, der etwas mehr interaktiv ist. Dieser schaut nach Bildern, die den Nutzer gerade interessieren (die ausgewählt oder unter dem Mauszeiger sind) und erhöht deren Bewertung:
Für jetzt, sollte das meiste dieses Codes selbsterklärend sein. Nur noch einige Notizen:
Instead of declaring a function and referencing it, we declare it directly in the call to
Ansel.register_event
this is strictly equivalent but slightly more compact.image.rating
is a field that gives the star rating of any image (between 0 and 5 stars, -1 means rejected).Ansel.gui.action_images
is a table containing all the images of interest. Ansel will act on selected images if any image is selected, and on the image under the mouse if no image is selected. This function makes it easy to follow Ansel’s UI logic in lua.
If you select an image and press your shortcut a couple of times, it will work correctly at first but when you have reached five stars, Ansel will start showing the following error on the console:
Das ist die Art, wie Lua Fehler rapportiert. Wir haben versucht eine Wertung von 6 an ein Bild zu vergeben, aber eine Wertung kann nur bis 5 gehen. Es würde einfach sein, eine Kontrolle einzubauen, aber gehen wir doch stattdessen den komplizierteren Weg:
1Ansel.register_event("shortcut",function(event,shortcut)
2 local images = Ansel.gui.action_images
3 for _,v in pairs(images) do
4 result,message = pcall(function()
5 v.rating = v.rating + 1
6 end)
7 if not result then
8 Ansel.print_error("Kann die Bewertung des Bildes "..
9 tostring(v).." nicht erhöhen: "..message)
10 end
11 end
12end,"Erhöhe die Bewertung eines Bildes")
pcall
wird das erste Argument durchprüfen und jede Abweichung feststellen. Falls es keine Abweichung findet, wird es true
zurückgeben plus jedes Resultat, das die Funktion ergibt. Wenn es eine Abweichung gibt, wird false
und die Fehlermeldung der Abweichung. Die Resultate des Tests werden auf dem Gerät ausgedruckt.