[WJG] (04/11/07) This week I've spent too many hours using [OpenOffice] correcting simple single and double quotes in page after page of text files created in my Tk based text editor. Pity I didn't sit down and complete the following proc and use it some time ago. If anyone has any suggestion please include them but please don't change the original code -just add comments to the end of the file. #--------------- # balanceQuotes.tcl #--------------- # William J Giddings # 04/11/07 #--------------- # Enable context sensitive quotations. # If the input quote mark is preceded by a printable character, # then closequote otherwise openquote! # #--------------- # Notes: # This is not "smart" and so doesn't attempt to ballance quote marks. #--------------- #!/bin/sh \ exec tclsh "$0" "$@" package require Tk #--------------- # w text widget into which the substition is to be made # c character currently inserted #--------------- proc balanceQuotes {w c} { #get the preceding character set idx [$w index insert] set str [$w get "$idx -1char" $idx] # if null is returned, it must be the start of a line # so make it whitespace if {$str == "" } {set str " "} # check for character types # the character class print is not used as is printable! if { [string is wordchar $str] || [string is punct $str] } { # check if the previous character is an open quote. # nested open quotations need to be allowed for if { $str == "\u2018" || $str == "\u201C" } { set i 0 } else { set i 1 } if {$c == "apostrophe"} { if {$i} { $w insert insert \u2019 ;# single close } else { $w insert insert \u2018 ;# single open } } else { # must be quotedl if {$i} { $w insert insert \u201D ;# double close } else { $w insert insert \u201C ;# double open } } } else { if {$c == "apostrophe"} { $w insert insert \u2018 ;# single open } else { # must be quotedl $w insert insert \u201C ;# double open } } } #--------------- # Demo #--------------- set txt [text .txt -font {Sans 15}] pack $txt bind $txt { balanceQuotes %W %K ; break } bind $txt { balanceQuotes %W %K ; break } ---- [MG] gets an error about "apostrophe" not being a valid keysym; I think maybe it should be "quoteright"? [WJG] (05/11/07) It all works fine on my machine. [MG] That's weird; I thought the keysyms were the same across all platforms. What system are you using? (Mine is Tcl 8.4.9 / 8.5a1 on Win XP SP2) [WJG] (06/11/07) Suse 10.1, Tcl 8.4.12. My code is fine. Does your system generate a "quoteright" keysym when the error occurs? I can't that listed. Try the following binding on a text widget to check what keysym your system generates. console show set txt [text .txt] pack $txt bind $txt { puts %K } ---- !!!!!! %|[Category Widget]|% !!!!!!