Translation-Tabelle (Xt)
Das Textformat von Xt, um Tasten und Maustasten an benannte Aktionen eines Widgets zu binden – austauschbar über ~/.Xresources, ohne das Programm anzufassen.
Jedes Xt-Widget hat eine Ressource translations, eine Tabelle, deren linke Seite eine Ereignisfolge und deren rechte Seite eine oder mehrere Aktionen ist: <Key>q: quit(), Ctrl<Key>s: search(forward), Shift<Btn1Down>: select-start(). Ein Ereignis wird als Modifikatoren, Typ und Detail geschrieben, und mehrere lassen sich für Doppelklicks oder Mehrtastenfolgen verketten. Die Aktionen definiert die Widget-Klasse, oder das Programm registriert sie mit XtAppAddActions; den Abgleich beim Eintreffen der Ereignisse übernimmt der Translation Manager von Xt.
Der Clou ist, dass die Tabelle eine Ressource wie jede andere ist. Die Direktiven #override, #augment und #replace bestimmen, ob die Zeilen des Nutzers über, unter oder anstelle der widgeteigenen gelten, sodass eine Zeile wie XTerm*VT100.translations: #override Shift <KeyPress> Insert: insert-selection(PRIMARY) das Verhalten von xterm ohne Neukompilieren ändert. Das war die Antwort der 1980er Jahre auf konfigurierbare Tastenkürzel, und eine ungewöhnlich mächtige: xterm kann mit string() beliebige Zeichenketten senden, und Athena-Editoren ließen sich Taste für Taste umbelegen. Die Syntax war allerdings so fragil – ein fehlendes \n\ in der Ressourcendatei, und die ganze Tabelle verschwand stillschweigend –, dass sich die meisten damit begnügten, Zeilen aus dem Usenet zu kopieren. GTK und Qt haben den Mechanismus ganz fallen lassen; dort sind die Belegungen fest eingebaut, und man bekommt stattdessen einen Einstellungsdialog.