Eine recht angenehme Sprache zur Programmierung unter X-Windows ist die Tool Command Language (Tcl), zusammen mit ihrer X-Windows Erweiterung Toolkit (Tk). Unter dieser Interpretersprache werden Programme in zwei Phasen ausgeführt. In der ersten Phase, die sofort nach dem Aufruf beginnt, wird das Programm initialisiert, indem die Oberfläche aufgebaut und die Datenstrukturen geladen werden. In der zweiten Phase tritt das Programm in den Event-Loop ein, in dem es dann auf bestimmte Ereignisse wartet. Tritt nun eines dieser Ereignisse ein, werden die sogenannten Eventhandler aufgerufen, die dann den entsprechenden Programmcode für das jeweilige Ereignis ausführen, um dann anschließend wieder zum Event-Loop zurückzukehren.
Die grafischen Elemente, aus denen die Oberfläche unter Tcl/Tk besteht, werden als Widgets bezeichnet. Es gibt sie in verschiedenen Typen, den Widgetklassen. Zur Zeit stehen unter Tk folgende Klassen zur Verfügung:
Zum einen handelt es sich hierbei um genormte, aber konfigurierbare Grafikobjekte im ,,MOTIF-Look-and-Feel`` Stil, zum anderen sind sie schon mit vielerlei Funktionalität ausgestattet. So ist zum Beispiel die Widgedklasse ,,Text`` bereits mit Editierfähigkeiten ausgestattet. Aus diesen Widgedklassen lassen sich nun, verbunden mit einer Hierarchie, leicht Programme zusammenstellen. Dazu nun das folgende Beispiel eines Editors:
# Aufruf der Tk-Windowingshell #!/usr/local/bin/wish -f # der Fensterhintergrund .mem fuellt das ganze Fenster aus frame .mem -relief raised -bd 3 pack .mem -side top -fill x # das Menue .mem.file wird als Kind von .mem auf der linken Seite # plaziert menubutton .mem.file -text "Datei " \ -relief raised -menu .mem.file.m -underline 0 pack .mem.file -side left # fuege 4 Menuepunkte .mem.file.m als Kinder von .mem.file hinzu menu .mem.file.m .mem.file.m add command -label "Neu" -command {erneuern} .mem.file.m add command -label "Laden" -command {lesen} .mem.file.m add command -label "Speichern" -command {schreiben} .mem.file.m add command -label "Ende" -command exit # die Scrollbar .s wird rechts ueber die ganze Hoehe plaziert # das Editierfenster .t fuellt dann den Rest des Fensters aus scrollbar .s -command ".t yview" text .t -yscroll ".s set" -relief sunken pack append . .s {right filly} .t {left expand fill} # Prozedur zum Lesen einer Datei proc lesen {} { loeschen erneuern toplevel .laden frame .laden.fr entry .laden.fr.o -width 26 -relief sunken \ -textvariable arbeitsfile label .laden.fr.label1 -text "Laden von:" pack .laden.fr pack .laden.fr.label1 -side top pack .laden.fr.o -side bottom grab .laden.fr.o bind .laden.fr.o <Return> {extract; destroy .laden} } # Prozedur zum Schreiben einer Datei proc schreiben {} { toplevel .speichern frame .speichern.fr entry .speichern.fr.o -width 26 -relief sunken \ -textvariable arbeitsfile label .speichern.fr.label1 -text "Speichern unter:" pack .speichern.fr pack .speichern.fr.label1 -side top pack .speichern.fr.o -side bottom grab .speichern.fr.o bind .speichern.fr.o <Return> {save; destroy .speichern} } # das eigentliche Lesen mit 'cat' proc extract {} { global arbeitsfile .t insert end [exec cat $arbeitsfile] } # das eigentliche Schreiben mit 'echo' proc save {} { global arbeitsfile exec echo [.t get 1.0 end] > $arbeitsfile } # den Inhalt der Variablen 'arbeitsfile' mit leerer Eingabe # ueberschreiben proc loeschen {} { global arbeitsfile set arbeitsfile "" } # Editierfenster loeschen und anschliessend neu aufbauen proc erneuern {} { destroy .t text .t -yscroll ".s set" -relief sunken pack append . .t {left expand fill} }
Nach dem Programmstart, ein Tcl/Tk Programm läßt sich wie ein Skriptfile aufrufen, sieht das Editorfenster dann so wie in der Abbildung 6 aus.
Abbildung 6: Editorfenster nach dem Programmaufruf
Ein großer Nachteile von Tcl/Tk ist die vergleichsweise unübersichtliche Syntax. Da Anweisungen nicht durch ein Semikolon, wie bei anderen Programmiersprachen gebräuchlich, sondern durch einen Zeilenumbruch getrennt werden, läßt sich dieser bei Bedarf durch einen Backslash aufheben, was die Lesbarkeit des Programmcodes nicht gerade erhöht. Deshalb wird zur Zeit eine Erweiterung zu Tcl/Tk entwickelt, ein sogenannter Interface Builder, der diese Sprache um eine grafische Oberfläche ergänzt, mit der dann Programme im Baukastenprinzip erstellt werden können.