Я пишу модуль расширения Visual Studio (VSIX), который позволяет пользователю выбирать текст, и по команде меню выделенный текст заменяется новым текстом:
var document = ProjectHelpers.DTE.ActiveDocument;
var selection = (TextSelection)document.Selection;
var text = selection.Text;
string newText = doSomethingWith(text);
selection.Text = newText;
Теперь проблемаесли я хочу отменить операцию (например, с помощью Ctrl-Z), удаляется только одна строка за раз нового текста и, наконец, восстанавливается исходный текст (необходимо многократно использовать Ctrl-Z).
Как реализовать атомарную отмену, когда только одна команда Ctrl-Z отменяет весь процесс?
Если это имеет значение, я пишу для VS2017.