# text.tcl -- # # This file defines the default bindings for Tk text widgets and provides # procedures that help in implementing the bindings. # # RCS: @(#) $Id: text.tcl,v 1.28 2003/11/13 14:44:22 vincentdarley Exp $ # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # #------------------------------------------------------------------------- # Elements of ::tk::Priv that are used in this file: # # afterId - If non-null, it means that auto-scanning is underway # and it gives the "after" id for the next auto-scan # command to be executed. # char - Character position on the line; kept in order # to allow moving up or down past short lines while # still remembering the desired position. # mouseMoved - Non-zero means the mouse has moved a significant # amount since the button went down (so, for example, # start dragging out a selection). # prevPos - Used when moving up or down lines via the keyboard. # Keeps track of the previous insert position, so # we can distinguish a series of ups and downs, all # in a row, from a new up or down. # selectMode - The style of selection currently underway: # char, word, or line. # x, y - Last known mouse coordinates for scanning # and auto-scanning. #------------------------------------------------------------------------- #------------------------------------------------------------------------- # The code below creates the default class bindings for text widgets. #------------------------------------------------------------------------- # Standard Motif bindings: bind Text <1> { tk::TextButton1 %W %x %y %W tag remove sel 0.0 end } bind Text { set tk::Priv(x) %x set tk::Priv(y) %y tk::TextSelectTo %W %x %y } bind Text { set tk::Priv(selectMode) word tk::TextSelectTo %W %x %y catch {%W mark set insert sel.first} } bind Text { set tk::Priv(selectMode) line tk::TextSelectTo %W %x %y catch {%W mark set insert sel.first} } bind Text { tk::TextResetAnchor %W @%x,%y set tk::Priv(selectMode) char tk::TextSelectTo %W %x %y } bind Text { set tk::Priv(selectMode) word tk::TextSelectTo %W %x %y 1 } bind Text { set tk::Priv(selectMode) line tk::TextSelectTo %W %x %y } bind Text { set tk::Priv(x) %x set tk::Priv(y) %y tk::TextAutoScan %W } bind Text { tk::CancelRepeat } bind Text { tk::CancelRepeat } bind Text { %W mark set insert @%x,%y } bind Text { tk::TextSetCursor %W insert-1displayindices } bind Text { tk::TextSetCursor %W insert+1displayindices } bind Text { tk::TextSetCursor %W [tk::TextUpDownLine %W -1] } bind Text { tk::TextSetCursor %W [tk::TextUpDownLine %W 1] } bind Text { tk::TextKeySelect %W [%W index {insert - 1displayindices}] } bind Text { tk::TextKeySelect %W [%W index {insert + 1displayindices}] } bind Text { tk::TextKeySelect %W [tk::TextUpDownLine %W -1] } bind Text { tk::TextKeySelect %W [tk::TextUpDownLine %W 1] } bind Text { tk::TextSetCursor %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] } bind Text { tk::TextSetCursor %W [tk::TextNextWord %W insert] } bind Text { tk::TextSetCursor %W [tk::TextPrevPara %W insert] } bind Text { tk::TextSetCursor %W [tk::TextNextPara %W insert] } bind Text { tk::TextKeySelect %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] } bind Text { tk::TextKeySelect %W [tk::TextNextWord %W insert] } bind Text { tk::TextKeySelect %W [tk::TextPrevPara %W insert] } bind Text { tk::TextKeySelect %W [tk::TextNextPara %W insert] } bind Text { tk::TextSetCursor %W [tk::TextScrollPages %W -1] } bind Text { tk::TextKeySelect %W [tk::TextScrollPages %W -1] } bind Text { tk::TextSetCursor %W [tk::TextScrollPages %W 1] } bind Text { tk::TextKeySelect %W [tk::TextScrollPages %W 1] } bind Text { %W xview scroll -1 page } bind Text { %W xview scroll 1 page } bind Text { tk::TextSetCursor %W {insert linestart} } bind Text { tk::TextKeySelect %W {insert linestart} } bind Text { tk::TextSetCursor %W {insert lineend} } bind Text { tk::TextKeySelect %W {insert lineend} } bind Text { tk::TextSetCursor %W 1.0 } bind Text { tk::TextKeySelect %W 1.0 } bind Text { tk::TextSetCursor %W {end - 1 char} } bind Text { tk::TextKeySelect %W {end - 1 char} } bind Text { if { [string equal [%W cget -state] "normal"] } { tk::TextInsert %W \t focus %W break } } bind Text { # Needed only to keep binding from triggering; doesn't # have to actually do anything. break } bind Text { focus [tk_focusNext %W] } bind Text { focus [tk_focusPrev %W] } bind Text { tk::TextInsert %W \t } bind Text { tk::TextInsert %W \n if {[%W cget -autoseparators]} {%W edit separator} } bind Text { if {[%W tag nextrange sel 1.0 end] ne ""} { %W delete sel.first sel.last } else { %W delete insert %W see insert } } bind Text { if {[%W tag nextrange sel 1.0 end] ne ""} { %W delete sel.first sel.last } elseif {[%W compare insert != 1.0]} { %W delete insert-1c %W see insert } } bind Text { %W mark set anchor insert } bind Text