3 def __init__(self
, text
, output_sep
= "\n"):
6 self
.history_prefix
= None
7 self
.history_pointer
= None
8 self
.output_sep
= output_sep
9 text
.bind("<<history-previous>>", self
.history_prev
)
10 text
.bind("<<history-next>>", self
.history_next
)
12 def history_next(self
, event
):
16 def history_prev(self
, event
):
20 def _get_source(self
, start
, end
):
21 # Get source code from start index to end index. Lines in the
22 # text control may be separated by sys.ps2 .
23 lines
= self
.text
.get(start
, end
).split(self
.output_sep
)
24 return "\n".join(lines
)
26 def _put_source(self
, where
, source
):
27 output
= self
.output_sep
.join(source
.split("\n"))
28 self
.text
.insert(where
, output
)
30 def history_do(self
, reverse
):
31 nhist
= len(self
.history
)
32 pointer
= self
.history_pointer
33 prefix
= self
.history_prefix
34 if pointer
is not None and prefix
is not None:
35 if self
.text
.compare("insert", "!=", "end-1c") or \
36 self
._get
_source
("iomark", "end-1c") != self
.history
[pointer
]:
37 pointer
= prefix
= None
38 if pointer
is None or prefix
is None:
39 prefix
= self
._get
_source
("iomark", "end-1c")
50 if pointer
< 0 or pointer
>= nhist
:
52 if self
._get
_source
("iomark", "end-1c") != prefix
:
53 self
.text
.delete("iomark", "end-1c")
54 self
._put
_source
("iomark", prefix
)
55 pointer
= prefix
= None
57 item
= self
.history
[pointer
]
58 if item
[:nprefix
] == prefix
and len(item
) > nprefix
:
59 self
.text
.delete("iomark", "end-1c")
60 self
._put
_source
("iomark", item
)
62 self
.text
.mark_set("insert", "end-1c")
63 self
.text
.see("insert")
64 self
.text
.tag_remove("sel", "1.0", "end")
65 self
.history_pointer
= pointer
66 self
.history_prefix
= prefix
68 def history_store(self
, source
):
69 source
= source
.strip()
73 self
.history
.remove(source
)
76 self
.history
.append(source
)
77 self
.history_pointer
= None
78 self
.history_prefix
= None
82 self
.text
.tag_remove("sel", "1.0", "end")
83 self
.text
.delete("iomark", "end-1c")
84 self
.text
.mark_set("insert", "end-1c")
85 self
.text
.insert("insert", s
)
86 self
.text
.see("insert")