Умное анду и реду в Фигме
В большинстве программ операции выделения и развыделения не входят в стек анду. Например, если выделить кусок текста, потом другой, и нажать анду, предыдущий кусок не выделится — вместо этого откатится предыдущее изменение. Или если в Файндере кропотливо выделять несколько файлов из большой папки, а потом случайно сбросить выделение, то вернуть его через анду не получится.
В Фотошопе иначе: можно в несколько шагов настроить выделение, используя объединения, пересечения, Transform Selection и прочий Quick Mask, и тогда анду последовательно пройдёт эти шаги в обратном порядке. Ну и если случайно потеряешь тщательно настроенное, тоже можно сделать анду, и выделение вернётся. Это умно.
Но представьте ситуацию: вы делаете анду десять раз, чтобы посмотреть, как было несколько шагов назад, и при этом планируете сразу же сделать столько же раз реду, чтобы вернуться в «настоящее». И вот, находясь в «прошлом» вы что-то выделяете... Ауч! Теперь ваши последующие шаги потеряны безвозвратно. Пространственно-временной континуум — штука хрупкая. Надо было делать скриншот! (Ну или включать в Фотошопе нелинейную историю.)
В Фигме выделение тоже входит в стек анду, но там подумали об этой ситуации с откатом в прошлое. Если, находясь в прошлом, ты что-то выделяешь, то все операции «из будущего» остаются в стеке и реду их проделает как ни в чём не бывало. То есть, с одной стороны, Фигма знает о ценности и хрупкости выделения, и поэтому тоже даёт в нём анду, но с другой, она понимает, что выделение не меняет документ, а значит и пространственно-временной континуум в безопасности.
От таких решений душа дизайнера интерфейса поёт.
Выглядит как побочный эффект их CRDT-архитектуры. То есть, конечно, подумали, но на другом уровне, на уровне collaborative editing: нет конфликта — значит, операцию можно применить. Redo stack можно рассматривать просто как «ещё одного пользователя».
https://www.figma.com/blog/how-figmas-multiplayer-technology-works/