summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--library/entry.tcl60
-rw-r--r--library/spinbox.tcl2
-rw-r--r--library/ttk/entry.tcl31
3 files changed, 55 insertions, 38 deletions
diff --git a/library/entry.tcl b/library/entry.tcl
index e8f260b..2090fa7 100644
--- a/library/entry.tcl
+++ b/library/entry.tcl
@@ -143,7 +143,7 @@ bind Entry <<SelectPrevWord>> {
tk::EntrySeeInsert %W
}
bind Entry <<SelectNextWord>> {
- tk::EntryKeySelect %W [tk::EntryNextWord %W insert]
+ tk::EntryKeySelect %W [tk::EntrySelectNextWord %W insert]
tk::EntrySeeInsert %W
}
bind Entry <<LineStart>> {
@@ -588,40 +588,44 @@ proc ::tk::EntryTranspose w {
}
# ::tk::EntryNextWord --
-# Returns the index of the next word position after a given position in the
-# entry. The next word is platform dependent and may be either the next
-# end-of-word position or the next start-of-word position after the next
-# end-of-word position.
+# Returns the index of the next start-of-word position after the next
+# end-of-word position after a given position in the text.
#
# Arguments:
# w - The entry window in which the cursor is to move.
# start - Position at which to start search.
-if {[tk windowingsystem] eq "win32"} {
- proc ::tk::EntryNextWord {w start} {
- if {[$w cget -show] ne ""} {
- return end
- }
- set pos [tk::endOfWord [$w get] [$w index $start]]
- if {$pos >= 0} {
- set pos [tk::startOfNextWord [$w get] $pos]
- }
- if {$pos < 0} {
- return end
- }
- return $pos
+proc ::tk::EntryNextWord {w start} {
+ if {[$w cget -show] ne ""} {
+ return end
}
-} else {
- proc ::tk::EntryNextWord {w start} {
- if {[$w cget -show] ne ""} {
- return end
- }
- set pos [tk::endOfWord [$w get] [$w index $start]]
- if {$pos < 0} {
- return end
- }
- return $pos
+ set pos [tk::endOfWord [$w get] [$w index $start]]
+ if {$pos >= 0} {
+ set pos [tk::startOfNextWord [$w get] $pos]
+ }
+ if {$pos < 0} {
+ return end
+ }
+ return $pos
+}
+
+# ::tk::EntryNextWord --
+# Returns the index of the next end-of-word position after a given
+# position in the text.
+#
+# Arguments:
+# w - The entry window in which the cursor is to move.
+# start - Position at which to start search.
+
+proc ::tk::EntrySelectNextWord {w start} {
+ if {[$w cget -show] ne ""} {
+ return end
}
+ set pos [tk::endOfWord [$w get] [$w index $start]]
+ if {$pos < 0} {
+ return end
+ }
+ return $pos
}
# ::tk::EntryPreviousWord --
diff --git a/library/spinbox.tcl b/library/spinbox.tcl
index 1430800..094be29 100644
--- a/library/spinbox.tcl
+++ b/library/spinbox.tcl
@@ -153,7 +153,7 @@ bind Spinbox <<SelectPrevWord>> {
::tk::EntrySeeInsert %W
}
bind Spinbox <<SelectNextWord>> {
- ::tk::EntryKeySelect %W [::tk::EntryNextWord %W insert]
+ ::tk::EntryKeySelect %W [::tk::EntrySelectNextWord %W insert]
::tk::EntrySeeInsert %W
}
bind Spinbox <<LineStart>> {
diff --git a/library/ttk/entry.tcl b/library/ttk/entry.tcl
index d5170fd..b01e6a2 100644
--- a/library/ttk/entry.tcl
+++ b/library/ttk/entry.tcl
@@ -104,7 +104,7 @@ bind TEntry <<LineEnd>> { ttk::entry::Move %W end }
bind TEntry <<SelectPrevChar>> { ttk::entry::Extend %W prevchar }
bind TEntry <<SelectNextChar>> { ttk::entry::Extend %W nextchar }
bind TEntry <<SelectPrevWord>> { ttk::entry::Extend %W prevword }
-bind TEntry <<SelectNextWord>> { ttk::entry::Extend %W nextword }
+bind TEntry <<SelectNextWord>> { ttk::entry::Extend %W selectnextword }
bind TEntry <<SelectLineStart>> { ttk::entry::Extend %W home }
bind TEntry <<SelectLineEnd>> { ttk::entry::Extend %W end }
@@ -248,21 +248,17 @@ proc ttk::entry::See {w {index insert}} {
}
}
-## NextWord -- Find the next word position.
-# Note: The "next word position" follows platform conventions:
-# either the next end-of-word position, or the start-of-word
-# position following the next end-of-word position.
+## NextWord --
+# Returns the index of the next start-of-word position after the next
+# end-of-word position after a given position in the text.
#
-set ::ttk::entry::State(startNext) \
- [string equal [tk windowingsystem] "win32"]
-
proc ttk::entry::NextWord {w start} {
if {[$w cget -show] ne ""} {
return end
}
variable State
set pos [tk::endOfWord [$w get] [$w index $start]]
- if {$pos >= 0 && $State(startNext)} {
+ if {$pos >= 0} {
set pos [tk::startOfNextWord [$w get] $pos]
}
if {$pos < 0} {
@@ -271,6 +267,22 @@ proc ttk::entry::NextWord {w start} {
return $pos
}
+## SelectNextWord --
+# Returns the index of the next end-of-word position after a given
+# position in the text.
+#
+proc ttk::entry::SelectNextWord {w start} {
+ if {[$w cget -show] ne ""} {
+ return end
+ }
+ variable State
+ set pos [tk::endOfWord [$w get] [$w index $start]]
+ if {$pos < 0} {
+ return end
+ }
+ return $pos
+}
+
## PrevWord -- Find the previous word position.
#
proc ttk::entry::PrevWord {w start} {
@@ -313,6 +325,7 @@ proc ttk::entry::RelIndex {w where {index insert}} {
nextchar { NextChar $w $index }
prevword { PrevWord $w $index }
nextword { NextWord $w $index }
+ selectnextword { SelectNextWord $w $index }
home { return 0 }
end { $w index end }
default { error "Bad relative index $index" }