Ace 编辑器暂停/禁用 UndoManager
Posted
技术标签:
【中文标题】Ace 编辑器暂停/禁用 UndoManager【英文标题】:Ace Editor Pause/Disable UndoManager 【发布时间】:2016-04-30 06:35:43 【问题描述】: 有什么方法可以从 UndoManager 中删除特定的堆栈值或
pause/disable
和 start/enable
UndoManager 的任何函数。
我希望不推送特定数据到UndoManager's stack
。
【问题讨论】:
不可能不将增量推送到堆栈,因为在这种情况下无法撤消以前的增量,您还需要转换增量 一位用户说“不幸的是,实施起来相当复杂。看看现有的解决方案,如 sharejs、firebase 或 c9.ide.collab。最后一个使用 ignoreChanges 标志来忽略自己所做的更改 github .com/c9/c9.ide.collab/blob/master/ot/document.js#L192 并使用修改版本的 undomanger 重新设置撤消堆栈 github.com/c9/c9.ide.collab/blob/master/ot/ document.js#L737,你也可以使用你的变更转换算法——2小时前的用户“ c9.ide.collab 我猜这个代码 var rev = session.$undoManager.startNewGroup(); session.$undoManager.markIgnored(rev);但我想你的 api 没有 markIgnore 和 startNewGroup() 函数,对吧?您能否再解释一下,以便我继续。我什至不明白提示。 看起来 c9.ide.collab 使用了未完全实现的所需 api 的实验版本 github.com/c9/core/blob/master/node_modules/ace/lib/ace/… 【参考方案1】:不可能简单地不将增量推送到堆栈,因为在这种情况下无法撤消先前的增量,您还需要围绕跳过的增量转换增量。
假设您有一个文档"xyz"
,应用insert, 2, "a"
以获得"xyaz"
,然后insert, 1, "b"
获得"xbyaz"
。现在要撤消第一个编辑但保留第二个,您需要应用delete, 2+1, "a"
。这样做的算法不是很复杂,但它需要处理很多分支,所以会很麻烦。 Ace 没有为此 atm 提供 api。
【讨论】:
以上是关于Ace 编辑器暂停/禁用 UndoManager的主要内容,如果未能解决你的问题,请参考以下文章