Subject: Added "magic ampersand" approach for translated strings in standard dialogs. All translations were modified to work with "magic ampersand". Russian translations added.

From: a_kovalenko <[email-masked]>
Date: Mon, 10 Jun 2002 00:15:42 +0000

FossilOrigin-Name: f34dcf01ddf22dc24ff6457fca33d8e39ad2c134
---
 ChangeLog           |  22 +++++++++++
 library/clrpick.tcl |  37 ++++++++---------
 library/msgbox.tcl  |  95 ++++++++++++++++----------------------------
 library/msgs/cs.msg |  41 +++++++++----------
 library/msgs/de.msg |  39 +++++++++---------
 library/msgs/el.msg |  41 +++++++++----------
 library/msgs/en.msg |  41 +++++++++----------
 library/msgs/es.msg |  39 +++++++++---------
 library/msgs/fr.msg |  41 +++++++++----------
 library/msgs/it.msg |  39 +++++++++---------
 library/msgs/nl.msg |  39 +++++++++---------
 library/msgs/ru.msg |  73 ++++++++++++++++++++++++++++++++++
 library/tk.tcl      | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 library/tkfbox.tcl  |  87 +++++++++++++++++++---------------------
 library/xmfbox.tcl  |  40 +++++++++----------
 15 files changed, 480 insertions(+), 306 deletions(-)
 create mode 100644 library/msgs/ru.msg

diff --git a/ChangeLog b/ChangeLog
index 9909138..ff753a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2002-06-10  Anton Kovalenko <[email-masked]>
+
+	* library/tk.tcl: added utility functions to get "-underline" and 
+	"-text" for labels and buttons from translatable string containing 
+	"magic ampersand" [patch #566605]
+	* library/clrpick.tcl:
+	* library/msgbox.tcl:
+	* library/tkfbox.tcl:
+	* library/xmfbox.tcl: some places where msgcat is used to get
+	translated label are modified to handle labels with magic ampersand.
+	* library/msgs/ru.msg: russian translations added
+	* library/msgs/cs.msg:
+	* library/msgs/de.msg:
+	* library/msgs/el.msg: 
+	* library/msgs/es.msg:
+	* library/msgs/fr.msg:
+	* library/msgs/it.msg:
+	* library/msgs/nl.msg: all translation files now have labels with
+	'magic ampersand' where appropriate. In el.msg some ampersands are
+	missing, as I don't know which underline positions seems natural
+	to "el" users.
+
 2002-06-09  Mo DeJong  <[email-masked]>
 
 	* library/bgerror.tcl (tk::dialog::error::bgerror):
diff --git a/library/clrpick.tcl b/library/clrpick.tcl
index 1875ccd..bf2bca3 100644
--- a/library/clrpick.tcl
+++ b/library/clrpick.tcl
@@ -3,7 +3,7 @@
 #	Color selection dialog for platforms that do not support a
 #	standard color selection dialog.
 #
-# RCS: @(#) $Id: clrpick.tcl,v 1.15 2002/04/29 13:17:44 bagnonm Exp $
+# RCS: @(#) $Id: clrpick.tcl,v 1.16 2002/06/10 00:15:42 a_kovalenko Exp $
 #
 # Copyright (c) 1996 Sun Microsystems, Inc.
 #
@@ -205,12 +205,12 @@ proc ::tk::dialog::color::BuildDialog {w} {
     # StripsFrame contains the colorstrips and the individual RGB entries
     set stripsFrame [frame $topFrame.colorStrip]
 
-    set maxWidth [mcmax Red Green Blue]
+    set maxWidth [::tk::mcmaxamp &Red &Green &Blue]
     set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
     set colorList [list \
-	    red		[mc "Red"]	\
-	    green	[mc "Green"]	\
-	    blue	[mc "Blue"]	\
+	    red		[mc "&Red"]	\
+	    green	[mc "&Green"]	\
+	    blue	[mc "&Blue"]	\
 	    ]
     foreach {color l} $colorList {
 	# each f frame contains an [R|G|B] entry and the equiv. color strip.
@@ -219,7 +219,9 @@ proc ::tk::dialog::color::BuildDialog {w} {
 	# The box frame contains the label and entry widget for an [R|G|B]
 	set box [frame $f.box]
 
-	label $box.label -text $l: -width $maxWidth -under 0 -anchor ne
+	bind [::tk::AmpWidget label $box.label -text $l: -width $maxWidth \
+	    -anchor ne] <<AltUnderlined>> [list focus $box.entry]
+	
 	entry $box.entry -textvariable \
 		::tk::dialog::color::[winfo name $w]($color,intensity) \
 		-width 4
@@ -265,8 +267,8 @@ proc ::tk::dialog::color::BuildDialog {w} {
     # selected color
     #
     set selFrame [frame $topFrame.sel]
-    set lab [label $selFrame.lab -text [mc "Selection:"] \
-	    -under 0 -anchor sw]
+    set lab [::tk::AmpWidget label $selFrame.lab -text [mc "&Selection:"] \
+	    -anchor sw]
     set ent [entry $selFrame.ent \
 	-textvariable ::tk::dialog::color::[winfo name $w](selection) \
 	-width 16]
@@ -285,13 +287,13 @@ proc ::tk::dialog::color::BuildDialog {w} {
     # the botFrame frame contains the buttons
     #
     set botFrame [frame $w.bot -relief raised -bd 1]
-    set maxWidth [mcmax OK Cancel]
+    set maxWidth [::tk::mcmaxamp &OK &Cancel]
     set maxWidth [expr {$maxWidth<8?8:$maxWidth}]
-    button $botFrame.ok     -text [mc "OK"]		\
-	    -width $maxWidth -under 0				\
+    ::tk::AmpWidget button $botFrame.ok     -text [mc "&OK"]		\
+	    -width $maxWidth \
 	    -command [list tk::dialog::color::OkCmd $w]
-    button $botFrame.cancel -text [mc "Cancel"]	\
-	    -width $maxWidth -under 0				\
+    ::tk::AmpWidget button $botFrame.cancel -text [mc "&Cancel"]	\
+	    -width $maxWidth \
 	    -command [list tk::dialog::color::CancelCmd $w]
 
     set data(okBtn)      $botFrame.ok
@@ -303,14 +305,9 @@ proc ::tk::dialog::color::BuildDialog {w} {

     # Accelerator bindings
-
-    bind $w <Alt-r> [list focus $data(red,entry)]
-    bind $w <Alt-g> [list focus $data(green,entry)]
-    bind $w <Alt-b> [list focus $data(blue,entry)]
-    bind $w <Alt-s> [list focus $ent]
+    bind $lab <<AltUnderlined>> [list focus $ent]
     bind $w <KeyPress-Escape> [list tk::ButtonInvoke $data(cancelBtn)]
-    bind $w <Alt-c> [list tk::ButtonInvoke $data(cancelBtn)]
-    bind $w <Alt-o> [list tk::ButtonInvoke $data(okBtn)]
+    bind $w <Alt-Key> [list tk::AltKeyInDialog $w %A]
 
     wm protocol $w WM_DELETE_WINDOW [list tk::dialog::color::CancelCmd $w]
 }
diff --git a/library/msgbox.tcl b/library/msgbox.tcl
index 2c6e476..c102a62 100644
--- a/library/msgbox.tcl
+++ b/library/msgbox.tcl
@@ -3,7 +3,7 @@
 #	Implements messageboxes for platforms that do not have native
 #	messagebox support.
 #
-# RCS: @(#) $Id: msgbox.tcl,v 1.17 2002/06/06 01:09:41 a_kovalenko Exp $
+# RCS: @(#) $Id: msgbox.tcl,v 1.18 2002/06/10 00:15:42 a_kovalenko Exp $
 #
 # Copyright (c) 1994-1997 Sun Microsystems, Inc.
 #
@@ -170,73 +170,44 @@ proc ::tk::MessageBox {args} {
     }
 
     switch -- $data(-type) {
-	abortretryignore {
-	    set maxWidth [mcmax Abort Retry Ignore]
-	    set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-	    set buttons [list \
-		[list abort  -width $maxWidth -text [mc "Abort"] \
-		    -under 0]\
-		[list retry  -width $maxWidth -text [mc "Retry"] \
-		    -under 0]\
-		[list ignore -width $maxWidth -text [mc "Ignore"] \
-		    -under 0]\
-	    ]
+	abortretryignore { 
+	    set names [list abort retry ignore]
+	    set labels [list &Abort &Retry &Ignore]
 	}
 	ok {
-	    set buttons [list \
-		[list ok -width [mcmax OK] \
-		    -text [mc {OK}] -under 0] \
-	    ]
-	    if {[string equal $data(-default) ""]} {
-		set data(-default) "ok"
-	    }
+	    set names [list ok]
+	    set labels {&OK}
 	}
 	okcancel {
-	    set maxWidth [mcmax OK Cancel]
-	    set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-	    set buttons [list \
-		[list ok     -width $maxWidth \
-		    -text [mc "OK"]     -under 0] \
-		[list cancel -width $maxWidth \
-		    -text [mc "Cancel"] -under 0] \
-	    ]
+	    set names [list ok cancel]
+	    set labels [list &OK &Cancel]
 	}
 	retrycancel {
-	    set maxWidth [mcmax Retry Cancel]
-	    set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-	    set buttons [list \
-		[list retry  -width $maxWidth \
-		    -text [mc "Retry"]  -under 0] \
-		[list cancel -width $maxWidth \
-		    -text [mc "Cancel"] -under 0] \
-	    ]
+	    set names [list retry cancel]
+	    set labels [list &Retry &Cancel]
 	}
 	yesno {
-	    set maxWidth [mcmax Yes No]
-	    set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-	    set buttons [list \
-		[list yes    -width $maxWidth \
-		    -text [mc "Yes"] -under 0]\
-		[list no     -width $maxWidth \
-		    -text [mc "No"]  -under 0]\
-	    ]
+	    set names [list yes no]
+	    set labels [list &Yes &No]
 	}
 	yesnocancel {
-	    set maxWidth [mcmax Yes No Cancel]
-	    set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-	    set buttons [list \
-		[list yes    -width $maxWidth \
-		    -text [mc "Yes"] -under 0]\
-		[list no     -width $maxWidth \
-		    -text [mc "No"]  -under 0]\
-		[list cancel -width $maxWidth \
-		    -text [mc "Cancel"] -under 0]\
-	    ]
+	    set names [list yes no cancel]
+	    set labels [list &Yes &No &Cancel]
 	}
 	default {
 	    error "bad -type value \"$data(-type)\": must be abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel"
 	}
     }
+    
+    set maxWidth [eval mcmaxamp $labels]
+    if {$maxWidth <6} {
+	set maxWidth 6
+    }
+
+    set buttons {}
+    foreach name $names lab $labels {
+	lappend buttons [list $name -width $maxWidth -text [mc $lab]]
+    }
 
     # If no default button was specified, the default default is the 
     # first button (Bug: 2218).
@@ -365,7 +336,8 @@ proc ::tk::MessageBox {args} {
 	    set opts [list -text $capName]
 	}
 
-	eval button [list $w.$name] $opts [list -command [list set tk::Priv(button) $name]]
+	eval tk::AmpWidget \
+	    button [list $w.$name] $opts [list -command [list set tk::Priv(button) $name]]
 
 	if {[string equal $name $data(-default)]} {
 	    $w.$name configure -default active
@@ -376,14 +348,15 @@ proc ::tk::MessageBox {args} {
 
 	# create the binding for the key accelerator, based on the underline
 	#
-	set underIdx [$w.$name cget -under]
-	if {$underIdx >= 0} {
-	    set key [string index [$w.$name cget -text] $underIdx]
-	    bind $w <Alt-[string tolower $key]>  [list $w.$name invoke]
-	    bind $w <Alt-[string toupper $key]>  [list $w.$name invoke]
-	}
-	incr i
+        # set underIdx [$w.$name cget -under]
+        # if {$underIdx >= 0} {
+        #     set key [string index [$w.$name cget -text] $underIdx]
+        #     bind $w <Alt-[string tolower $key]>  [list $w.$name invoke]
+        #     bind $w <Alt-[string toupper $key]>  [list $w.$name invoke]
+        # }
+        # incr i
     }
+    bind $w <Alt-Key> [list ::tk::AltKeyInDialog $w %A]
 
     if {[string compare {} $data(-default)]} {
 	bind $w <FocusIn> {
diff --git a/library/msgs/cs.msg b/library/msgs/cs.msg
index 23d8e0a..e4014a3 100644
--- a/library/msgs/cs.msg
+++ b/library/msgs/cs.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset cs "Abort" "P\u0159eru\u0161it"
+    ::msgcat::mcset cs "&Abort" "&P\u0159eru\u0161it"
     ::msgcat::mcset cs "About..." "O programu..."
     ::msgcat::mcset cs "All Files" "V\u0161echny soubory"
     ::msgcat::mcset cs "Application Error" "Chyba programu"
-    ::msgcat::mcset cs "Blue" "Modr\341"
-    ::msgcat::mcset cs "Cancel" "Zru\u0161it"
+    ::msgcat::mcset cs "&Blue" "&Modr\341"
+    ::msgcat::mcset cs "&Cancel" "&Zru\u0161it"
     ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut."
     ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e"
     ::msgcat::mcset cs "Clear" "Smazat"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset cs "Delete" "Smazat"
     ::msgcat::mcset cs "Details >>" "Detaily >>"
     ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje."
-    ::msgcat::mcset cs "Directory:" "Adres\341\u0159:"
+    ::msgcat::mcset cs "&Directory:" "&Adres\341\u0159:"
     ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s"
     ::msgcat::mcset cs "Exit" "Konec"
     ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n"
     ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?"
     ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje."
-    ::msgcat::mcset cs "File name:" "Jm\351no souboru:"
-    ::msgcat::mcset cs "File names:" "Jm\351na soubor\u016f:"
-    ::msgcat::mcset cs "Files of type:" "Typy soubor\u016f:"
-    ::msgcat::mcset cs "Files:" "Soubory:"
-    ::msgcat::mcset cs "Filter" "Filtr"
-    ::msgcat::mcset cs "Filter:" "Filtr:"
-    ::msgcat::mcset cs "Green" "Zelen\341"
+    ::msgcat::mcset cs "File &name:" "&Jm\351no souboru:"
+    ::msgcat::mcset cs "File &names:" "&Jm\351na soubor\u016f:"
+    ::msgcat::mcset cs "Files of &type:" "&Typy soubor\u016f:"
+    ::msgcat::mcset cs "Fi&les:" "Sou&bory:"
+    ::msgcat::mcset cs "&Filter" "&Filtr"
+    ::msgcat::mcset cs "Fil&ter:" "Fil&tr:"
+    ::msgcat::mcset cs "&Green" "Ze&len\341"
     ::msgcat::mcset cs "Hi"
     ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu"
-    ::msgcat::mcset cs "Ignore" "Ignorovat"
+    ::msgcat::mcset cs "&Ignore" "&Ignorovat"
     ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"."
     ::msgcat::mcset cs "Log Files" "Log soubory"
-    ::msgcat::mcset cs "No" "Ne"
-    ::msgcat::mcset cs "OK"
+    ::msgcat::mcset cs "&No" "&Ne"
+    ::msgcat::mcset cs "&OK"
     ::msgcat::mcset cs "Ok"
     ::msgcat::mcset cs "Open" "Otev\u0159\355t"
+    ::msgcat::mcset cs "&Open" "&Otev\u0159\355t"
     ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f"
     ::msgcat::mcset cs "Paste" "Vlo\u017eit"
     ::msgcat::mcset cs "Quit" "Skon\u010dit"
-    ::msgcat::mcset cs "Red" "\u010cerven\341"
+    ::msgcat::mcset cs "&Red" " \u010ce&rven\341"
     ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?"
-    ::msgcat::mcset cs "Retry" "Znovu"
-    ::msgcat::mcset cs "Save" "Ulo\u017eit"
+    ::msgcat::mcset cs "&Retry" "Z&novu"
+    ::msgcat::mcset cs "&Save" "&Ulo\u017eit"
     ::msgcat::mcset cs "Save As" "Ulo\u017eit jako"
     ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu"
     ::msgcat::mcset cs "Select Log File" "Vybrat log soubor"
     ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355"
-    ::msgcat::mcset cs "Selection:" "V\375b\u011br:"
+    ::msgcat::mcset cs "&Selection:" "&V\375b\u011br:"
     ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy"
     ::msgcat::mcset cs "Source..." "Nahr\341t..."
     ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty"
     ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows"
     ::msgcat::mcset cs "Text Files" "Textov\351 soubory"
-    ::msgcat::mcset cs "Yes" "Ano"
+    ::msgcat::mcset cs "&Yes" "&Ano"
     ::msgcat::mcset cs "abort" "p\u0159eru\u0161it"
     ::msgcat::mcset cs "blue" "modr\341"
     ::msgcat::mcset cs "cancel" "zru\u0161it"
@@ -66,4 +67,4 @@ namespace eval ::tk {
     ::msgcat::mcset cs "red" "\u010derven\341"
     ::msgcat::mcset cs "retry" "znovu"
     ::msgcat::mcset cs "yes" "ano"
-}
\ No newline at end of file
+}
diff --git a/library/msgs/de.msg b/library/msgs/de.msg
index 5e10810..c5ae689 100644
--- a/library/msgs/de.msg
+++ b/library/msgs/de.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset de "Abort" "Abbruch"
+    ::msgcat::mcset de "&Abort" "&Abbruch"
     ::msgcat::mcset de "About..." "\u00dcber..."
     ::msgcat::mcset de "All Files" "Alle Dateien"
     ::msgcat::mcset de "Application Error" "Applikationsfehler"
-    ::msgcat::mcset de "Blue" "Blau"
-    ::msgcat::mcset de "Cancel" "Abbruch"
+    ::msgcat::mcset de "&Blue" "&Blau"
+    ::msgcat::mcset de "&Cancel" "&Abbruch"
     ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden."
     ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis"
     ::msgcat::mcset de "Clear" "R\u00fccksetzen"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset de "Delete" "L\u00f6schen"
     ::msgcat::mcset de "Details >>"
     ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht."
-    ::msgcat::mcset de "Directory:" "Verzeichnis:"
+    ::msgcat::mcset de "&Directory:" "&Verzeichnis:"
     ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s"
     ::msgcat::mcset de "Exit" "Ende"
     ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?"
     ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n"
     ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht."
-    ::msgcat::mcset de "File name:" "Dateiname:"
-    ::msgcat::mcset de "File names:" "Dateinamen:"
-    ::msgcat::mcset de "Files of type:" "Dateien des Typs:"
-    ::msgcat::mcset de "Files:" "Dateien:"
-    ::msgcat::mcset de "Filter"
-    ::msgcat::mcset de "Filter:"
-    ::msgcat::mcset de "Green" "Gr\u00fcn"
+    ::msgcat::mcset de "File &name:" "Datei&name:"
+    ::msgcat::mcset de "File &names:" "Datei&namen:"
+    ::msgcat::mcset de "Files of &type:" "Dateien des &Typs:"
+    ::msgcat::mcset de "Fi&les:" "Dat&eien:"
+    ::msgcat::mcset de "&Filter"
+    ::msgcat::mcset de "Fil&ter:"
+    ::msgcat::mcset de "&Green" "&Gr\u00fcn"
     ::msgcat::mcset de "Hi" "Hallo"
     ::msgcat::mcset de "Hide Console" "Konsole unsichtbar machen"
-    ::msgcat::mcset de "Ignore" "Ignorieren"
+    ::msgcat::mcset de "&Ignore" "&Ignorieren"
     ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"."
     ::msgcat::mcset de "Log Files" "Protokolldatei"
-    ::msgcat::mcset de "No" "Nein"
+    ::msgcat::mcset de "&No" "&Nein"
     ::msgcat::mcset de "OK"
     ::msgcat::mcset de "Ok"
     ::msgcat::mcset de "Open" "\u00d6ffnen"
+    ::msgcat::mcset de "&Open" "\u00d6&ffnen"
     ::msgcat::mcset de "Open Multiple Files"
     ::msgcat::mcset de "Paste" "Einf\u00fcgen"
     ::msgcat::mcset de "Quit" "Beenden"
-    ::msgcat::mcset de "Red" "Rot"
+    ::msgcat::mcset de "&Red" "&Rot"
     ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?"
-    ::msgcat::mcset de "Retry" "Wiederholen"
-    ::msgcat::mcset de "Save" "Speichern"
+    ::msgcat::mcset de "&Retry" "&Wiederholen"
+    ::msgcat::mcset de "&Save" "&Speichern"
     ::msgcat::mcset de "Save As" "Speichern unter"
     ::msgcat::mcset de "Save To Log" "In Protokoll speichern"
     ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen"
     ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen"
-    ::msgcat::mcset de "Selection:" "Auswahl:"
+    ::msgcat::mcset de "&Selection:" "Auswah&l:"
     ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen"
     ::msgcat::mcset de "Source..." "Ausf\u00fchren..."
     ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte"
     ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows"
     ::msgcat::mcset de "Text Files" "Textdateien"
-    ::msgcat::mcset de "Yes" "Ja"
+    ::msgcat::mcset de "&Yes" "&Ja"
     ::msgcat::mcset de "abort" "abbrechen"
     ::msgcat::mcset de "blue" "blau"
     ::msgcat::mcset de "cancel" "abbrechen"
@@ -66,4 +67,4 @@ namespace eval ::tk {
     ::msgcat::mcset de "red" "rot"
     ::msgcat::mcset de "retry" "wiederholen"
     ::msgcat::mcset de "yes" "ja"
-}
\ No newline at end of file
+}
diff --git a/library/msgs/el.msg b/library/msgs/el.msg
index ad2fff7..2e96cd9 100644
--- a/library/msgs/el.msg
+++ b/library/msgs/el.msg
@@ -3,12 +3,12 @@
 ##    [email-masked]
 
 namespace eval ::tk {
-    ::msgcat::mcset el "Abort"              "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2"
+    ::msgcat::mcset el "&Abort"              "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2"
     ::msgcat::mcset el "About..."           "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..."
     ::msgcat::mcset el "All Files"          "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1"
     ::msgcat::mcset el "Application Error"  "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2"
-    ::msgcat::mcset el "Blue"               "\u039c\u03c0\u03bb\u03b5"
-    ::msgcat::mcset el "Cancel"             "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7"
+    ::msgcat::mcset el "&Blue"               "\u039c\u03c0\u03bb\u03b5"
+    ::msgcat::mcset el "&Cancel"             "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7"
     ::msgcat::mcset el \
 "Cannot change to the directory \"%1\$s\".\nPermission denied." \
 "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9."
@@ -22,7 +22,7 @@ namespace eval ::tk {
     ::msgcat::mcset el "Details >>"         "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>"
     ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \
                                         "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9."
-    ::msgcat::mcset el "Directory:"         "\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:"
+    ::msgcat::mcset el "&Directory:"         "&\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:"
     ::msgcat::mcset el "Error: %1\$s"       "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s"
     ::msgcat::mcset el "Exit"               "\u0388\u03be\u03bf\u03b4\u03bf\u03c2"
     ::msgcat::mcset el \
@@ -32,44 +32,45 @@ namespace eval ::tk {
                    "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n"
     ::msgcat::mcset el "File \"%1\$s\" does not exist." \
                    "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9."
-    ::msgcat::mcset el "File name:"         "\u038c\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:"
-    ::msgcat::mcset el "File names:"        "\u038c\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:"
-    ::msgcat::mcset el "Files of type:"     "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03cd\u03c0\u03bf\u03c5:"
-    ::msgcat::mcset el "Files:"             "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:"
-    ::msgcat::mcset el "Filter"             "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf"
-    ::msgcat::mcset el "Filter:"            "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:"
-    ::msgcat::mcset el "Green"              "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"
+    ::msgcat::mcset el "File &name:"         "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:"
+    ::msgcat::mcset el "File &names:"        "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:"
+    ::msgcat::mcset el "Files of &type:"     "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &\u03c4\u03cd\u03c0\u03bf\u03c5:"
+    ::msgcat::mcset el "Fi&les:"             "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:"
+    ::msgcat::mcset el "&Filter"             "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf"
+    ::msgcat::mcset el "Fil&ter:"            "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:"
+    ::msgcat::mcset el "&Green"              "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"
     ::msgcat::mcset el "Hi"                 "\u0393\u03b5\u03b9\u03b1"
     ::msgcat::mcset el "Hide Console"       "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2"
-    ::msgcat::mcset el "Ignore"             "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7"
+    ::msgcat::mcset el "&Ignore"             "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7"
     ::msgcat::mcset el "Invalid file name \"%1\$s\"." \
                    "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"."
     ::msgcat::mcset el "Log Files"          "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"
-    ::msgcat::mcset el "No"                 "\u038c\u03c7\u03b9"
-    ::msgcat::mcset el "OK"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"
-    ::msgcat::mcset el "Ok"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"
+    ::msgcat::mcset el "&No"                 "\u038c\u03c7\u03b9"
+    ::msgcat::mcset el "&OK"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"
+    ::msgcat::mcset el "&Ok"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"
     ::msgcat::mcset el "Open"               "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"
+    ::msgcat::mcset el "&Open"               "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"
     ::msgcat::mcset el "Open Multiple Files" \
                                         "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd"
     ::msgcat::mcset el "Paste"              "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7"
     ::msgcat::mcset el "Quit"               "\u0388\u03be\u03bf\u03b4\u03bf\u03c2"
-    ::msgcat::mcset el "Red"                "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"
+    ::msgcat::mcset el "&Red"                "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"
     ::msgcat::mcset el "Replace existing file?" \
                                         "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;"
-    ::msgcat::mcset el "Retry"              "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac"
-    ::msgcat::mcset el "Save"               "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7"
+    ::msgcat::mcset el "&Retry"              "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac"
+    ::msgcat::mcset el "&Save"               "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7"
     ::msgcat::mcset el "Save As"            "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd"
     ::msgcat::mcset el "Save To Log"        "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"
     ::msgcat::mcset el "Select Log File"    "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"
     ::msgcat::mcset el "Select a file to source" \
                                         "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7"
-    ::msgcat::mcset el "Selection:"         "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:"
+    ::msgcat::mcset el "&Selection:"         "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:"
     ::msgcat::mcset el "Skip Messages"      "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd"
     ::msgcat::mcset el "Source..."          "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..."
     ::msgcat::mcset el "Tcl Scripts"        "Tcl Scripts"
     ::msgcat::mcset el "Tcl for Windows"    "Tcl \u03b3\u03b9\u03b1 Windows"
     ::msgcat::mcset el "Text Files"         "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5"
-    ::msgcat::mcset el "Yes"                "\u039d\u03b1\u03b9"
+    ::msgcat::mcset el "&Yes"                "\u039d\u03b1\u03b9"
     ::msgcat::mcset el "abort"              "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2"
     ::msgcat::mcset el "blue"               "\u03bc\u03c0\u03bb\u03b5"
     ::msgcat::mcset el "cancel"             "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7"
diff --git a/library/msgs/en.msg b/library/msgs/en.msg
index 3a64932..7242f91 100644
--- a/library/msgs/en.msg
+++ b/library/msgs/en.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset en "Abort"
+    ::msgcat::mcset en "&Abort"
     ::msgcat::mcset en "About..."
     ::msgcat::mcset en "All Files"
     ::msgcat::mcset en "Application Error"
-    ::msgcat::mcset en "Blue"
-    ::msgcat::mcset en "Cancel"
+    ::msgcat::mcset en "&Blue"
+    ::msgcat::mcset en "&Cancel"
     ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied."
     ::msgcat::mcset en "Choose Directory"
     ::msgcat::mcset en "Clear"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset en "Delete"
     ::msgcat::mcset en "Details >>"
     ::msgcat::mcset en "Directory \"%1\$s\" does not exist."
-    ::msgcat::mcset en "Directory:"
+    ::msgcat::mcset en "&Directory:"
     ::msgcat::mcset en "Error: %1\$s"
     ::msgcat::mcset en "Exit"
     ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?"
     ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n"
     ::msgcat::mcset en "File \"%1\$s\" does not exist."
-    ::msgcat::mcset en "File name:"
-    ::msgcat::mcset en "File names:"
-    ::msgcat::mcset en "Files of type:"
-    ::msgcat::mcset en "Files:"
-    ::msgcat::mcset en "Filter"
-    ::msgcat::mcset en "Filter:"
-    ::msgcat::mcset en "Green"
+    ::msgcat::mcset en "File &name:"
+    ::msgcat::mcset en "File &names:"
+    ::msgcat::mcset en "Files of &type:"
+    ::msgcat::mcset en "Fi&les:"
+    ::msgcat::mcset en "&Filter"
+    ::msgcat::mcset en "Fil&ter:"
+    ::msgcat::mcset en "&Green"
     ::msgcat::mcset en "Hi"
     ::msgcat::mcset en "Hide Console"
-    ::msgcat::mcset en "Ignore"
+    ::msgcat::mcset en "&Ignore"
     ::msgcat::mcset en "Invalid file name \"%1\$s\"."
     ::msgcat::mcset en "Log Files"
-    ::msgcat::mcset en "No"
-    ::msgcat::mcset en "OK"
+    ::msgcat::mcset en "&No"
+    ::msgcat::mcset en "&OK"
     ::msgcat::mcset en "Ok"
     ::msgcat::mcset en "Open"
+    ::msgcat::mcset en "&Open"
     ::msgcat::mcset en "Open Multiple Files"
     ::msgcat::mcset en "Paste"
     ::msgcat::mcset en "Quit"
-    ::msgcat::mcset en "Red"
+    ::msgcat::mcset en "&Red"
     ::msgcat::mcset en "Replace existing file?"
-    ::msgcat::mcset en "Retry"
-    ::msgcat::mcset en "Save"
+    ::msgcat::mcset en "&Retry"
+    ::msgcat::mcset en "&Save"
     ::msgcat::mcset en "Save As"
     ::msgcat::mcset en "Save To Log"
     ::msgcat::mcset en "Select Log File"
     ::msgcat::mcset en "Select a file to source"
-    ::msgcat::mcset en "Selection:"
+    ::msgcat::mcset en "&Selection:"
     ::msgcat::mcset en "Skip Messages"
     ::msgcat::mcset en "Source..."
     ::msgcat::mcset en "Tcl Scripts"
     ::msgcat::mcset en "Tcl for Windows"
     ::msgcat::mcset en "Text Files"
-    ::msgcat::mcset en "Yes"
+    ::msgcat::mcset en "&Yes"
     ::msgcat::mcset en "abort"
     ::msgcat::mcset en "blue"
     ::msgcat::mcset en "cancel"
@@ -66,4 +67,4 @@ namespace eval ::tk {
     ::msgcat::mcset en "red"
     ::msgcat::mcset en "retry"
     ::msgcat::mcset en "yes"
-}
\ No newline at end of file
+}
diff --git a/library/msgs/es.msg b/library/msgs/es.msg
index 140b40d..7de0fae 100644
--- a/library/msgs/es.msg
+++ b/library/msgs/es.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset es "Abort" "Abortar"
+    ::msgcat::mcset es "&Abort" "&Abortar"
     ::msgcat::mcset es "About..." "Acerca de ..."
     ::msgcat::mcset es "All Files" "Todos los archivos"
     ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n"
-    ::msgcat::mcset es "Blue" "Azul"
-    ::msgcat::mcset es "Cancel" "Cancelar"
+    ::msgcat::mcset es "&Blue" "&Azul"
+    ::msgcat::mcset es "&Cancel" "&Cancelar"
     ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado."
     ::msgcat::mcset es "Choose Directory" "Elegir directorio"
     ::msgcat::mcset es "Clear" "Borrar"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset es "Delete" "Borrar"
     ::msgcat::mcset es "Details >>" "Detalles >>"
     ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe."
-    ::msgcat::mcset es "Directory:" "Directorio:"
+    ::msgcat::mcset es "&Directory:" "&Directorio:"
     ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s"
     ::msgcat::mcset es "Exit" "Salir"
     ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?"
     ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n"
     ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe."
-    ::msgcat::mcset es "File name:" "Nombre de archivo:"
-    ::msgcat::mcset es "File names:" "Nombres de archivo:"
-    ::msgcat::mcset es "Files of type:" "Archivos de tipo:"
-    ::msgcat::mcset es "Files:" "Archivos:"
-    ::msgcat::mcset es "Filter" "Filtro"
-    ::msgcat::mcset es "Filter:" "Filtro:"
-    ::msgcat::mcset es "Green" "Verde"
+    ::msgcat::mcset es "File &name:" "&Nombre de archivo:"
+    ::msgcat::mcset es "File &names:" "&Nombres de archivo:"
+    ::msgcat::mcset es "Files of &type:" "Archivos de &tipo:"
+    ::msgcat::mcset es "Fi&les:" "&Archivos:"
+    ::msgcat::mcset es "&Filter" "&Filtro"
+    ::msgcat::mcset es "Fil&ter:" "Fil&tro:"
+    ::msgcat::mcset es "&Green" "&Verde"
     ::msgcat::mcset es "Hi" "Hola"
     ::msgcat::mcset es "Hide Console" "Esconder la consola"
-    ::msgcat::mcset es "Ignore" "Ignorar"
+    ::msgcat::mcset es "&Ignore" "&Ignorar"
     ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"."
     ::msgcat::mcset es "Log Files" "Ficheros de traza"
-    ::msgcat::mcset es "No" "No"
-    ::msgcat::mcset es "OK" "OK"
+    ::msgcat::mcset es "&No" "&No"
+    ::msgcat::mcset es "&OK" "&OK"
     ::msgcat::mcset es "Ok" "Ok"
     ::msgcat::mcset es "Open" "Abrir"
+    ::msgcat::mcset es "&Open" "&Abrir"
     ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos"
     ::msgcat::mcset es "Paste" "Pegar"
     ::msgcat::mcset es "Quit" "Abandonar"
-    ::msgcat::mcset es "Red" "Rojo"
+    ::msgcat::mcset es "&Red" "&Rojo"
     ::msgcat::mcset es "Replace existing file?" "Reemplazar el archivo existente?"
-    ::msgcat::mcset es "Retry" "Reintentar"
-    ::msgcat::mcset es "Save" "Salvar"
+    ::msgcat::mcset es "&Retry" "&Reintentar"
+    ::msgcat::mcset es "&Save" "&Salvar"
     ::msgcat::mcset es "Save As" "Salvar como"
     ::msgcat::mcset es "Save To Log" "Salvar al archivo de traza"
     ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza"
     ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar"
-    ::msgcat::mcset es "Selection:" "Selecci\u00f3n:"
+    ::msgcat::mcset es "&Selection:" "&Selecci\u00f3n:"
     ::msgcat::mcset es "Skip Messages" "Omitir los mensajes"
     ::msgcat::mcset es "Source..." "Evaluar..."
     ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl"
     ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows"
     ::msgcat::mcset es "Text Files" "Archivos de texto"
-    ::msgcat::mcset es "Yes" "S\u00ed" 
+    ::msgcat::mcset es "&Yes" "&S\u00ed" 
     ::msgcat::mcset es "abort" "abortar"
     ::msgcat::mcset es "blue" "azul"
     ::msgcat::mcset es "cancel" "cancelar"
diff --git a/library/msgs/fr.msg b/library/msgs/fr.msg
index b885cd4..6dba60a 100644
--- a/library/msgs/fr.msg
+++ b/library/msgs/fr.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset fr "Abort" "Annuler"
+    ::msgcat::mcset fr "&Abort" "&Annuler"
     ::msgcat::mcset fr "About..." "\u00c0 propos..."
     ::msgcat::mcset fr "All Files" "Tous les fichiers"
     ::msgcat::mcset fr "Application Error" "Erreur d'application"
-    ::msgcat::mcset fr "Blue" "Bleu"
-    ::msgcat::mcset fr "Cancel" "Annuler"
+    ::msgcat::mcset fr "&Blue" "&Bleu"
+    ::msgcat::mcset fr "&Cancel" "&Annuler"
     ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e."
     ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire"
     ::msgcat::mcset fr "Clear" "Effacer"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset fr "Delete" "Effacer"
     ::msgcat::mcset fr "Details >>" "D\u00e9tails >>"
     ::msgcat::mcset fr "Directory \"%1\$s\" does not exist."
-    ::msgcat::mcset fr "Directory:" "R\u00e9pertoire:"
+    ::msgcat::mcset fr "&Directory:" "&R\u00e9pertoire:"
     ::msgcat::mcset fr "Error: %1\$s"
     ::msgcat::mcset fr "Exit"
     ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?"
     ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n"
     ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas."
-    ::msgcat::mcset fr "File name:" "Nom de fichier:"
-    ::msgcat::mcset fr "File names:" "Noms de fichiers:"
-    ::msgcat::mcset fr "Files of type:" "Type de fichiers:"
-    ::msgcat::mcset fr "Files:" "Fichiers:"
-    ::msgcat::mcset fr "Filter" "Filtre"
-    ::msgcat::mcset fr "Filter:" "Filtre:"
-    ::msgcat::mcset fr "Green" "Vert"
+    ::msgcat::mcset fr "File &name:" "&Nom de fichier:"
+    ::msgcat::mcset fr "File &names:" "&Noms de fichiers:"
+    ::msgcat::mcset fr "Files of &type:" "&Type de fichiers:"
+    ::msgcat::mcset fr "Fi&les:" "Fich&iers:"
+    ::msgcat::mcset fr "&Filter" "&Filtre"
+    ::msgcat::mcset fr "Fil&ter:" "Fil&tre:"
+    ::msgcat::mcset fr "&Green" "&Vert"
     ::msgcat::mcset fr "Hi" "All\u00f4"
     ::msgcat::mcset fr "Hide Console" "Cacher la Console"
-    ::msgcat::mcset fr "Ignore" "Ignorer"
+    ::msgcat::mcset fr "&Ignore" "&Ignorer"
     ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"."
     ::msgcat::mcset fr "Log Files" "Fichiers de trace"
-    ::msgcat::mcset fr "No" "Non"
-    ::msgcat::mcset fr "OK"
+    ::msgcat::mcset fr "&No" "&Non"
+    ::msgcat::mcset fr "&OK"
     ::msgcat::mcset fr "Ok"
     ::msgcat::mcset fr "Open" "Ouvrir"
+    ::msgcat::mcset fr "&Open" "&Ouvrir"
     ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers"
     ::msgcat::mcset fr "Paste" "Coller"
     ::msgcat::mcset fr "Quit" "Abandonner"
-    ::msgcat::mcset fr "Red" "Rouge"
+    ::msgcat::mcset fr "&Red" "&Rouge"
     ::msgcat::mcset fr "Replace existing file?" "Remplacer fichier existant?"
-    ::msgcat::mcset fr "Retry" "R\u00e9-essayer"
-    ::msgcat::mcset fr "Save" "Sauvegarder"
+    ::msgcat::mcset fr "&Retry" "&R\u00e9-essayer"
+    ::msgcat::mcset fr "&Save" "&Sauvegarder"
     ::msgcat::mcset fr "Save As" "Sauvegarder sous"
     ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace"
     ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace"
     ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer"
-    ::msgcat::mcset fr "Selection:" "S\u00e9lection:"
+    ::msgcat::mcset fr "&Selection:" "&S\u00e9lection:"
     ::msgcat::mcset fr "Skip Messages" "Omettre les messages"
     ::msgcat::mcset fr "Source..." "\u00c9valuer..."
     ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl"
     ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows"
     ::msgcat::mcset fr "Text Files" "Fichiers texte"
-    ::msgcat::mcset fr "Yes" "Oui"
+    ::msgcat::mcset fr "&Yes" "&Oui"
     ::msgcat::mcset fr "abort" "annuler"
     ::msgcat::mcset fr "blue" "bleu"
     ::msgcat::mcset fr "cancel" "annuler"
@@ -66,4 +67,4 @@ namespace eval ::tk {
     ::msgcat::mcset fr "red" "rouge"
     ::msgcat::mcset fr "retry" "r\u00e9-essayer"
     ::msgcat::mcset fr "yes" "oui"
-}    
\ No newline at end of file
+}    
diff --git a/library/msgs/it.msg b/library/msgs/it.msg
index 189448f..9e6298b 100644
--- a/library/msgs/it.msg
+++ b/library/msgs/it.msg
@@ -1,10 +1,10 @@
 namespace eval ::tk {
-    ::msgcat::mcset it "Abort" "Interrompi"
+    ::msgcat::mcset it "&Abort" "&Interrompi"
     ::msgcat::mcset it "About..." "Informazioni ..."
     ::msgcat::mcset it "All Files" "Tutti i file"
     ::msgcat::mcset it "Application Error" "Errore dell' applicazione"
-    ::msgcat::mcset it "Blue" "Blu"
-    ::msgcat::mcset it "Cancel" "Annulla"
+    ::msgcat::mcset it "&Blue" "&Blu"
+    ::msgcat::mcset it "&Cancel" "&Annulla"
     ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato."
     ::msgcat::mcset it "Choose Directory" "Scegli directory"
     ::msgcat::mcset it "Clear" "Azzera"
@@ -15,46 +15,47 @@ namespace eval ::tk {
     ::msgcat::mcset it "Delete" "Incolla"
     ::msgcat::mcset it "Details >>" "Dettagli >>"
     ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste."
-    ::msgcat::mcset it "Directory:"
+    ::msgcat::mcset it "&Directory:"
     ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s"
     ::msgcat::mcset it "Exit" "Esci"
     ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?"
     ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n"
     ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste."
-    ::msgcat::mcset it "File name:" "Nome del file:"
-    ::msgcat::mcset it "File names:" "Nomi dei file:"
-    ::msgcat::mcset it "Files of type:" "File di tipo:"
-    ::msgcat::mcset it "Files:" "File:"
-    ::msgcat::mcset it "Filter" "Filtro"
-    ::msgcat::mcset it "Filter:" "Filtro:"
-    ::msgcat::mcset it "Green" "Verde"
+    ::msgcat::mcset it "File &name:" "&Nome del file:"
+    ::msgcat::mcset it "File &names:" "&Nomi dei file:"
+    ::msgcat::mcset it "Files of &type:" "File di &tipo:"
+    ::msgcat::mcset it "Fi&les:" "Fi&le:"
+    ::msgcat::mcset it "&Filter" "&Filtro"
+    ::msgcat::mcset it "Fil&ter:" "Fil&tro:"
+    ::msgcat::mcset it "&Green" "&Verde"
     ::msgcat::mcset it "Hi" "Salve"
     ::msgcat::mcset it "Hide Console" "Nascondi la console"
-    ::msgcat::mcset it "Ignore" "Ignora"
+    ::msgcat::mcset it "&Ignore" "&Ignora"
     ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"."
     ::msgcat::mcset it "Log Files" "File di log"
-    ::msgcat::mcset it "No"
-    ::msgcat::mcset it "OK"
+    ::msgcat::mcset it "&No"
+    ::msgcat::mcset it "&OK"
     ::msgcat::mcset it "Ok"
+    ::msgcat::mcset it "&Open" "A&pri"
     ::msgcat::mcset it "Open" "Apri"
     ::msgcat::mcset it "Open Multiple Files" "Apri file multipli"
     ::msgcat::mcset it "Paste" "Incolla"
     ::msgcat::mcset it "Quit" "Esci"
-    ::msgcat::mcset it "Red" "Rosso"
+    ::msgcat::mcset it "&Red" "&Rosso"
     ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?"
-    ::msgcat::mcset it "Retry" "Riprova"
-    ::msgcat::mcset it "Save" "Salva"
+    ::msgcat::mcset it "&Retry" "&Riprova"
+    ::msgcat::mcset it "&Save" "&Salva"
     ::msgcat::mcset it "Save As" "Salva come"
     ::msgcat::mcset it "Save To Log" "Salva il log"
     ::msgcat::mcset it "Select Log File" "Scegli un file di log"
     ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire"
-    ::msgcat::mcset it "Selection:" "Selezione:"
+    ::msgcat::mcset it "&Selection:" "&Selezione:"
     ::msgcat::mcset it "Skip Messages" "Salta i messaggi"
     ::msgcat::mcset it "Source..." "Esegui..."
     ::msgcat::mcset it "Tcl Scripts" "Scripts Tcl"
     ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows"
     ::msgcat::mcset it "Text Files" "File di testo"
-    ::msgcat::mcset it "Yes" "Si"
+    ::msgcat::mcset it "&Yes" "&Si"
     ::msgcat::mcset it "abort" "interrompi"
     ::msgcat::mcset it "blue" "blu"
     ::msgcat::mcset it "cancel" "annulla"
diff --git a/library/msgs/nl.msg b/library/msgs/nl.msg
index 63f4746..daad847 100644
--- a/library/msgs/nl.msg
+++ b/library/msgs/nl.msg
@@ -4,12 +4,12 @@ namespace eval ::tk {
     ::msgcat::mcset nl ", or" ", of"
     ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type"
     ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title"
-    ::msgcat::mcset nl "Abort" "Afbreken"
+    ::msgcat::mcset nl "&Abort" "&Afbreken"
     ::msgcat::mcset nl "About..." "Over..."
     ::msgcat::mcset nl "All Files" "Alle Bestanden"
     ::msgcat::mcset nl "Application Error" "Toepassingsfout"
-    ::msgcat::mcset nl "Blue" "Blauw"
-    ::msgcat::mcset nl "Cancel" "Annuleren"
+    ::msgcat::mcset nl "&Blue" "&Blauw"
+    ::msgcat::mcset nl "&Cancel" "&Annuleren"
     ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft geen toestemming hiervoor."
     ::msgcat::mcset nl "Choose Directory" "Kies map"
     ::msgcat::mcset nl "Clear" "Wissen"
@@ -22,7 +22,7 @@ namespace eval ::tk {
     ::msgcat::mcset nl "Details"
     ::msgcat::mcset nl "Details >>"
     ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet."
-    ::msgcat::mcset nl "Directory:" "Map:"
+    ::msgcat::mcset nl "&Directory:" "&Map:"
     ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Toets \"%1\$s\", druk op OK"
     ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Toets \"%1\$s\", druk op OK, toets \"%2\$s\", druk op OK"
     ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s"
@@ -30,21 +30,22 @@ namespace eval ::tk {
     ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n"
     ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?"
     ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet."
-    ::msgcat::mcset nl "File name:" "Bestandsnaam:"
-    ::msgcat::mcset nl "File names:" "Bestandsnamen:"
-    ::msgcat::mcset nl "Files of type:" "Bestanden van het type:"
-    ::msgcat::mcset nl "Files:" "Bestanden:"
-    ::msgcat::mcset nl "Filter"
-    ::msgcat::mcset nl "Filter:"
-    ::msgcat::mcset nl "Green" "Groen"
+    ::msgcat::mcset nl "File &name:" "Bestands&naam:"
+    ::msgcat::mcset nl "File &names:" "Bestands&namen:"
+    ::msgcat::mcset nl "Files of &type:" "Bestanden van het &type:"
+    ::msgcat::mcset nl "Fi&les:" "&Bestanden:"
+    ::msgcat::mcset nl "&Filter"
+    ::msgcat::mcset nl "Fil&ter:"
+    ::msgcat::mcset nl "&Green" "&Groen"
     ::msgcat::mcset nl "Hi" "H\u00e9"
     ::msgcat::mcset nl "Hide Console" "Verberg Console"
-    ::msgcat::mcset nl "Ignore"
+    ::msgcat::mcset nl "&Ignore"
     ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"."
     ::msgcat::mcset nl "Log Files" "Log Bestanden"
-    ::msgcat::mcset nl "No" "Nee"
-    ::msgcat::mcset nl "OK"
+    ::msgcat::mcset nl "&No" "&Nee"
+    ::msgcat::mcset nl "&OK"
     ::msgcat::mcset nl "Ok"
+    ::msgcat::mcset nl "&Open" "&Openen"
     ::msgcat::mcset nl "Open" "Openen"
     ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden"
     ::msgcat::mcset nl "Paste" "Plakken"
@@ -53,21 +54,21 @@ namespace eval ::tk {
     ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren"
     ::msgcat::mcset nl "Press Ok" "Druk op Ok"
     ::msgcat::mcset nl "Quit" "Stoppen"
-    ::msgcat::mcset nl "Red" "Rood"
+    ::msgcat::mcset nl "&Red" "&Rood"
     ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?"
-    ::msgcat::mcset nl "Retry" "Opnieuw"
-    ::msgcat::mcset nl "Save" "Opslaan"
+    ::msgcat::mcset nl "&Retry" "O&nieuw"
+    ::msgcat::mcset nl "&Save" "Op&slaan"
     ::msgcat::mcset nl "Save As" "Opslaan als"
     ::msgcat::mcset nl "Save To Log" "Opslaan naar Log"
     ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand"
     ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand"
-    ::msgcat::mcset nl "Selection:" "Selectie:"
+    ::msgcat::mcset nl "&Selection:" "&Selectie:"
     ::msgcat::mcset nl "Skip Messages" "Berichten overslaan"
     ::msgcat::mcset nl "Source..." "Bron..."
     ::msgcat::mcset nl "Tcl Scripts"
     ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows"
     ::msgcat::mcset nl "Text Files" "Tekst Bestanden"
-    ::msgcat::mcset nl "Yes" "Ja"
+    ::msgcat::mcset nl "&Yes" "&Ja"
     ::msgcat::mcset nl "abort" "afbreken"
     ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja"
     ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel"
diff --git a/library/msgs/ru.msg b/library/msgs/ru.msg
new file mode 100644
index 0000000..9f6aa80
--- /dev/null
+++ b/library/msgs/ru.msg
@@ -0,0 +1,73 @@
+namespace eval ::tk {
+    ::msgcat::mcset ru "&Abort" "&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c"
+    ::msgcat::mcset ru "About..." "\u041f\u0440\u043e..."
+    ::msgcat::mcset ru "All Files" "\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b"
+    ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435"
+    ::msgcat::mcset ru "&Blue" " &\u0413\u043e\u043b\u0443\u0431\u043e\u0439"
+    ::msgcat::mcset ru "&Cancel" "\u041e\u0442&\u043c\u0435\u043d\u0430"
+    ::msgcat::mcset ru "Cannot change to the directory \"%1\$s\".\nPermission denied." \
+			"\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \"%1\$s\".\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430"
+    ::msgcat::mcset ru "Choose Directory" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433"
+    ::msgcat::mcset ru "Clear" "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c"
+    ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442"
+    ::msgcat::mcset ru "Console" "\u041a\u043e\u043d\u0441\u043e\u043b\u044c"
+    ::msgcat::mcset ru "Copy" "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c"
+    ::msgcat::mcset ru "Cut" "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c"
+    ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c"
+    ::msgcat::mcset ru "Details >>" "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 >>"
+    ::msgcat::mcset ru "Directory \"%1\$s\" does not exist." "\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \"%1\$s\" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442."
+    ::msgcat::mcset ru "&Directory:" "&\u041a\u0430\u0442\u0430\u043b\u043e\u0433:"
+    ::msgcat::mcset ru "Error: %1\$s" "\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s" 
+    ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434"
+    ::msgcat::mcset ru "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \
+			    "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?"
+    ::msgcat::mcset ru "File \"%1\$s\" already exists.\n\n" "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\n"
+    ::msgcat::mcset ru "File \"%1\$s\" does not exist." "\u0424\u0430\u0439\u043b \"%1\$s\" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d."
+    ::msgcat::mcset ru "File &name:" "&\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:"
+    ::msgcat::mcset ru "File &names:" "&\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:"
+    ::msgcat::mcset ru "Files of &type:" "&\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:"
+    ::msgcat::mcset ru "Fi&les:" "\u0424\u0430\u0439&\u043b\u044b:"
+    ::msgcat::mcset ru "&Filter" "&\u0424\u0438\u043b\u044c\u0442\u0440"
+    ::msgcat::mcset ru "Fil&ter:" "\u0424\u0438\u043b\u044c&\u0442\u0440:"
+    ::msgcat::mcset ru "&Green" " &\u0417\u0435\u043b\u0435\u043d\u044b\u0439"
+    ::msgcat::mcset ru "Hi" "\u041f\u0440\u0438\u0432\u0435\u0442"
+    ::msgcat::mcset ru "Hide Console" "\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c"
+    ::msgcat::mcset ru "&Ignore" "&\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c"
+    ::msgcat::mcset ru "Invalid file name \"%1\$s\"." "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \"%1\$s\"." 
+    ::msgcat::mcset ru "Log Files" "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430"
+    ::msgcat::mcset ru "&No" "&\u041d\u0435\u0442"
+    ::msgcat::mcset ru "&OK" "&\u041e\u041a"
+    ::msgcat::mcset ru "Ok" "\u0414\u0430"
+    ::msgcat::mcset ru "Open" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c"
+    ::msgcat::mcset ru "&Open" "&\u041e\u0442\u043a\u0440\u044b\u0442\u044c"
+    ::msgcat::mcset ru "Open Multiple Files" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432"
+    ::msgcat::mcset ru "Paste" "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c"
+    ::msgcat::mcset ru "Quit" "\u0412\u044b\u0445\u043e\u0434"
+    ::msgcat::mcset ru "&Red" " &\u041a\u0440\u0430\u0441\u043d\u044b\u0439"
+    ::msgcat::mcset ru "Replace existing file?" "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?"
+    ::msgcat::mcset ru "&Retry" "&\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c"
+    ::msgcat::mcset ru "&Save" "&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c"
+    ::msgcat::mcset ru "Save As" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a"
+    ::msgcat::mcset ru "Save To Log" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b"
+    ::msgcat::mcset ru "Select Log File" "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b"
+    ::msgcat::mcset ru "Select a file to source" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438"
+    ::msgcat::mcset ru "&Selection:" "&Selection:"
+    ::msgcat::mcset ru "Skip Messages" "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f"
+    ::msgcat::mcset ru "Source..." "\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b..."
+    ::msgcat::mcset ru "Tcl Scripts" "\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL"
+    ::msgcat::mcset ru "Tcl for Windows" "TCL \u0434\u043b\u044f Windows"
+    ::msgcat::mcset ru "Text Files" "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b"
+    ::msgcat::mcset ru "&Yes" "&\u0414\u0430"
+    ::msgcat::mcset ru "abort" "\u043e\u0442\u043c\u0435\u043d\u0430"
+    ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439"
+    ::msgcat::mcset ru "cancel" "\u043e\u0442\u043c\u0435\u043d\u0430"
+    ::msgcat::mcset ru "extension" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435"
+    ::msgcat::mcset ru "extensions" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f"
+    ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439"
+    ::msgcat::mcset ru "ignore" "\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c"
+    ::msgcat::mcset ru "ok" "\u043e\u043a"
+    ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439"
+    ::msgcat::mcset ru "retry" "\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c"
+    ::msgcat::mcset ru "yes" "\u0434\u0430"
+}
+
diff --git a/library/tk.tcl b/library/tk.tcl
index 679b786..165b56d 100644
--- a/library/tk.tcl
+++ b/library/tk.tcl
@@ -3,7 +3,7 @@
 # Initialization script normally executed in the interpreter for each
 # Tk-based application.  Arranges class bindings for widgets.
 #
-# RCS: @(#) $Id: tk.tcl,v 1.40 2002/05/20 13:59:02 dgp Exp $
+# RCS: @(#) $Id: tk.tcl,v 1.41 2002/06/10 00:15:42 a_kovalenko Exp $
 #
 # Copyright (c) 1992-1994 The Regents of the University of California.
 # Copyright (c) 1994-1996 Sun Microsystems, Inc.
@@ -443,3 +443,113 @@ proc ::tk::TabToWindow {w} {
     focus $w
 }
 
+# ::tk::UnderlineAmpersand --
+# This procedure takes some text with ampersand and returns
+# text w/o ampersand and position of the ampersand.
+# Double ampersands are converted to single ones.
+# Position returned is -1 when there is no ampersand.
+#
+proc ::tk::UnderlineAmpersand {text} {
+    set idx [string first "&" $text]
+    if {$idx >= 0} {
+	set underline $idx
+	# ignore "&&"
+	while {[string match "&" [string index $text [expr {$idx + 1}]]]} {
+	    set base [expr {$idx + 2}]
+	    set idx  [string first "&" [string range $text $base end]]
+	    if {$idx < 0} {
+		break
+	    } else {
+		set underline [expr {$underline + $idx + 1}]
+		incr idx $base
+	    }
+	}
+    }
+    if {$idx >= 0} {
+	regsub -all -- {&([^&])} $text {\1} text
+    } 
+    return [list $text $idx]
+}
+
+# ::tk::SetAmpText -- 
+# Given widget path and text with "magic ampersands",
+# sets -text and -underline options for the widget
+#
+proc ::tk::SetAmpText {widget text} {
+    foreach {newtext under} [::tk::UnderlineAmpersand $text] {
+	$widget configure -text $newtext -underline $under
+    }
+}
+
+# ::tk::AmpWidget --
+# Creates new widget, turning -text option into -text and
+# -underline options, returned by ::tk::UnderlineAmpersand.
+#
+proc ::tk::AmpWidget {class path args} {
+    set wcmd [list $class $path]
+    foreach {opt val} $args {
+	if {[string equal $opt {-text}]} {
+	    foreach {newtext under} [::tk::UnderlineAmpersand $val] {
+		lappend wcmd -text $newtext -underline $under
+	    }
+	} else {
+	    lappend wcmd $opt $val
+	}
+    }
+    eval $wcmd
+    if {$class=="button"} {
+	bind $path <<AltUnderlined>> [list $path invoke]
+    }
+    return $path
+}
+
+# ::tk::FindAltKeyTarget --
+# search recursively through the hierarchy of visible widgets
+# to find button or label which has $char as underlined character
+#
+proc ::tk::FindAltKeyTarget {path char} {
+    switch [winfo class $path] {
+	Button -
+	Label {
+	    if {[string equal -nocase $char \
+		[string index [$path cget -text] \
+		[$path cget -underline]]]} {return $path} else {return {}}
+	}
+	default {
+	    foreach child \
+		[concat [grid slaves $path] \
+		[pack slaves $path] \
+		[place slaves $path] ] {
+		if {""!=[set target [::tk::FindAltKeyTarget $child $char]]} {
+		    return $target
+		}
+	    }
+	}
+    }
+    return {}
+}
+
+# ::tk::AltKeyInDialog --
+# <Alt-Key> event handler for standard dialogs. Sends <<AltUnderlined>>
+# to button or label which has appropriate underlined character
+#
+proc ::tk::AltKeyInDialog {path key} {
+    set target [::tk::FindAltKeyTarget $path $key]
+    if { $target == ""} return
+    event generate $target <<AltUnderlined>>
+}
+
+# ::tk::mcmaxamp --
+# Replacement for mcmax, used for texts with "magic ampersand" in it.
+#
+
+proc ::tk::mcmaxamp {args} {
+    set maxlen 0
+    foreach arg $args {
+	set length [string length [lindex [::tk::UnderlineAmpersand [mc $arg]] 0]]
+	if {$length>$maxlen} {
+	    set maxlen $length
+	}
+    }
+    return $maxlen
+}
diff --git a/library/tkfbox.tcl b/library/tkfbox.tcl
index 0522210..1a923fb 100644
--- a/library/tkfbox.tcl
+++ b/library/tkfbox.tcl
@@ -11,7 +11,7 @@
 #	files by clicking on the file icons or by entering a filename
 #	in the "Filename:" entry.
 #
-# RCS: @(#) $Id: tkfbox.tcl,v 1.33 2002/04/29 13:17:44 bagnonm Exp $
+# RCS: @(#) $Id: tkfbox.tcl,v 1.34 2002/06/10 00:15:42 a_kovalenko Exp $
 #
 # Copyright (c) 1994-1998 Sun Microsystems, Inc.
 #
@@ -979,7 +979,9 @@ proc ::tk::dialog::file::Create {w class} {
     # f1: the frame with the directory option menu
     #
     set f1 [frame $w.f1]
-    label $f1.lab -text "[mc "Directory:"]" -under 0
+    bind [::tk::AmpWidget label $f1.lab -text "[mc "&Directory:"]" ] \
+	<<AltUnderlined>> [list focus $f1.menu]
+    
     set data(dirMenuBtn) $f1.menu
     set data(dirMenu) [tk_optionMenu $f1.menu [format %s(selectPath) ::tk::dialog::file::$dataName] ""]
     set data(upBtn) [button $f1.up]
@@ -1007,18 +1009,16 @@ static char updir_bits[] = {
     #
     if { [string equal $class TkFDialog] } {
 	if { $data(-multiple) } {
-	    set fNameCaption "[mc {File names:}]"
+	    set fNameCaption "[mc {File &names:}]"
 	} else {
-	    set fNameCaption "[mc {File name:}]"
+	    set fNameCaption "[mc {File &name:}]"
 	}
-	set fTypeCaption [mc "Files of type:"]
-	set fCaptionWidth [mcmax $fNameCaption $fTypeCaption]
+	set fTypeCaption [mc "Files of &type:"]
+	set fCaptionWidth [::tk::mcmaxamp $fNameCaption $fTypeCaption]
 	set fCaptionWidth [expr {$fCaptionWidth<14?14:$fCaptionWidth}]
-	set fNameUnder 5
 	set iconListCommand [list ::tk::dialog::file::OkCmd $w]
     } else {
-	set fNameCaption [mc "Selection:"]
-	set fNameUnder 0
+	set fNameCaption [mc "&Selection:"]
 	set fCaptionWidth [string length $fNameCaption]
 	set iconListCommand [list ::tk::dialog::file::chooseDir::DblClick $w]
     }
@@ -1031,8 +1031,8 @@ static char updir_bits[] = {
     # f2: the frame with the OK button and the "file name" field
     #
     set f2 [frame $w.f2 -bd 0]
-    label $f2.lab -text $fNameCaption -anchor e -width $fCaptionWidth \
-	    -under $fNameUnder -pady 0
+    bind [::tk::AmpWidget label $f2.lab -text $fNameCaption -anchor e -width $fCaptionWidth \
+	    -pady 0] <<AltUnderlined>> [list focus $f2.ent]
     set data(ent) [entry $f2.ent]
 
     # The font to use for the icons. The default Canvas font on Unix
@@ -1051,8 +1051,8 @@ static char updir_bits[] = {
 	# use a button widget to emulate a label widget (by setting its
 	# bindtags)
 	
-	set data(typeMenuLab) [button $f3.lab -text $fTypeCaption \
-		-anchor e -width $fCaptionWidth -under 9 \
+	set data(typeMenuLab) [::tk::AmpWidget button $f3.lab -text $fTypeCaption \
+		-anchor e -width $fCaptionWidth \
 		-bd [$f2.lab cget -bd] \
 		-highlightthickness [$f2.lab cget -highlightthickness] \
 		-relief [$f2.lab cget -relief] \
@@ -1060,22 +1060,23 @@ static char updir_bits[] = {
 		-pady [$f2.lab cget -pady]]
 	bindtags $data(typeMenuLab) [list $data(typeMenuLab) Label \
 		[winfo toplevel $data(typeMenuLab)] all]
-	
 	set data(typeMenuBtn) [menubutton $f3.menu -indicatoron 1 \
 		-menu $f3.menu.m]
 	set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0]
 	$data(typeMenuBtn) config -takefocus 1 -highlightthickness 2 \
 		-relief raised -bd 2 -anchor w
+        bind $data(typeMenuLab) <<AltUnderlined>> [list focus \
+	    $data(typeMenuBtn)]
     }
 
     # the okBtn is created after the typeMenu so that the keyboard traversal
     # is in the right order
-	set maxWidth [mcmax OK Cancel]
+	set maxWidth [::tk::mcmaxamp &OK &Cancel]
 	set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-    set data(okBtn)     [button $f2.ok     -text "[mc "OK"]" \
-	-under 0 -width $maxWidth -default active -pady 3]
-    set data(cancelBtn) [button $f3.cancel -text "[mc "Cancel"]" \
-	-under 0 -width $maxWidth -default normal -pady 3]
+    set data(okBtn)     [::tk::AmpWidget button $f2.ok     -text "[mc "&OK"]" \
+	-width $maxWidth -default active -pady 3]
+    set data(cancelBtn) [::tk::AmpWidget button $f3.cancel -text "[mc "&Cancel"]" \
+	-width $maxWidth -default normal -pady 3]
 
     # pack the widgets in f2 and f3
     #
@@ -1103,9 +1104,7 @@ static char updir_bits[] = {
     $data(upBtn)     config -command [list ::tk::dialog::file::UpDirCmd $w]
     $data(cancelBtn) config -command [list ::tk::dialog::file::CancelCmd $w]
     bind $w <KeyPress-Escape> [list tk::ButtonInvoke $data(cancelBtn)]
-    bind $w <Alt-c> [list tk::ButtonInvoke $data(cancelBtn)]
-    bind $w <Alt-d> [list focus $data(dirMenuBtn)]
-
+    bind $w <Alt-Key> [list tk::AltKeyInDialog $w %A]
     # Set up event handlers specific to File or Directory Dialogs
     #
 
@@ -1117,9 +1116,6 @@ static char updir_bits[] = {
 		focus %s
 	    }
 	} $data(typeMenuBtn) $data(typeMenuBtn)]
-	bind $w <Alt-n> [list focus $data(ent)]
-	bind $w <Alt-o> [list ::tk::dialog::file::InvokeBtn $w Open]
-	bind $w <Alt-s> [list ::tk::dialog::file::InvokeBtn $w Save]
     } else {
 	set okCmd [list ::tk::dialog::file::chooseDir::OkCmd $w]
 	bind $data(ent) <Return> $okCmd
@@ -1150,13 +1146,12 @@ proc ::tk::dialog::file::SetSelectMode {w multi} {
     set dataName __tk_filedialog
     upvar ::tk::dialog::file::$dataName data
     if { $multi } {
-	set fNameCaption "[mc {File names:}]"
+	set fNameCaption "[mc {File &names:}]"
     } else {
-	set fNameCaption "[mc {File name:}]"
+	set fNameCaption "[mc {File &name:}]"
     }
-    set fNameUnder 5
     set iconListCommand [list ::tk::dialog::file::OkCmd $w]
-    $w.f2.lab configure -text $fNameCaption -under $fNameUnder
+    ::tk::SetAmpText $w.f2.lab $fNameCaption 
     ::tk::IconList_Config $data(icons) \
 	    [list -multiple $multi -command $iconListCommand]
     return
@@ -1307,19 +1302,19 @@ rSASvJTGhnhcV3EJlo3kh53ltF5nAhQAOw==}]
 	# Restore the Open/Save Button if this is a File Dialog
 	#
 	if {[string equal $data(type) open]} {
-	    $data(okBtn) config -text "[mc "Open"]"
-		set maxWidth [string length [mc "Open"]]
-		if {$maxWidth>[$data(okBtn) cget -width]} {
-			$data(okBtn) config -width $maxWidth
-			$data(cancelBtn) config -width $maxWidth
-		}
+	    ::tk::SetAmpText $data(okBtn) [mc "&Open"]
+	    set maxWidth [::tk::mcmaxamp [mc "&Open"]]
+	    if {$maxWidth>[$data(okBtn) cget -width]} {
+		    $data(okBtn) config -width $maxWidth
+		    $data(cancelBtn) config -width $maxWidth
+	    }
 	} else {
-	    $data(okBtn) config -text "[mc "Save"]"
-		set maxWidth [string length [mc "Save"]]
-		if {$maxWidth>[$data(okBtn) cget -width]} {
-			$data(okBtn) config -width $maxWidth
-			$data(cancelBtn) config -width $maxWidth
-		}
+	    ::tk::SetAmpText $data(okBtn) [mc "&Save"]
+	    set maxWidth [::tk::mcmaxamp [mc "&Save"]]
+	    if {$maxWidth>[$data(okBtn) cget -width]} {
+		    $data(okBtn) config -width $maxWidth
+		    $data(cancelBtn) config -width $maxWidth
+	    }
 	}
     }
 
@@ -1508,9 +1503,9 @@ proc ::tk::dialog::file::EntFocusIn {w} {
     if { [string equal [winfo class $w] TkFDialog] } {
 	# If this is a File Dialog, make sure the buttons are labeled right.
 	if {[string equal $data(type) open]} {
-	    $data(okBtn) config -text "[mc "Open"]"
+	    ::tk::SetAmpText $data(okBtn) [mc "&Open"]
 	} else {
-	    $data(okBtn) config -text "[mc "Save"]"
+	    ::tk::SetAmpText $data(okBtn) [mc "&Save"]
 	}
     }
 }
@@ -1710,14 +1705,14 @@ proc ::tk::dialog::file::ListBrowse {w} {
 
 	if { [string equal [winfo class $w] TkFDialog] } {
 	    if {[string equal $data(type) open]} {
-		$data(okBtn) config -text "[mc "Open"]"
+		::tk::SetAmpText $data(okBtn) [mc "&Open"]
 	    } else {
-		$data(okBtn) config -text "[mc "Save"]"
+		::tk::SetAmpText $data(okBtn) [mc "&Save"]
 	    }
 	}
     } else {
 	if { [string equal [winfo class $w] TkFDialog] } {
-	    $data(okBtn) config -text "[mc "Open"]"
+	    ::tk::SetAmpText $data(okBtn) [mc "&Open"]
 	}
     }
 }
diff --git a/library/xmfbox.tcl b/library/xmfbox.tcl
index e2c9194..4fec52c 100644
--- a/library/xmfbox.tcl
+++ b/library/xmfbox.tcl
@@ -4,7 +4,7 @@
 #	Unix platform. This implementation is used only if the
 #	"::tk_strictMotif" flag is set.
 #
-# RCS: @(#) $Id: xmfbox.tcl,v 1.19 2002/04/29 13:17:44 bagnonm Exp $
+# RCS: @(#) $Id: xmfbox.tcl,v 1.20 2002/06/10 00:15:42 a_kovalenko Exp $
 #
 # Copyright (c) 1996 Sun Microsystems, Inc.
 # Copyright (c) 1998-2000 Scriptics Corporation
@@ -323,7 +323,8 @@ proc ::tk::MotifFDialog_BuildUI {w} {
 
     # The Filter box
     #
-    label $f1.lab -text [mc "Filter:"] -under 3 -anchor w
+    bind [::tk::AmpWidget label $f1.lab -text [mc "Fil&ter:"] -anchor w] \
+	<<AltUnderlined>> [list focus $f1.ent]
     entry $f1.ent
     pack $f1.lab -side top -fill x -padx 6 -pady 4
     pack $f1.ent -side top -fill x -padx 4 -pady 0
@@ -332,13 +333,14 @@ proc ::tk::MotifFDialog_BuildUI {w} {
     # The file and directory lists
     #
     set data(dList) [MotifFDialog_MakeSList $w $f2a \
-	    [mc "Directory:"] 0 DList]
+	    [mc "&Directory:"] DList]
     set data(fList) [MotifFDialog_MakeSList $w $f2b \
-	    [mc "Files:"]     2 FList]
+	    [mc "Fi&les:"]     FList]
 
     # The Selection box
     #
-    label $f3.lab -text [mc "Selection:"] -under 0 -anchor w
+    bind [::tk::AmpWidget label $f3.lab -text [mc "&Selection:"] -anchor w] \
+	<<AltUnderlined>> [list focus $f3.ent]
     entry $f3.ent
     pack $f3.lab -side top -fill x -padx 6 -pady 0
     pack $f3.ent -side top -fill x -padx 4 -pady 4
@@ -346,16 +348,16 @@ proc ::tk::MotifFDialog_BuildUI {w} {
 
     # The buttons
     #
-    set maxWidth [mcmax OK Filter Cancel]
+    set maxWidth [::tk::mcmaxamp &OK &Filter &Cancel]
     set maxWidth [expr {$maxWidth<6?6:$maxWidth}]
-    set data(okBtn) [button $bot.ok -text [mc "OK"] \
-	    -width $maxWidth -under 0 \
+    set data(okBtn) [::tk::AmpWidget button $bot.ok -text [mc "&OK"] \
+	    -width $maxWidth \
 	    -command [list tk::MotifFDialog_OkCmd $w]]
-    set data(filterBtn) [button $bot.filter -text [mc "Filter"] \
-	    -width $maxWidth -under 0 \
+    set data(filterBtn) [::tk::AmpWidget button $bot.filter -text [mc "&Filter"] \
+	    -width $maxWidth \
 	    -command [list tk::MotifFDialog_FilterCmd $w]]
-    set data(cancelBtn) [button $bot.cancel -text [mc "Cancel"] \
-	    -width $maxWidth -under 0 \
+    set data(cancelBtn) [::tk::AmpWidget button $bot.cancel -text [mc "&Cancel"] \
+	    -width $maxWidth \
 	    -command [list tk::MotifFDialog_CancelCmd $w]]
 
     pack $bot.ok $bot.filter $bot.cancel -padx 10 -pady 10 -expand yes \
@@ -363,14 +365,7 @@ proc ::tk::MotifFDialog_BuildUI {w} {
 
     # Create the bindings:
     #
-    bind $w <Alt-t> [list focus $data(fEnt)]
-    bind $w <Alt-d> [list focus $data(dList)]
-    bind $w <Alt-l> [list focus $data(fList)]
-    bind $w <Alt-s> [list focus $data(sEnt)]
-
-    bind $w <Alt-o> [list tk::ButtonInvoke $bot.ok]
-    bind $w <Alt-f> [list tk::ButtonInvoke $bot.filter]
-    bind $w <Alt-c> [list tk::ButtonInvoke $bot.cancel]
+    bind $w <Alt-Key> [list ::tk::AltKeyInDialog $w %A]
 
     bind $data(fEnt) <Return> [list tk::MotifFDialog_ActivateFEnt $w]
     bind $data(sEnt) <Return> [list tk::MotifFDialog_ActivateSEnt $w]
@@ -405,8 +400,9 @@ proc ::tk::MotifFDialog_SetListMode {w} {
 #	cmdPrefix	Specifies procedures to call when the listbox is
 #			browsed or activated.
 
-proc ::tk::MotifFDialog_MakeSList {w f label under cmdPrefix} {
-    label $f.lab -text $label -under $under -anchor w
+proc ::tk::MotifFDialog_MakeSList {w f label cmdPrefix} {
+    bind [::tk::AmpWidget label $f.lab -text $label -anchor w] \
+	<<AltUnderlined>> [list focus $f.l]
     listbox $f.l -width 12 -height 5 -exportselection 0\
 	-xscrollcommand [list $f.h set]	-yscrollcommand [list $f.v set]
     scrollbar $f.v -orient vertical   -takefocus 0 -command [list $f.l yview]
-- 
cgit v0.12