4 ###$ event <<expand-word>>
12 ('E_xpand word', '<<expand-word>>'),
16 wordchars
= string
.ascii_letters
+ string
.digits
+ "_"
18 def __init__(self
, editwin
):
19 self
.text
= editwin
.text
22 def expand_word_event(self
, event
):
23 curinsert
= self
.text
.index("insert")
24 curline
= self
.text
.get("insert linestart", "insert lineend")
26 words
= self
.getwords()
29 words
, index
, insert
, line
= self
.state
30 if insert
!= curinsert
or line
!= curline
:
31 words
= self
.getwords()
36 word
= self
.getprevword()
37 self
.text
.delete("insert - %d chars" % len(word
), "insert")
38 newword
= words
[index
]
39 index
= (index
+ 1) % len(words
)
41 self
.text
.bell() # Warn we cycled around
42 self
.text
.insert("insert", newword
)
43 curinsert
= self
.text
.index("insert")
44 curline
= self
.text
.get("insert linestart", "insert lineend")
45 self
.state
= words
, index
, curinsert
, curline
49 word
= self
.getprevword()
52 before
= self
.text
.get("1.0", "insert wordstart")
53 wbefore
= re
.findall(r
"\b" + word
+ r
"\w+\b", before
)
55 after
= self
.text
.get("insert wordend", "end")
56 wafter
= re
.findall(r
"\b" + word
+ r
"\w+\b", after
)
58 if not wbefore
and not wafter
:
62 # search backwards through words before
69 # search onwards through words after
78 def getprevword(self
):
79 line
= self
.text
.get("insert linestart", "insert")
81 while i
> 0 and line
[i
-1] in self
.wordchars
: