Dotychczas nasze skrypty wykonywały jedynie akcje przy starcie programu. Nie jest to bardzo użyteczne i nie pozwala na odpowiedź wobec faktycznych czynności użytkownika. Do wykonania bardziej zaawansowanych rzeczy będziemy potrzebować rejestracji funkcji, która zostanie wywołana w reakcji na określone zdarzenie. Najczęstszym zdarzeniem jest reakcja na wciśnięcie skrótu klawiszowego.
Uruchom Ansel, przejdź do “ustawienia > skróty > lua > Skrót, który wypisuje swoje parametry”, przypisz skrót klawiszowy i wypróbuj go. Powinieneś zobaczyć ładną wiadomość, wypisaną na ekranie.
Rzućmy okiem na kod. Najpierw definiujemy dwa łańcuchy znakowe jako parametry wejściowe. Pierwszy to typ wyzwalanego zdarzenia (“shortcut”), a drugi to nazwa skrótu (“Skrót, który wpisuje swoje parametry”). Sama funkcja wywołuje Ansel.print
, które wypisze komunikat jako nakładkę w głównym oknie.
Po zdefiniowaniu funkcji rejestrujemy ją jako wywołanie zwrotne skrótu. W tym celu wywołujemy Ansel.register_event
, będące ogólną funkcją dla wszystkich typów zdarzeń. Informujemy ją, że rejestrujemy zdarzenie skrótu, przekazujemy wywołanie zwrotne, a na koniec przekazujemy łańcuch znakowy dla opisu skrótu w oknie ustawień.
Wypróbujmy teraz skrót nieco bardziej interaktywny. W tym przykładzie wybierzemy zdjęcia, którymi użytkownik jest zainteresowany (wybrane lub pod kursorem) i zwiększymy ich ocenę.
Kod nie wymaga komentarza. Parę uwag dodatkowych:
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:
W ten sposób lua raportuje błędy. Spróbowaliśmy przyznać zdjęciu sześć gwiazdek, ale maksymalna ocena może wynosić tylko 5. Sprawdzenie tego byłoby trywialne, ale zróbmy to w nieoczywisty sposób i przechwyćmy błąd.
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("nie można zwiększyć oceny zdjęcia "..
9 tostring(v).." : "..message)
10 end
11 end
12end,"Zwiększ ocenę zdjęcia")
pcall
uruchamia pierwszy argument i przechwytuje każdy rzucony wyjątek. Jeśli wyjątek nie wystąpił, zwraca true
i dowolny wynik, zwrócony przez funkcję. Jeśli wyjątek wystąpił, zwraca false
i informację o błędzie z wyjątku. Testujemy po prostu te przypadki i wypisujemy je na konsolę.