# 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 <> {
global tcl_platform
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 <1> {
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