2016-01-23 4 views
0
  • Est-il possible de supprimer la valeur de la pile spécifique de UndoManager

OUAce Editor Pause/Désactiver UndoManager

  • toute fonction à pause/disable et start/enable UndoManager à nouveau.

Je veux ne pas pousser des données spécifiques à UndoManager's stack.

+0

il n'est pas possible de ne pas pousser les deltas vers la pile, puisque dans ce cas, annuler les deltas précédents ne sera pas possible, vous devez également transformer les deltas –

+0

un utilisateur a dit "Malheureusement, il est assez compliqué à implémenter. regardez les solutions existantes comme sharejs, firebase ou c9.ide.collab La dernière utilise l'indicateur ignoreChanges pour ignorer les changements faits par lui-même github.com/c9/c9.ide.collab/blob/master/ot/document.js#L192 et utilise la version modifiée de undomanger pour rebaser la pile d'annulation github.com/c9/c9.ide.collab/blob/master/ot/document.js#L737, vous pouvez également utiliser votre algorithme de transformation de changement pour cela - un utilisateur il y a 2 heures " –

+0

c9.ide.collab Je suppose que ce code var rev = session. $ UndoManager.startNewGroup(); session. $ UndoManager.markIgnored (rev); mais je suppose que votre API n'a pas de fonction markIgnore et startNewGroup(), n'est-ce pas? Pourriez-vous m'expliquer un peu plus pour que je puisse continuer? Je ne comprends même pas l'indice. –

Répondre

0

Il n'est pas possible de ne pas simplement pousser les deltas vers la pile, car dans ce cas, annuler les deltas précédents ne sera pas possible, vous devez également transformer les deltas autour du delta ignoré. Dites si vous avez un document "xyz" auquel {insert, 2, "a"} est appliqué pour obtenir "xyaz" puis {insert, 1, "b"} pour obtenir "xbyaz". Maintenant, pour annuler la première édition, mais gardez la deuxième, vous devez appliquer {delete, 2+1, "a"}. L'algorithme pour faire ceci n'est pas très complexe, mais il exige de manipuler beaucoup de branches, ainsi peut devenir poilu. Ace ne fournit pas d'API pour cette atm.