proc handleEnterKey {w} { # First, delete the current selection if {[$w tag nextrange sel 1.0] != ""} { $w delete sel.first sel.last } # Find the whitespace at the start of the current line set startl [$w index "insert linestart"] set endl [lindex [split $startl "."] 0].end regexp {^([ \t]*)} [$w get $startl $endl] -> ws # Create a newline, insert whitespace $w insert [$w index insert] "\n$ws" # If necessary, scroll the view so cursor is visible $w see [$w index insert] } text .some.text.widget bind .some.text.widget <Return> { handleEnterKey %W # break, since we've already handled the Return break }
See also auto-indent