撤消Scintilla中的边距文本更改

时间:2010-11-08 14:55:12

标签: c# undo scintilla

我正在用Scintilla编写一个文本编辑器(实际上是ScintillaNET,但有关香草Scintilla的信息也很有用)。在这个编辑器中,我们希望在边距中显示更改信息(例如,如果我修改一行文本,该行将在边距中显示我的名字)。我已经成功修改了一条线,但是如果有人撤消他们的更改,我似乎无法找到一个很好的方法来撤销保证金变更。

我已尝试在BeforeInxted事件中调用BeginUndoAction,在TextInserted事件结束时调用EndUndoAction,但这似乎并未将边距更改视为可撤消。是否有一种可行的方法来撤消保证金变化?我想我可能需要实现自己的小边缘撤销堆栈(或修改Scintilla的撤销堆栈)并且只是按照这种方式处理它,但是如果有内置的东西,我宁愿继续使用它。

1 个答案:

答案 0 :(得分:0)

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

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