# entry.tcl -- # # This file defines the default bindings for Tk entry widgets and provides # procedures that help in implementing those bindings. # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # # 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. # mouseMoved - Non-zero means the mouse has moved a significant # amount since the button went down (so, for example, # start dragging out a selection). # pressX - X-coordinate at which the mouse button was pressed. # selectMode - The style of selection currently underway: # char, word, or line. # x, y - Last known mouse coordinates for scanning # and auto-scanning. # data - Used for Cut and Copy #------------------------------------------------------------------------- #------------------------------------------------------------------------- # The code below creates the default class bindings for entries. #------------------------------------------------------------------------- bind Entry <> { if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { clipboard clear -displayof %W clipboard append -displayof %W $tk::Priv(data) %W delete sel.first sel.last unset tk::Priv(data) } } bind Entry <> { if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { clipboard clear -displayof %W clipboard append -displayof %W $tk::Priv(data) unset tk::Priv(data) } } bind Entry <> { catch { if {[tk windowingsystem] ne "x11"} { catch { %W delete sel.first sel.last } } %W insert insert [::tk::GetSelection %W CLIPBOARD] tk::EntrySeeInsert %W } } bind Entry <> { # ignore if there is no selection catch {%W delete sel.first sel.last} } bind Entry <> { if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] || !$tk::Priv(mouseMoved)} { tk::EntryPaste %W %x } } bind Entry <> { %W selection range 0 end %W icursor end } # Standard Motif bindings: bind Entry { tk::EntryButton1 %W %x %W selection clear } bind Entry { set tk::Priv(x) %x tk::EntryMouseSelect %W %x } bind Entry { set tk::Priv(selectMode) word tk::EntryMouseSelect %W %x catch {%W icursor sel.last} } bind Entry { set tk::Priv(selectMode) line tk::EntryMouseSelect %W %x catch {%W icursor sel.last} } bind Entry { set tk::Priv(selectMode) char %W selection adjust @%x } bind Entry { set tk::Priv(selectMode) word tk::EntryMouseSelect %W %x } bind Entry { set tk::Priv(selectMode) line tk::EntryMouseSelect %W %x } bind Entry { set tk::Priv(x) %x tk::EntryAutoScan %W } bind Entry { tk::CancelRepeat } bind Entry { tk::CancelRepeat } bind Entry { %W icursor @%x } bind Entry <> { tk::EntrySetCursor %W [expr {[%W index insert]-1}] } bind Entry <> { tk::EntrySetCursor %W [expr {[%W index insert]+1}] } bind Entry <> { tk::EntryKeySelect %W [expr {[%W index insert]-1}] tk::EntrySeeInsert %W } bind Entry <> { tk::EntryKeySelect %W [expr {[%W index insert]+1}] tk::EntrySeeInsert %W } bind Entry <> { tk::EntrySetCursor %W [tk::EntryPreviousWord %W insert] } bind Entry <> { tk::EntrySetCursor %W [tk::EntryNextWord %W insert] } bind Entry <> { tk::EntryKeySelect %W [tk::EntryPreviousWord %W insert] tk::EntrySeeInsert %W } bind Entry <> { tk::EntryKeySelect %W [tk::EntryNextWord %W insert] tk::EntrySeeInsert %W } bind Entry <> { tk::EntrySetCursor %W 0 } bind Entry <> { tk::EntryKeySelect %W 0 tk::EntrySeeInsert %W } bind Entry <> { tk::EntrySetCursor %W end } bind Entry <> { tk::EntryKeySelect %W end tk::EntrySeeInsert %W } bind Entry { if {[%W selection present]} { %W delete sel.first sel.last } else { %W delete insert } } bind Entry { tk::EntryBackspace %W } bind Entry { %W selection from insert } bind Entry