我正在为现有应用程序编写插件,我需要捕获受撤消和重做操作影响的修改文本和范围。我能够访问应用程序创建的NSUndoManager和NSTextView,并且能够注册通知。有没有办法利用这些元素来抓取撤消/重做的文本组?
我没有这样做,所以我只通过文档/知识。
由于您有权访问文本视图,因此您可以成为文本视图代理。然后,您将收到有用的消息...
在文本更改之前:
- 文本
- 视图:应该更改文本范围:替换字符串: 文本
- 视图:应该更改文本范围:替换字符串:
- textView:shouldChangeTypingAttributes:toAttributes:
文本更改后:
- textViewDidChangeTypingAttributes:
我不知道你是否会收到这些更改(UndoManager会绕过这些东西吗?),但你可能会。在任何情况下,您都可以在处理以前的消息时查询选择设置。
在选择更改之前:
- 文本视图:将更改选择从字符范围:到字符范围:
- 文本视图:将更改选择从字符范围:到字符范围:
后:
- textViewDidChangeSelection:
UndoManager 应该告诉您它正在执行撤消,这意味着您可以将普通更改与基于撤消的更改区分开来。
这似乎足以继续下去,我希望它有所帮助。