3.4. Το πρώτο σας σενάριο Script-Fu
| 3. Μάθημα Script-Fu |

### 3.4. Το πρώτο σας σενάριο Script-Fu

Χρειάζεστε να σταματήσετε και να πάρετε μια βαθιά αναπνοή; Όχι; Λοιπόν τότε, ας προχωρήσουμε με το τέταρτο μάθημα — το πρώτο σας σενάριο Script-Fu.

#### 3.4.1. Δημιουργία του σεναρίου πλαισίου κειμένου

Μια από τις πιο συνηθισμένες λειτουργίες που εκτελώ στο GIMP είναι η δημιουργία ενός πλαισίου με κάποιο κείμενο σε αυτό για μια ιστοσελίδα. Όμως, δεν ξέρετε ποτέ πόσο μεγάλη να κάνετε την αρχική εικόνα, όταν ξεκινάτε. Δεν ξέρετε πόσο χώρο το κείμενο θα καταλάβει το κείμενο με τη γραμματοσειρά και το μέγεθος της γραμματοσειράς που θέλετε.

Ο ειδικός του Script-Fu (και ο σπουδαστής) θα καταλάβουν σύντομα, ότι αυτό το πρόβλημα μπορεί να λυθεί εύκολα και να αυτοματοποιηθεί με το Script-Fu.

Θα δημιουργήσουμε, συνεπώς, ένα σενάριο, που λέγεται πλαίσιο κειμένου, το οποίο δημιουργεί μια εικόνα με σωστό μέγεθος για να ταιριάξει εφαρμοστά γύρω από τη γραμμή του κειμένου που εισάγει ο χρήστης. Θα αφήσουμε επίσης το χρήστη να επιλέξει γραμματοσειρά, μέγεθος γραμματοσειράς και χρώμα κειμένου.

#### 3.4.2. Επεξεργασία και αποθήκευση των σεναρίων σας

Μέχρι τώρα, δουλέψαμε στην κονσόλα του Script-Fu. Τώρα, όμως, πρόκειται να αλλάξουμε σε επεξεργασία αρχείων κειμένου σεναρίου.

Πού θα βάλετε τα σενάριά σας είναι θέμα προτίμησης — εάν έχετε πρόσβαση στον προκαθορισμένο κατάλογο σεναρίων του GIMP, μπορείτε να τοποθετήσετε τα σενάρια σας εκεί. Όμως, προτιμώ να κρατώ τα προσωπικά μου σενάρια στον δικό μου κατάλογο σεναρίων, για να κρατώ ξεχωριστά από τα σενάρια που είναι προεγκαταστημένα.

Στον κατάλογο `.gimp-2.8`, που το GIMP έκανε στον προσωπικό σας κατάλογο, θα πρέπει να βρείτε έναν κατάλογο που ονομάζεται `scripts`. Το GIMP θα κοιτάξει αυτόματα στον κατάλογο σας `.gimp-2.8` για έναν κατάλογο `scripts` και θα προσθέσει τα σενάρια σε αυτόν τον κατάλογο στη βάση δεδομένων του Script-Fu. Θα πρέπει να τοποθετήσετε τα προσωπικά σας σενάρια εδώ.

#### 3.4.3. Τα απολύτως αναγκαία

Κάθε σενάριο Script-Fu ορίζει τουλάχιστον μια συνάρτηση, που είναι η κύρια συνάρτηση του σεναρίου. Εδώ είναι που εργαζόσαστε.

Κάθε σενάριο πρέπει επίσης να καταχωρείται στην διαδικασιακή βάση δεδομένων, έτσι ώστε να την προσπελάσετε μέσα από το GIMP.

Θα ορίσουμε την κύρια συνάρτηση πρώτα:

            (define (script-fu-text-box inText inFont inFontSize inTextColor))

Εδώ, ορίσαμε μια νέα συνάρτηση που λέγεται `script-fu-text-box`, η οποία δέχεται τέσσερις παραμέτρους, που αργότερα θα αντιστοιχούν σε κάποιο κείμενο, μια γραμματοσειρά, το μέγεθος της γραμματοσειράς και το χρώμα του κειμένου. Η συνάρτηση είναι προς το παρόν άδεια και έτσι δεν κάνει τίποτα. Μέχρι εδώ, καλά — τίποτα νέο, τίποτα φανταχτερό.

#### 3.4.4. Συμβάσεις ονομασίας

Οι συμβάσεις ονομασίας του Scheme φαίνεται να προτιμούν τα μικρά γράμματα με ενωτικές παύλες, που ακολούθησα στην ονομασία της συνάρτησης. Όμως, απομακρύνθηκα από τη σύμβαση με τις παραμέτρους. Μ' αρέσουν πιο περιγραφικά ονόματα για τις παραμέτρους και τις μεταβλητές μου και έτσι προσέθεσα το πρόθεμα "in" στις παραμέτρους, έτσι που να μπορώ γρήγορα να δω ότι είναι τιμές που πέρασαν στο σενάριο, παρά ότι δημιουργήθηκαν μέσα σε αυτό. Χρησιμοποίησα το πρόθεμα "the" για μεταβλητές που ορίζονται μες το σενάριο.

Είναι σύμβαση του GIMP να ονομάζει τις συναρτήσεις σεναρίων σας `script-fu-abc`, επειδή τότε, όταν καταχωρούνται στην διαδικασιακή βάση δεδομένων, όλες εμφανίζονται κάτω από το script-fu, όταν καταγράφετε τις συναρτήσεις. Αυτό επίσης βοηθά να διακρίνονται από τα πρόσθετα.

#### 3.4.5. Καταχώρηση της συνάρτησης

Τώρα, ας καταχωρήσουμε τη συνάρτηση με το GIMP. Αυτό γίνεται καλώντας τη συνάρτηση `script-fu-register`. Όταν το GIMP διαβάζει σε ένα σενάριο, θα εκτελέσει αυτή τη συνάρτηση, που καταχωρεί το σενάριο με τη διαδικασιακή βάση δεδομένων. Μπορείτε να τοποθετήσετε αυτήν την κλήση της συνάρτησης όπου θέλετε στο σενάριο σας, αλλά συνήθως την τοποθετώ στο τέλος, μετά από όλον τον υπόλοιπο κώδικα μου.

Να η λίστα για καταχώρηση αυτής της συνάρτησης (Θα εξηγήσω όλες τις παραμέτρους της σε λίγο):

      (script-fu-register
        "script-fu-text-box"                        ;func name
        "Text Box"                                  ;menu label
        "Creates a simple text box, sized to fit\
          around the user's choice of text,\
          font, font size, and color."              ;description
        "Michael Terry"                             ;author
        "copyright 1997, Michael Terry;\
          2009, the GIMP Documentation Team"        ;copyright notice
        "October 27, 1997"                          ;date created
        ""                     ;image type that the script works on
        SF-STRING      "Text"          "Text Box"   ;a string variable
        SF-FONT        "Font"          "Charter"    ;a font variable
        SF-ADJUSTMENT  "Font size"     '(50 1 1000 1 10 0 1)
                                                    ;a spin-button
        SF-COLOR       "Color"         '(0 0 0)     ;color variable
      )
      (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")

Εάν αποθηκεύσετε αυτές τις συναρτήσεις σε ένα αρχείο κειμένου με επίθεμα `.scm` στον κατάλογο σας σεναρίων, τότε επιλέξτε Φίλτρα → Script-Fu → Ανανέωση σεναρίων, αυτό το νέο σενάριο θα εμφανιστεί ως Αρχείο → Δημιουργία → Κείμενο → Πλαίσιο κειμένου.

Εάν καλέσετε αυτό το νέο σενάριο, δεν θα κάνει τίποτα, φυσικά, αλλά μπορείτε να δείτε τις προτροπές που δημιουργήσατε, όταν καταχωρήσατε το σενάριο (περισσότερες πληροφορίες για το τι κάναμε καλύπτονται πιο κάτω).

Τελικά, εάν καλέσετε τον περιηγητή διαδικασίας(Βοήθεια → Περιηγητής διαδικασίας), θα σημειώσετε ότι το σενάριό μας τώρα εμφανίζεται στη βάση δεδομένων.

#### 3.4.6. Βήματα για καταχώρηση του σεναρίου

Για να καταχωρήσετε το σενάριό μας με το GIMP, καλούμε τη συνάρτηση `script-fu-register`, συμπληρώνουμε τις εφτά απαιτούμενες παραμέτρους και προσθέτουμε τις παραμέτρους του δικού μας σεναρίου, μαζί με μια περιγραφή και προεπιλεγμένη τιμή για κάθε παράμετρο.

Οι απαιτούμενες παράμετροι

- Το όνομα της συνάρτησης που ορίσαμε. Αυτή είναι η καλούμενη συνάρτηση, όταν καλείται το σενάριο μας (το σημείο εισόδου στο σενάριο μας). Αυτό είναι απαραίτητο επειδή μπορούμε να ορίσουμε επιπρόσθετες συναρτήσεις μες το ίδιο αρχείο και το GIMP χρειάζεται να ξέρει ποια από αυτές τις συναρτήσεις να καλέσει. Στο παράδειγμα μας, ορίσαμε μόνο μία συνάρτηση, πλαίσιο κειμένου, που καταχωρήσαμε.

- Η τοποθεσία στο μενού όπου το σενάριο θα εισαχθεί. Η ακριβής τοποθεσία του σεναρίου ορίζεται όπως μια διαδρομή στο Unix, με το διαχειριστή της διαδρομής να είναι το μενού της εικόνας `<Image>`.[6]

  Εάν το σενάριο σας δεν επενεργεί σε μια υπάρχουσα εικόνα (και έτσι δημιουργεί μια νέα εικόνα, όπως το σενάριο μας πλαίσιο κειμένου), θα θέλετε να το εισάγετε στο μενού παραθύρου της εικόνας, που μπορείτε να προσπελάσετε μέσα από τη γραμμή μενού εικόνας, δεξιοπατώντας στο παράθυρο εικόνας, πατώντας το εικονίδιο του κουμπιού μενού στην πάνω αριστερή γωνία του παραθύρου εικόνας, ή πιέζοντας F10.

  Εάν το σενάριο σας προβλέπεται να εκτελεστεί σε μια εικόνα που έχει επεξεργαστεί, θα θέλετε να το εισάγετε στο μενού του παραθύρου εικόνας. Το υπόλοιπο του μονοπατιού στρέφεται στις λίστες μενού, στα μενού και στα υπομενού. Έτσι, καταχωρίσαμε το σενάριο πλαίσιο κείμενου στο μενού κείμενο του μενού Δημιουργία του μενού Αρχείο.[7] (Αρχείο → Δημιουργία → Κείμενο → Πλαίσιο κειμένου).

  Εάν σημειώσατε, το υπομενού κείμενο στο μενού Αρχείο/Δημιουργία δεν ήταν εκεί, όταν ξεκινήσαμε — το GIMP δημιουργεί αυτόματα τα μενού που δεν υπάρχουν ήδη.

- Μία περιγραφή του σεναρίου σας, εμφανίζεται στον περιηγητή διαδικασίας.

- Το όνομά σας (ο συγγραφέας του σεναρίου).

- Πληροφορίες πνευματικών δικαιωμάτων.

- Η ημερομηνία δημιουργίας του σεναρίου, ή η τελευταία αναθεώρηση του σεναρίου.

- Οι τύποι των εικόνων του σεναρίου ενεργοποιούνται. Αυτό μπορεί να είναι οποιοδήποτε από τα παρακάτω: RGB, RGBA, ΓΚΡΙ, ΓΚΡΙ A, ΑΠΟ ΕΥΡΕΤΗΡΙΟ, ΑΠΟ ΕΥΡΕΤΗΡΙΟ Α. Ή μπορεί να μην είναι κανένα — στην περίπτωση μας, δημιουργούμε μια εικόνα και έτσι δεν χρειάζεται να ορίσουμε τον τύπο της εικόνας στον οποίο δουλεύουμε.

Σχήμα 13.4. Το μενού του σεναρίου σας.

#### 3.4.7. Καταχώρηση των παραμέτρων του σεναρίου σας

Αφού έχουμε καταγράψει τις απαιτούμενες παραμέτρους, τότε χρειαζόμαστε να καταγράψουμε τις παραμέτρους που αντιστοιχούν στις παραμέτρους που το σενάριο μας χρειάζεται. Όταν καταγράφουμε αυτές τις παραμέτρους, δίνουμε υποδείξεις όπως ποιος είναι ο τύπος τους. Αυτό είναι για το διάλογο που εμφανίζεται όταν ο χρήστης επιλέγει το σενάριο μας. Δίνουμε επίσης μια προεπιλεγμένη τιμή.

Αυτή η ενότητα της διαδικασίας καταχώρησης έχει την πιο κάτω μορφή:

Τύπος παραμέτρων | Περιγραφή | Παράδειγμα
--- | --- | ---
`SF-IMAGE` | Εάν το σενάριο σας ενεργεί σε μια ανοιχτή εικόνα, αυτό θα πρέπει να είναι η πρώτη παράμετρος μετά τις απαιτούμενες παραμέτρους. Το GIMP θα περάσει σε μια αναφορά προς την εικόνα αυτήν την παράμετρο. | 3
`SF-DRAWABLE` | Εάν το σενάριο σας ενεργεί σε μια ανοιχτή εικόνα, αυτό θα πρέπει να είναι η δεύτερη παράμετρος μετά την παράμετρο `SF-IMAGE`. Αναφέρεται στην ενεργή στρώση. Το GIMP θα περάσει σε μια αναφορά προς την ενεργή στρώση αυτήν την παράμετρο. | 17
`SF-VALUE` | Αποδέχεται αριθμούς και αλφαριθμητικά. Σημειώστε ότι παραθέσεις πρέπει να διαφεύγουν από το προεπιλεγμένο κείμενο, έτσι καλύτερα χρησιμοποιήστε `SF-STRING`. | 42
`SF-STRING` | Αποδέχεται αλφαριθμητικά. | "Κάποιο κείμενο"
`SF-COLOR` | Δείχνει ότι ένα χρώμα απαιτείται σε αυτήν την παράμετρο. | '(0 102 255)
`SF-TOGGLE` | Ένα πλαίσιο ελέγχου εμφανίζεται, για τη λήψη μιας τιμής Μπουλ. | TRUE ή FALSE

#### 3.4.8. Η παράμετρος API του Script-Fu[8]

| Σημείωση
Πέρα από τους πιο πάνω τύπους παραμέτρων, υπάρχουν περισσότεροι τύποι για τη διαδραστική κατάσταση, καθένας τους θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Θα βρείτε μια λίστα αυτών των παραμέτρων με περιγραφές και παραδείγματα στο σενάριο ελέγχου `plug-ins/script-fu/scripts/test-sphere.scm` που ήρθε με τον πηγαίο κώδικα του GIMP.

Τύπος παραμέτρων | Περιγραφή
--- | ---
`SF-ADJUSTMENT` | Δημιουργεί μια εφαρμογή ρύθμισης στο διάλογο. SF-ADJUSTMENT "ετικέτα" '(τιμή ελάχιστη μέγιστη αυξητικό_βήμα Αυξητική_σελίδα τύπος αριθμών) Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
τιμή | Εκτύπωση τιμής στην αρχή.
κατώτερη / ανώτερη | Η κατώτερη / ανώτερη τιμή (περιοχή επιλογής).
αυξητικό_βήμα | Τιμή αύξησης/μείωσης.
αύξηση_σελίδας | Τιμή αύξησης/μείωσης χρησιμοποιώντας το πλήκτρο σελίδας.
αριθμοί | Αριθμοί μετά την υποδιαστολή (δεκαδικό μέρος).
τύπος | Ένα από: SF-SLIDER ή 0, SF-SPINNER ή 1
`SF-COLOR` | Δημιουργία ενός χρωματιστού κουμπιού στο διάλογο. SF-COLOR "ετικέτα" '(κόκκινο πράσινο γαλάζιο) ή SF-COLOR "ετικέτα" "χρώμα" Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
'(κόκκινο πράσινο γαλάζιο) | Λίστα των τριών τιμών για κόκκινο, πράσινο και γαλάζιο συστατικό.
"χρώμα" | Όνομα χρώματος στη σημειογραφία CSS.
`SF-FONT` | Δημιουργεί μια εφαρμογή επιλογής γραμματοσειράς στο διάλογο. Επιστρέφει ένα όνομα γραμματοσειράς ως συμβολοσειρά. Υπάρχουν δύο νέες διαδικασίες κειμένου gimp για να διευκολύνουν τη χρήση της επιστρεφόμενης παραμέτρου: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) όπου γραμματοσειρά είναι το όνομα της γραμματοσειράς που παίρνετε. Το οριζόμενο μέγεθος στο όνομα της γραμματοσειράς αγνοείται σιωπηρά. Χρησιμοποιείται μόνο στον επιλογέα γραμματοσειράς. Έτσι σας ζητείται να το ορίσετε σε μια χρήσιμη τιμή (24 εικονοστοιχεία είναι μια καλή τιμή). SF-FONT "ετικέτα" "όνομα γραμματοσειράς" Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
"όνομα γραμματοσειράς" | Όνομα της προεπιλεγμένης γραμματοσειράς.
`SF-BRUSH` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από την περιοχή προεπισκόπησης (που όταν πιέζεται θα παράξει μια αναδυόμενη προεπισκόπηση) και ένα κουμπί με την ετικέτα "...". Το κουμπί θα εμφανίσει ένα διάλογο όπου μπορούν να επιλεγούν πινέλα και καθένα από τα χαρακτηριστικά του πινέλου μπορεί να τροποποιηθεί. SF-BRUSH "πινέλο" '("Circle (03)" 100 44 0) Εδώ ο διάλογος πινέλου θα εμφανιστεί με ένα προεπιλεγμένο πινέλο κύκλου (03), αδιαφάνειας 100, διάκενου 44 και κανονικής κατάστασης βαφής (τιμή 0). Εάν αυτή η επιλογή παρέμεινε αμετάβλητη η τιμή που πέρασε στη συνάρτηση ως μία παράμετρος θα είναι '("Circle (03)" 100 44 0).
`SF-PATTERN` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από την περιοχή προεπισκόπησης (που όταν πατηθεί θα παράξει την εμφάνιση προεπισκόπησης) και ένα κουμπί με την ετικέτα "...". Το κουμπί θα εμφανίσει ένα διάλογο όπου μπορούν να επιλεγούν μοτίβα. SF-PATTERN "Μοτίβο" "Φύλλα σφένδαμου" Η επιστρεφόμενη τιμή όταν το σενάριο καλείται είναι ένα αλφαριθμητικό που περιέχει το όνομα του μοτίβου. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Φύλλα σφένδαμου".
`SF-GRADIENT` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από ένα κουμπί που περιέχει μια προεπισκόπηση της επιλεγμένης διαβάθμισης. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής διαβάθμισης θα εμφανιστεί. SF-GRADIENT "Διαβάθμιση" "Βαθύ θαλασσί" Η επιστρεφόμενη τιμή όταν το σενάριο καλείται είναι ένα αλφαριθμητικό που περιέχει το όνομα της διαβάθμισης. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Βαθύ θαλασσί".
`SF-PALETTE` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή αποτελείται από ένα κουμπί που περιέχει το όνομα της επιλεγμένης παλέτας. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής παλέτας θα εμφανιστεί. SF-PALETTE "Παλέτα" "Επώνυμα χρώματα" Η επιστρεφόμενη τιμή όταν καλείται το σενάριο είναι ένα αλφαριθμητικό που περιέχει το όνομα της παλέτας. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Επώνυμα χρώματα".
`SF-FILENAME` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή αποτελείται από ένα κουμπί που περιέχει το όνομα του επιλεγμένου αρχείου. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής αρχείου θα εμφανιστεί. SF-FILENAME "ετικέτα" (string-append ""gimp-data-directory"/scripts/beavis.jpg") Η επιστρεφόμενη τιμή, όταν το σενάριο καλείται είναι μια συμβολοσειρά που περιέχει το όνομα του αρχείου.
`SF-DIRNAME` | Χρήσιμο μόνο στη διαδραστική κατάσταση. Πολύ παρόμοιο με το SF-FILENAME, αλλά η δημιουργηθείσα εφαρμογή επιτρέπει την επιλογή ενός καταλόγου αντί για αρχείο. SF-DIRNAME "ετικέτα" "/var/tmp/images" Η επιστρεφόμενη τιμή, όταν το σενάριο καλείται είναι μια συμβολοσειρά που περιέχει το όνομα του καταλόγου.
`SF-OPTION` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή είναι ένα σύνθετο πλαίσιο που δείχνει τις επιλογές που πέρασαν ως λίστα. Η πρώτη επιλογή είναι η προκαθορισμένη επιλογή. SF-OPTION "ετικέτα" '("επιλογή1" "επιλογή2") Η επιστρεφόμενη τιμή, όταν το σενάριο που καλείται είναι ο αριθμός της επιλεγμένης επιλογής, όπου η πρώτη επιλογή αριθμείται ως 0.
`SF-ENUM` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή είναι ένα σύνθετο πλαίσιο που δείχνει όλες τις απαριθμημένες τιμές για το δεδομένο τύπο απαρίθμησης. Αυτό πρέπει να είναι το όνομα της καταχωρημένης απαρίθμησης, χωρίς το πρόθεμα "Gimp". Η δεύτερη παράμετρος καθορίζει την προεπιλεγμένη τιμή, χρησιμοποιώντας το ψευδώνυμο της τιμής απαρίθμησης. SF-ENUM "Παρεμβολή" '("Τύπος παρεμβολής" "γραμμικός") Η επιστρεφόμενη τιμή, όταν το σενάριο που καλείται αντιστοιχεί στην επιλεγμένη απαριθμημένη τιμή.

[6] Πριν την έκδοση 2.6, `<Toolbox>` μπορούσε επίσης να χρησιμοποιηθεί, αλλά τώρα το μενού της εργαλειοθήκης μετακινήθηκε, έτσι μην το χρησιμοποιήσετε.

[7] Το αρχικό, γραμμένο από τον Mike, λέει βάλτε την είσοδο του μενού στο μενού Script-Fu του μενού Xtns στην εργαλειοθήκη, αλλά από την έκδοση 2.6, το μενού της εργαλειοθήκης αφαιρέθηκε και συγχωνεύτηκε με τη γραμμή μενού του παραθύρου εικόνας.

[8] Αυτή η ενότητα δεν είναι μέρος του αρχικού μαθήματος.

3.3. Λίστες, λίστες και πάλι λίστες |  | 3.5. Δίνοντας στο σενάριό μας περισσότερη ψυχή

Αναφορά σφάλματος στο Bugzilla