0

我正在用 Scintilla 编写一个文本编辑器(实际上是 ScintillaNET,但有关 vanilla Scintilla 的信息也可能很有用)。在此编辑器中,我们希望在边距中显示更改信息(例如,如果我修改一行文本,该行将在边距中显示我的名字)。我已经设法在修改一行时更改了边距,但是如果有人撤消了他们的更改,我似乎无法找到撤消边距更改的好方法。

我尝试在 BeforeTextInsert 事件中调用 BeginUndoAction 并在 TextInserted 事件结束时调用 EndUndoAction,但这似乎并没有将边距更改视为可撤消的。有没有一种不错的方法来撤消保证金变化?我想我可能需要实现我自己的小边距撤消堆栈(或修改 Scintilla 的撤消堆栈)并以这种方式处理它,但如果有内置的东西,我宁愿这样做。

4

1 回答 1

0

我刚刚创建了自己的撤消堆栈以保存边距更改。如果正在修改文本并且它不是撤消,我会添加修改后的文本、起始位置、行数和字符串列表(每行修改的边距文本)。如果有修改并且是撤消,我会查看堆栈上的第一项,如果位置和修改后的文本相同,我继续将边距更改回旧值。

似乎工作正常,虽然它比我想要的有点丑。我确实担心堆栈以某种方式与 Scintilla 撤消堆栈不同步,但我并不是真的想修改 Scintilla 源。

于 2010-11-11T19:37:37.543 回答