Подтвердить что ты не робот

Reset стек отмены в редакторе ACE

Я хочу reset отменить стек в редакторе ACE. Поведение должно быть:

  • Я делаю некоторые изменения в редакторе.
  • Вызов некоторой магической функции для reset стека отмены
  • При попытке отменить это невозможно, потому что стек отмены был reset.

Я предполагаю, что это связано с UndoManager от ACE, но я понятия не имею, как использовать его в следующем примере.

var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/markdown");

setTimeout(function() { 
  editor.setValue("And now how can I reset the\nundo stack,so pressing\nCTRL+Z (or Command + Z) will *NOT*\ngo back to previous value?", -1);
}, 3000);
#editor {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  font-size: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.9/ace.js"></script>
<div id="editor">This value will be changed in 3 seconds.</div>
4b9b3361

Ответ 1

Да, UndoManager - это класс, который поддерживает всю историю. Решение состоит в том, чтобы инициализировать сеанс пустым/вновь созданным классом.

Проверьте фрагмент.

var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/markdown");

setTimeout(function() {
  editor.setValue("And now how can I reset the\nundo stack,so pressing\nCTRL+Z (or Command + Z) will *NOT*\ngo back to previous value?", -1);
  editor.getSession().setUndoManager(new ace.UndoManager())
}, 3000);
#editor {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  font-size: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.9/ace.js"></script>
<div id="editor">This value will be changed in 3 seconds.</div>