entry.tcl –

This file defines the default bindings for Tk entry widgets and provides

procedures that help in implementing those bindings.

RCS: @(#) $Id: entry.tcl,v 1.21.2.2 2007/10/30 18:53:01 hobbs Exp $

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 <<Paste>> { 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 <<Clear>> { # ignore if there is no selection catch { %W delete sel.first sel.last } } bind Entry <<PasteSelection>> { if {tk_strictMotif || ![info exists tk::Priv(mouseMoved)]
|| !$tk::Priv(mouseMoved)} {
tk::EntryPaste %W %x
}
}

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