When text is inserted into a text widget via the keyboard, tags from the previous index are not inherited. In a c.l.t thread [L1 ], Donal Fellows provides the following to accomplish this:
Adrian Davis wrote: > Sorry, on second reading my posting was a bit ambiguous... > > ...I'm inserting the additional text into the end of the text widget by > typing it in directly using the keyboard. Ah, that's probably easier to do by using a new binding tag: # Copy the class bindings from the Text tag foreach seq [bind Text] {bind modText $seq [bind Text $seq]} # Install our new binding for normal insert bind modText <Key> {modTextInsert %W %A} proc modTextInsert {w s} { # This is copied from the Tk8.3 implementation if {[string equal $s ""] || [string equal [$w cget -state] "disabled"]} { return } catch { if { [$w compare sel.first <= insert] && [$w compare sel.last >= insert] } then { $w delete sel.first sel.last } } # The next line is the only substantive modification $w insert insert $s [$w tag names insert-1c] $w see insert } # Modify the bindings for the widget in question (in variable $w) bindtags $w [list $w modText [winfo toplevel $w] all] I'll leave handling <<Paste>> actions as an exercise.