Η μορφοποίηση (customization) του twm
γίνεται μέσα από τα αρχεία .twmrc.
Κατά την εκκίνησή του ο twm αναζητεί τα συγκεκριμένα αρχεία και αντλεί από
αυτά τα διάφορα στοιχεία που χρειάζεται. Το αρχείο .twmrc
ακολουθεί
διαφορετική σύνταξη από τα άλλα αρχεία που περιέχουν resources εξαιτίας και
της ιδιομορφίας του twm. Χωρίζεται σε τρείς ιδιαίτερες ενότητες, οι οποίες
είναι με την σειρά που εμφανίζονται στο αρχείο : η ενότητα των μεταβλητών
(variables)
, η ενότητα των δεσμεύσεων (bindings)
και η ενότητα των μενού
(menus)
. Στην ενότητα των μεταβλητών προσδιορίζονται διάφορα χαρακτηριστικά
του twm όπως οι γραμματοσειρές, τα χρώματα, τα είδη των δεικτών του
ποντικιού, η θέση και η συμπεριφορά των παραθύρων και των εικονιδίων, ο
διαχειριστής των εικονιδίων. Στην ενότητα των δεσμεύσεων (bindings)
ορίζονται οι λειτουργίες που θα κάνει ο twm
με το πάτημα πλήκτρων του
πληκτρολογίου ή του ποντικιού σε διάφορα μέρη των παραθύρων όπως η μπάρα των
τίτλων, το πλαίσιο, το εσωτερικό των παραθύρων ή η ρίζα. Τέλος στη τρίτη
ενότητα, αυτή των menu, ορίζονται οι δομές των menu που θέλει ο χρήστης να
εμφανίζονται στα X Windows.
Στο αρχείο .twmrc
όπως και στο UNIX οι διάφορες δεσμευμένες λέξεις και τα
ορίσματα που χρησιμοποιούνται είναι "case-sensitive" δηλαδή έχει σημασία η
χρήση κεφαλαίων ή πεζών χαρακτήρων. Επίσης όπου χρησιμοποιούνται
συμβολοσειρές (strings)
για ορίσματα θα πρέπει να μπαίνουν μέσα σε διπλά
εισαγωγικά ", ενώ η χρήση του χαρακτήρα #
στην αρχή μίας γραμμής υποδηλώνει
σχόλιο και δεν λαμβάνεται υπόψην.
Στη συνέχεια αναλύονται ξεχωριστά οι τρεις ενότητες:
Α. Ενότητα Μεταβλητών (Variables Section)
Οι μεταβλητές προσδιορίζουν τα διάφορα "στατικά" χαρακτηριστικά του
διαχειριστή των παραθύρων. Μπορούν να παίρνουν διάφορες τιμές όπως αριθμούς,
συμβολοσειρές ή ακόμη και λίστες των παραπάνω. Οι λίστες συντάσσονται ως
ακολουθίες στοιχείων που διαχωρίζονται με κενούς χαρακτήρες (spaces)
και
κλείνονται μέσα σε άγκιστρα ( "{"
και "}"
). Για παράδειγμα:
NoTitle { "xclock" "xload" "xbiff" }Οι συμβολοσειρές χρησιμοποιούνται ως ορίσματα για να δηλώσουν πελάτες των X Windows, ονόματα αρχείων εικονιδίων, χρώματα ή άλλα. Στην περίπτωση που αναφέρονται σε πελάτες των X Windows ο χρήστης μπορεί να χρησιμοποιεί είτε το όνομα του πελάτη (π.χ.
"xclock"
), είτε το όνομα της κλάσης στην οποία
ανήκει ο πελάτης (π.χ. "Xterm"
) με τα ανάλογα αποτελέσματα όπως αναφέρθηκε
στην παράγραφο για την εμβέλεια των resources. Οταν οι συμβολοσειρές αφορούν
ονόματα αρχείων εικονιδίων τότε η χρήση του χαρακτήρα "~"
μπροστά από το
όνομα υποδηλώνει ότι ο twm
θα πρέπει να αναζητήσει το αρχείο στο home
directory
του χρήστη (π.χ. "~funnyicon"
). Η χρήση αντιστοίχως του χαρακτήρα
":"
ορίζει στον twm
ότι θα πρέπει να χρησιμοποιήσει ένα από τα εσωτερικά του
εικονίδια. Αυτά είναι τρία, το ":xlogo"
ή ":iconify"
που χρησιμοποιείται στο
αριστερό titlebutton
, το ":resize"
που χρησιμοποιείται στο δεξιό
titlebutton
και το ":question"
που χρησιμοποιείται όταν ο twm
δεν μπορέσει να βρεί
κάποιο εικονίδιο. Αν δώσουμε απλώς το όνομα του εικονιδίου ο twm
θα το
αναζητήσει στο directory που του έχει ορίζει ο χρήστης με την μεταβλητή
IconDirectory
. Αν η συμβολοσειρά ορίζει χρώμα τότε θα πρέπει να αντιστοιχεί
σε ένα από τα ονόματα χρωμάτων που ορίζονται στο αρχείο
/usr/lib/X11/rgb.txt.
Τέλος μία μεταβλητή μπορεί να μην λαμβάνει κανένα
όρισμα. Στην περίπτωση αυτή θεωρείται ότι η μεταβλητή παίρνει την λογική
τιμή TRUE
με αποτέλεσμα να ενεργοποιείται η ιδιότητα του διαχειριστή που
περιγράφεται από αυτήν.
Οι σημαντικότερες μεταβλητές που υποστηρίζει ο twm
είναι οι:
(border)
του
κάθε παραθύρου. Εξ' ορισμού έχει τιμή 2
.
BorderWidth
.
twm
εάν χρησιμοποιείται έγχρωμη οθόνη. Περιλαμβάνει μία λίστα από μεταβλητές
που ορίζουν τα χρώματα ιδιαίτερων στοιχείων των παραθύρων. Αυτές είναι οι:
Παράδειγμα:
Color { DefaultBackground "SkyBlue" DefaultForeground "white" IconBorderColor "gray80" {"Xterm" "green" "xfig" "red" } IconManagerBackground "gray50" MenuBackground "yellow" MenuForeground "black" }
Color
αλλά για μονόχρωμη οθόνη.
(pointer image)
και μία δέυτερη που χρησιμοποιείται ως "μάσκα"
(pointer mask)
. Υπάρχουν δύο τρόποι να καθορίσουμε την εικόνα του δείκτη. Ο
πρώτος είναι να χρησιμοποιήσουμε την γραμματοσειρά cursor (cursor font)
, η
οποία περιέχει αντί για τους συνηθισμένους χαρακτήρες ζευγάρια εικόνων και
μασκών και τον δείκτη του ποντικιού. Στην περίπτωση αυτή η σύνταξη ενός
στοιχείου της λίστας είναι:
cursorname "string"όπου cursorname είναι ένα από τα έγκυρα ονόματα του δείκτη (δίνονται στο παράδειγμα) και
"string"
είναι το όνομα της επιθυμητής εικόνας από την
γραμματοσειρά cursor. Τα ονόματα αυτά ο χρήστης μπορεί να τα βρει στο αρχείο
/usr/include/X11/cursorfont.h.
Ο δεύτερος τρόπος ορισμού της εικόνας του
δείκτη είναι μέσω ξεχωριστών αρχείων bitmap που δημιουργήσει ο χρήστης. Ενας
απλός τρόπος για την κατασκευή τέτοιων εικόνων είναι μέσω του συνονόματου
προγράμματος bitmap
. Στην περίπτωση αυτή η σύνταξη είναι:
cursorname "image" "mask"όπου
"image"
το όνομα του αρχείου που περιέχει την εικόνα του δείκτη και
"mask"
το αρχείο που περιέχει τη μάσκα της. Τα δύο παραπάνω αρχεία
υποκύπτουν στους ίδιους κανόνες με τα αρχεία που περιέχουν εικονίδια, δηλαδή
ισχύουν τα σύμβολο "~"
και οι κανόνες για το μονοπάτι αναζήτησης τους.
Οι εξ' ορισμού τιμές για για τις όλες τις έγκυρες μορφές του δείκτη του ποντικιού είναι οι:
Cursors { Frame "topleftarrow" Title "topleftarrow" Icon "topleftarrow" IconMgr "topleftarrow" Move "fleur" Resize "fleur" Menu "sbleftarrow" Button "hand2" Wait "watch" Select "dot" Destroy "pirate" }
TwmWindows menu
ή η συνάρτηση
f.warpto
που θα αναλυθεί παρακάτω. Αν παραλειφθεί το όρισμα της μεταβλητής,
τότε η IconifyByUnmapping θα ισχύει για κάθε πελάτη των X Windows.
IconifyByUnmapping
. Ορίζει δηλαδή, τα παράθυρα που όταν εικονιδιοποιούνται
θα σχηματίζουν εικονίδια. Υπερισχύει τυχόντος γενικού ορισμού της
IconifyByUnmapping
. Χρησιμοποιείται συνήθως για να καθορίσουμε τα παράθυρα
που θέλουμε να χρησιμοποιούν εικονίδια σε αντίθεση με την πλειοψηφία που
θέλουμε να χρησιμοποιεί τον διαχειριστή των εικονιδίων. Για παράδειγμα:
# όχι εικονίδια (γενικός ορισμός) IconifyByUnmapping # εκτός από τα παράθυρα των ακόλουθων: DontIconifyByUnmapping { "xclock" "xload" "xbiff" }
string
μπορεί να είναι είτε σε XLFD
μορφή, είτε
ψευδόνυμο (alias)
που υπάρχει σε κάποιο από τα αρχεία fonts.alias
του
συστήματος. Παράδειγμα:
IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"ή
IconFont "helv10.75"
twm
να
αναζητήσει τα αρχεία που περιέχουν τα bitmaps των εικονιδίων των διαφόρων
προγραμμάτων. Το directory αυτό είναι συνήθως το /usr/include/X11/bitmaps
,
δηλαδή δίνουμε:
IconDirectory "/usr/include/X11/bitmaps"
bitmaps
για εικονίδια.
Icons { "Xterm" "terminal" "xfd" "xfd_icon" "xclock" "~my_own_icon" }
twm
θα πρέπει να χρησιμοποιήσει τα bitmaps που
έχουν οριστεί με την μεταβλητή Icons
αντί για αυτά που θα χρησιμοποιούσαν
εξ' ορισμού οι συγκεκριμένοι πελάτες των X Windows.
bitmap
αρχείου το οποίο θα
χρησιμοποιεί ο twm
στην περίπτωση που κάποιος πελάτης δεν έχει δικό του
εικονίδιο και δεν ορίζεται κάποιο στην μεταβλητή Icons
.
StartIconified
δεν συνοδεύεται από λίστα τότε θεωρείται ότι όλα τα
προγράμματα θα πρέπει να ξεκινούν σε κατάσταση εικονιδίου.
twm
θα βάζει όλα τα εικονίδια. Η συμβολοσειρά geomstring
έχει την
μορφή geometry resource
(βλ. αντίστοιχη παράγραφο). Η συμβολοσειρά vgrav
μπορεί να πάρει τις τιμές North
και South
καθορίζοντας αν η περιοχή θα
γεμίζει από πάνω προς τα κάτω ή αντιστρόφως. Ομοίως η συμβολοσειρά hgrav
μπορεί να πάρει τις τιμές East
και Wes
t. Τα gridwidth και gridheight είναι
αριθμητικές τιμές και καθορίζουν ένα πλέγμα (grid)
μέσα στην ευρύτερη
περιοχή έτσι ώστε το κάθε εικονίδιο να μπαίνει σε μία κυψέλη πλάτους
gridwidth pixel
και ύψους gridheight pixel
. Για παράδειγμα δίνοντας:
IconRegion "500x200-20-20" South East 50 50ορίζουμε μία περιοχή
500
επί 200 pixel
στην κάτω δεξιά γωνία της οθόνης. Ο
χρήστης μπορεί να ορίσει διαδοχικά με τη μεταβλητή IconRegion
όσες περιοχές
επιθυμεί. Στην περίπτωση αυτή ο twm
θα χρησιμοποιεί τις επόμενες όταν
γεμίζουν οι προηγούμενες.
geometry resource
και ορίζει το μέγεθος και
την θέση του διαχειριστή. Το δεύτερο (προαιρετικό) όρισμα είναι ο αριθμός
των στηλών του διαχειριστή. Εξ' ορισμού έχει μία μόνο στήλη.
twm
. Το κάθε στοιχείο της λίστας έχει την
μορφή:
"winname" ["iconname"] "geometry" columnsόπου
winname
το όνομα των παραθύρων που θα πρέπει να συμπεριλαμβάνονται στον
συγκεκριμένο διαχειριστή, iconname (προαιρετικό) το όνομα του αρχείου του
εικονιδίου του διαχειριστή ενώ τα geomstring
, columns
ορίζονται όπως και
στην μεταβλητή IconManagerGeometry.
Για παράδειγμα δίνοντας:
IconManagers { "XTerm" "=180x10+600+5" 1 "rem_logins" "=180x10+800+5" 1 }δημιουργούμε δύο διαχειριστές εικονιδίων. Ο πρώτος αναλαμβάνει τα εικονίδια των παραθύρων της κλάσης
XTerm
, ενώ ο δεύτερος τα παράθυρα των πελατών με το
όνομα rem_logins
.
twm
δεν θα πρέπει να χρησιμοποιήσει
διαχειριστές εικονιδίων.
IconManagerDontShow { "xclock" "xload" "xcalc" "xbiff" }Αν δεν δώσουμε όρισμα στην μεταβλητή
IconManagerDontShow
τότε αποκλείουμε
όλα τα προγράμματα από τον διαχειριστή εικονιδίων.
IconManagerDontShow.
με κατάλληλο χειρισμό των
μεταβλητών IconManagerDontShow, IconManagerShow, IconifyByUnmapping
και
DontIconifyByUnmapping
μπουρούμε να καθορίσουμε ποιά προγράμματα θα
χρησιμοποιούν το διαχειριστή εικονιδίων και ποιά θα χρησιμοποιούν εικονίδια.
twm
θα πρέπει να εμφανίσει το διαχειριστή των
εικονιδίων μόλις ξεκινήσει.
NoTitle
θα έχει γενική ισχύ.
NoTitle.
string
είναι της μορφής geometry resource
και καθορίζει μέγιστο πλάτος και ύψος του παραθύρου. Εξ' ορισμού έχει τιμή
"30000x30000"
. Η μεταβλητή MaxWindowSize
χρησιμοποιείται για να περιορίζουμε
τα παράθυρα σε μέγεθος ίσο ή μικρότερο από αυτό που υποστηρίζει η οθόνη. Με
τον τρόπο αυτό αποφεύγονται τυχόν προβλήματα που θα προέκυπταν από
υπερβολικά μεγάλα παράθυρα.
twm
ότι δεν θα πρέπει να επιτρέπει την μετακίνηση
των παραθύρων εκτός των ορίων της οθόνης. Εξ' ορισμού τα X Windows
επιτρέπουν την τοποθέτηση των παραθύρων με τέτοιο τρόπο ώστε μέρος τους να
βρίσκεται εκτός οθόνης. Με τον τρόπο αυτό μπορούμε να αποσυμφορίσουμε την
οθόνη οταν δουλεύουμε με πολλά ανοικτά παράθυρα.
twm
μετακινούμε μόνο το περίγραμμά του και όταν διαλέξουμε τη νέα θέση ο twm
ξαναζωγραφίσει το παράθυρο στη νέα θέση. Αν θέσουμε την μεταβλητή OpaqueMove
τότε μετακινούμε κατευθείαν ολόκληρο το παράθυρο. Η μεταβλητή αυτή ορίζεται
κυρίως σε γρήγορα συστήματα καθώς η μετακίνηση ολοκληρου του παραθύρου
απαιτεί περισσότερους υπολογισμούς και μνήμη.
twm
δεν θα πρέπει να
χρησιμοποιήσει κανέναν από τους εσωτερικούς του ορισμούς για τα titlebuttons
και τις δεσμεύσεις πλήκτρων. Η μεταβλητή NoDefaults
θα πρέπει να
χρησιμοποιείται μόνο όταν στο αρχείο .twmrc
υπάρχει πλήρες καινούργιο σύνολο
ορισμών για τα παραπάνω στοιχεία.
WarpCursor
θα ισχύει για όλα τα παράθυρα.
f.move
του twm
(βλ.
συνάρτηση f.deltastop
). Εξ' ορισμού παίρνει την τιμή μηδεν.
(bindings)
. Ο twm
χρησιμοποιεί τον όρο των δεσμεύσεων για να περιγράψει την απόδοση κάποιων
λειτουργιών σε συγκεκριμένους συνδυασμούς πλήκτρων του ποντικιού και του
πληκτρολογίου ακόμη και σε νέα "κουμπία" της μπάρας του τίτλου
(titlebuttons)
. Οι διάφορες λειτουργίες πραγματοποιούνται από ένα ευρύ
σύνολο εσωτερικών συναρτήσεων του twm οι σημαντικότερες των οποίων είναι οι:
f.fullzoom
αλλάζει το μέγεθος
του επιλεγμένου παραθύρου και το κάνει το μέγιστο που υποστηρίζει η οθόνη.
Αν εφαρμόσουμε ξανά την f.fullzoom
στο ίδιο παράθυρο αυτό θα λάβει τις
αρχικές του διαστάσεις. Εκτός από την f.fullzoom
υπάρχουν και αρκετές
παρόμοιες συναρτήσεις που είτε μεγιστοποιούν το επιλεγμένο παράθυρο ως προς
μία διάσταση (f.zoom, f.horizoom)
, είτε το μεγαλώνουν ώστε να καλύψει ένα
μέρος της οθόνης, την μισή για παράδειγμα (f.bottomzoom, f.topzoom,
f.leftzoom, f.rightzoom)
. Ολες όταν εφαρμόζονται ξανά σε ένα παράθυρο το
επαναφέρουν στις παλιές του διαστάσεις.
AutoRaise
.
titlebutton
κάθε παραθύρου είναι δεσμευμένο
εξ' ορισμού με την συνάρτηση αυτή.
DontMoveOff.
f.focus.
f.iconify.
/bin/sh
για
εκτέλεση. Με την συνάρτηση μπορούμε να εκτελούμε προγράμματα μέσα
από τα X Windows. Αντί της f.exec
ο χρήστης μπορεί να
χρησιμοποιήσει την συντομογραφία της:
! stringΠαράδειγμα:
f.exec "xterm -name MyTerm &"
MoveDelta
(βλ. επόμενα παραδείγματα).
string
. Οι οριζόμενες από τον χρήστη συναρτήσεις του twm
είναι λίστες
από το σύνολο των ήδη υπάρχοντων συναρτήσεων. Ο ορισμός τους γινεται ως
εξής:
Function "function-name" { function-list }όπου
"function-name"
το όνομα της νέας συνάρτησης και function-list
η λίστα
των συναρτήσεων που την αποτελούν. Για παράδειγμα:
Function "move-or-lower" { f.move f.deltastop f.lower } Function "move-or-raise" { f.move f.deltastop f.raise } Function "move-or-iconify" { f.move f.deltastop f.iconify }Η συνάρτηση
"move-or-lower"
μετακινεί το επιλεγμένο παράθυρο αν ο δείκτης
του ποντικιού περισσότερα από MoveDelta pixel
αλλιώς χαμηλώνει το παράθυρο.
Ομοίως και οι υπόλοιπες.
twm
να σταματήσει τη λειτουργία
του.
twm
να σταματήσει και να ξεκινήσει
εξ'αρχής. Η συνάρτηση αυτή είναι χρήσιμη στην περίπτωση που έχουμε κάνει
αλλαγές στο αρχείο .twmrc
ενώ αυτός τρέχει και θέλουμε να τις περάσουμε σε
αυτόν. Προφανώς η επιλογή αυτή δεν έχει νόημα στην περίπτωση που
χρησιμοποιούμε τον twm
στο αρχείο .xinitrc
ως μέσο τερματισμού των X
Windows.
twm
να κλείσει το διαχειριστή των
εικονιδίων.
twm
να ταξινομήσει το διαχειριστή των
εικονιδίων.
twm
να εμφανίσει το menu με το όνομα της
συμβολοσειράς string.
twm
να μην κάνει τίποτα (No OPeration)
. Χρήσιμο
κυρίως για κενές γραμμές στα menu.
ButtonCode = modlist : context : functionκαι
"KeyCode" = modlist : context : functionόπου
ButtonCode
είναι ο κωδικός του πλήκτρου του ποντικιού, ο οποίος μπορεί
να πάρει τις τιμές Button1, Button2
εώς Button5
. Ο twm δηλαδή, υποστηρίζει
υποστηρίζει εώς και πέντε πλήκτρα στο ποντίκι. Η αρίθμηση αρχίσει από το
αριστερότερο πλήκτρο (Button1)
. KeyCode
είναι το ανάλογο όνομα για κάθε
πλήκτρο του πληκτρολογίου, όπως αυτά ορίζονται στο αρχείο
/usr/include/X11/keysymdef.h
(χωρίς το πρόθεμα XK_
). Μετά το "="
ο χρήστης
μπορεί να δώσει μία λίστα (modlist : modifiers list)
από τα ειδικά πλήκτρα
shift, control
και meta
(συντομογραφίες : s,c
και m
) που θα πρέπει να
πατηθούν μαζί με το βασικό πλήκτρο για να επιτευχθεί το αποτέλεσμα. Τα
στοιχεία της λίστας διαχωρίζονται με τον χαρακτήρα "|"
. Ακολουθεί μία
παρόμοια λίστα που ορίζει σε ποιά θέση θα πρέπει να είναι ο δείκτης του
ποντικιού για να εκτελεστεί η συνάρτηση. Τα στοιχεία της λίστας μπορούν να
πάρουν τις τιμές window
(εσωτερικό παραθύρου), title
(μπάρα τίτλου), icon
(εικονίδιο), root
(κεντρικό παραθυρο - ρίζα), frame
(πλαίσιο παραθύρου),
iconmgr
(διαχειριστής εικονιδίων) ή all για όλα μαζί (ισχύουν επίσης οι
συντομογραφίες w, t, i, r, f
και m
για το iconmgr
). Τέλος δίνεται η
συνάρτηση που θα εκτελείται με το πάτημα του συγκεκριμένου συνδυασμού
πλήκτρων. Η συνάρτηση αυτή μπορεί να είναι μία από τις εσωτερικές
συναρτήσεις του twm
ή να είναι ορισμένη από τον χρήστη.
Οι δεσμεύσεις των πλήκτρων του ποντικιού που γίνονται στο αρχείο
system.twmrc
ειναι οι ακόλουθες:
# BUTTONS = MODS : CONTEXT : FUNCTION Button1 = : root : f.menu "defops" Button1 = m : window|icon : f.function "move-or-lower" Button2 = m : window|icon : f.iconify Button3 = m : window|icon : f.function "move-or-raise" Button1 = : title : f.function "move-or-raise" Button2 = : title : f.raiselower Button1 = : icon : f.function "move-or-iconify" Button2 = : icon : f.iconify Button1 = : iconmgr : f.iconify Button2 = : iconmgr : f.iconifyΕνα παράδειγμα και για δέσμευση πλήκτρων του πληκτρολογίου είναι:
## KEYS = MODS : CONTEXT : FUNCTION "L1" = s : window : f.destroy "L2" = : root : f.refresh "L2" = : window : f.winrefresh "L3" = : window : f.zoom "L4" = : window : f.fullzoom "L5" = s : root : !"xlock -mode life -info \"Back soon..\" &" "F1" = : all : f.identifyΟ twm επιτρέπει και τον ορισμό επιπλέον "κουμπιών"
(titlebuttons)
στην μπάρα
του τίτλου των παραθύρων. Με το όνομα LeftTitleButton
μπορούμε αν
προσθέσουμε κουμπιά δίπλα στο αριστερό titlebutton
, ενώ με το όνομα
RightTitleButton
προστίθονται δίπλα από το δεξί. Ορίζονται ως εξής:
LeftTitleButton "bitmapname" = functionή
RightTitleButton "bitmapname" = functionόπου
bitmapname
είναι το όνομα του αρχείου που περιέχει την εικόνα (bitmap)
που θα χρησιμοποιηθεί για το κουμπί και function η συνάρτηση που θα
εκτελείτε με το πάτημα του. Για παράδειγμα ο ορισμός:
LeftTitleButton "menu8" = f.menu "Winmenu"δημιουργεί ένα νέο κουμπί, δεξιά του αριστερού
titlebutton
, που πατώντας το
εμφανίσει το menu "Winmenu"
.
Γ. Ενότητα Menu (Menus Section)
Στην ενότητα των Menu ορίζονται οι δομές των menu που αναφέρθηκαν στις
εντολές f.menu
της ενότητας των δεσμεύσεων. Η σύνταξη της δομής menu είναι η
ακόλουθη:
menu "menuname" [ ("deffore":"defback") ] { string1 [ ("fore1":"back1")] function1 string2 [ ("fore2":"back2")] function2 . . . . . . . . . stringN [ ("foreN":"backN")] functionN }όπου
menuname
το όνομα του menu, όπως αναφέρεται και στην αντίστοιχη εντολή
f.menu
και deffore, defback, fore1
εώς foreN
και back1
εώς
backN
τα χρώματα
που θα χρησιμοποιηθούν στο menu (foregroundcolor : backgroundcolor)
. Τα
string1
εώς stringN
είναι οι συμβολοσειρές που θα εμφανιστούν στις επιλογές
του menu και function1
εώς functionN
είναι οι συναρτήσεις που αντιστοιχούν
σε αυτές τις επιλογές. Σημειώνεται ότι επιτρέπεται η ύπαρξη υπο-mεnu μέσα σε
menu (submenus). Τα υπο-menu μπορούν να δημιουργηθούν αν κάποιες από τις
function1..functionN
είναι της μορφής f.menu "menuname"
. Τέλος όταν κάποια
από τις επιλογές του menu σχετίζεται με παράθυρα (π.χ. f.move
) τότε επειδή
δεν υπάρχει ήδη επιλεγμένο παράθυρο ο δείκτης του ποντικιού μετατρέπεται σε
δείκτη επιλογής και ο χρήστης καλείται να επιλέξει ένα παράθυρο πατώντας
μέσα σε αυτό.
Ο ορισμός του menu υπάρχει συνήθως στο αρχείο system.twmrc
είναι ο εξής:
menu "defops" { "Twm" f.title "Iconify" f.iconify "Resize" f.resize "Move" f.move "Raise" f.raise "Lower" f.lower "" f.nop "Focus" f.focus "Unfocus" f.unfocus "Show Iconmgr" f.showiconmgr "Hide Iconmgr" f.hideiconmgr "" f.nop "Kill" f.destroy "Delete" f.delete "" f.nop "Restart" f.restart "Exit" f.quit }Ενώ το menu
Winmenu
που ορίστηκε για το νέο titlebutton
μπορεί να έχει την
μορφή:
menu "Winmenu" { "My Menu" f.title "Iconify" f.iconify "Refresh" f.winrefresh "Raise" f.raise "Lower" f.lower "Focus" f.focus "UnFocus" f.unfocus "" f.nop "About" f.identify "Quit Client" f.destroy }