【问题标题】:Ace Editor Pause/Disable UndoManagerAce 编辑器暂停/禁用 UndoManager
【发布时间】:2016-04-30 06:35:43
【问题描述】:
  • 有什么方法可以从 UndoManager 中删除特定的堆栈值

  • pause/disablestart/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/…

标签: stack ace-editor undo-redo disabled-input pause


【解决方案1】:

不可能简单地不将增量推送到堆栈,因为在这种情况下无法撤消先前的增量,您还需要围绕跳过的增量转换增量。 假设您有一个文档"xyz",应用{insert, 2, "a"} 以获得"xyaz",然后{insert, 1, "b"} 获得"xbyaz"。现在要撤消第一个编辑但保留第二个,您需要应用{delete, 2+1, "a"}。这样做的算法不是很复杂,但它需要处理很多分支,所以会很麻烦。 Ace 没有为此 atm 提供 api。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多