5 def __init__(self
, text
, output_sep
= "\n"):
8 self
.history_prefix
= None
9 self
.history_pointer
= None
10 self
.output_sep
= output_sep
11 text
.bind("<<history-previous>>", self
.history_prev
)
12 text
.bind("<<history-next>>", self
.history_next
)
14 def history_next(self
, event
):
18 def history_prev(self
, event
):
22 def _get_source(self
, start
, end
):
23 # Get source code from start index to end index. Lines in the
24 # text control may be separated by sys.ps2 .
25 lines
= string
.split(self
.text
.get(start
, end
), self
.output_sep
)
26 return string
.join(lines
, "\n")
28 def _put_source(self
, where
, source
):
29 output
= string
.join(string
.split(source
, "\n"), self
.output_sep
)
30 self
.text
.insert(where
, output
)
32 def history_do(self
, reverse
):
33 nhist
= len(self
.history
)
34 pointer
= self
.history_pointer
35 prefix
= self
.history_prefix
36 if pointer
is not None and prefix
is not None:
37 if self
.text
.compare("insert", "!=", "end-1c") or \
38 self
._get
_source
("iomark", "end-1c") != self
.history
[pointer
]:
39 pointer
= prefix
= None
40 if pointer
is None or prefix
is None:
41 prefix
= self
._get
_source
("iomark", "end-1c")
52 if pointer
< 0 or pointer
>= nhist
:
54 if self
._get
_source
("iomark", "end-1c") != prefix
:
55 self
.text
.delete("iomark", "end-1c")
56 self
._put
_source
("iomark", prefix
)
57 pointer
= prefix
= None
59 item
= self
.history
[pointer
]
60 if item
[:nprefix
] == prefix
and len(item
) > nprefix
:
61 self
.text
.delete("iomark", "end-1c")
62 self
._put
_source
("iomark", item
)
64 self
.text
.mark_set("insert", "end-1c")
65 self
.text
.see("insert")
66 self
.text
.tag_remove("sel", "1.0", "end")
67 self
.history_pointer
= pointer
68 self
.history_prefix
= prefix
70 def history_store(self
, source
):
71 source
= string
.strip(source
)
75 self
.history
.remove(source
)
78 self
.history
.append(source
)
79 self
.history_pointer
= None
80 self
.history_prefix
= None
84 self
.text
.tag_remove("sel", "1.0", "end")
85 self
.text
.delete("iomark", "end-1c")
86 self
.text
.mark_set("insert", "end-1c")
87 self
.text
.insert("insert", s
)
88 self
.text
.see("insert")