Fino ad ora, tutti i nostri script hanno effettuato operazioni durante la fase di avvio. Questo è di utilità limitata e non ci permette di reagire alle azioni dell’utente. Per fare operazioni più avanzate abbiamo bisogno di registrare una funzione che verrà chiamata da un dato evento. L’evento più comune a cui reagire è una scorciatoia da tastiera.
Adesso avvia Ansel, vai a “preferenze > scorciatoie > lua > Una scorciatoia che stampa i suoi parametri”, assegnagli una scorciatoia e provalo. Dovresti vedere un simpatico messaggio stampato a schermo.
Ora guardiamo in dettaglio al codice. Prima definiamo una funzione che prende due stringhe come parametri di input. La prima è il tipo di evento innescato (“shortcut”) e il secondo è il nome della scorciatoia (“Una scorciatoia che stampa i suoi paramtri”). La funzione stessa chiama Ansel.print
, che stamperà il messaggio in sovrapposizione alla finestra principale.
Dopo che la funzione è definita, la registriamo come un callback per la scorciatoia. Per farlo chiamiamo Ansel.register_event
che è una funzione generica per tutti i tipi di eventi. Gli stiamo dicendo che stiamo registrando un evento scorciatoia, e gli stiamo fornendo il callback da chiamare e, finalmente, gli stiamo dando la stringa da usare per descrivere la scorciatoia nella finestra delle preferenze.
Cerchiamo ora di provare una scorciatoia che sia un poco più interattiva. Questa guarderà a tutte le immagini a cui l’utente è al momento interessato (selezionate o con il mouse sopra) e incrementerà la loro valutazione:
A questo punto, gran parte del codice non dovrebbe avere bisogno di spiegazioni. Giusto un paio di note:
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:
Questo è il modo di lua di riportare errori. Abbiamo provato ad assegnare 6 stelle ad un’immagine, ma la valutazione può arrivare solo fino a 5. Sarebbe molto semplice aggiungere un controllo, ma invece seguiamo la via più ardua e catturiamo l’errore:
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("could not increase rating of image "..
9 tostring(v).." : "..message)
10 end
11 end
12end,"Increase the rating of an image")
pcall
eseguirà il primo argomento e catturerà qualsiasi eccezione lanciata. Se non ci sono eccezioni restituirà true
e anche qualsiasi altro risultato restituito dalla funzione. Se c’è invece un’eccezione restituirà false
e il messaggio di errore dell’eccezione. Semplicemente verifichiamo questi risultati e li stampiamo sulla console.