Re: Какова логика Undo?
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.05.05 03:48
Оценка: 30 (3) +2
Здравствуйте, VladD2, Вы писали:

VD>Приверствуются ссылки и рассуждения.

В редакторе Турбо Паскаля, когда ввели собсно Undo/Redo, была такая фича, как group together similar actions.
Идея ее проста как грабли: все действия раскладываются по определенным группам (тайпинг, навигация, вставка, удаление); действия из одной группы, идущие подряд, трактуются как атом undo/redo. Имхо, ворд использует подобную технику.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Какова логика Undo?
От: seregaa Ниоткуда http://blogtani.ru
Дата: 26.05.05 14:04
Оценка: 92 (4)
Здравствуйте, VladD2, Вы писали:

VD>Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и не могу уловить закономерности. То они включают в Undo одну строку, то несоклько. То одно слово.


VD>Приверствуются ссылки и рассуждения.


Не знаю, какой логике следует Word, но по поводу Rich Edit Control в MSDN-е есть такая инфа:

A rich edit control groups consecutive typing actions, including characters deleted by using the BackSpace key, into a single undo action until one of the following events occurs:

Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Какова логика Undo?
От: orangy Россия
Дата: 27.05.05 08:49
Оценка: 12 (1)
Здравствуйте, VladD2, Вы писали:

S>>В редакторе Турбо Паскаля, когда ввели собсно Undo/Redo, была такая фича, как group together similar actions.

S>>Идея ее проста как грабли: все действия раскладываются по определенным группам (тайпинг, навигация, вставка, удаление); действия из одной группы, идущие подряд, трактуются как атом undo/redo. Имхо, ворд использует подобную технику.

VD>А как тогда понять, что Ворд при разбиении строк иногда склеивает анду (видимо когда строки короткие), а иногда нет?

Я думаю, что есть ряд правил, которые заставляют прервать накопление группы. Такими правилами могут быть:
1. В группе уже больше N команд
2. Пользователь сохранил файл
3. Пользователь ничего не делал 3 секунды (by Cyberax)
4. Нажатие специальных клавиш (ентер для разделения строк, пробел и знаки препинания для разделения слов), активация меню, манипуляции мышкой, переключение приложения и т.п.

Т.е. пока фокус пользователя (всмысле мозговой, а не клавиатурный) находится в приложении — группируем. Как только фокус пользователя потеряли — завершаем группу и начинаем новую. При этом для каждого типа действия могут быть свои правила "прерывания". Соответственно, в зависимости от своего приложения стоит разбить действия на типы, понять как пользователь ожидает undo/redo для данного типа, сформировать правила группировки и разбиения и реализовать

Если конкретно про Word — не знаю, но сами группы можно посмотреть в выпадающем меню кнопки undo, хотя уверен ты это знаешь
... << RSDN@Home 1.1.4 beta 7 rev. 456>>
"Develop with pleasure!"
Re[3]: Какова логика Undo?
От: Cyberax Марс  
Дата: 25.05.05 10:01
Оценка: 6 (1)
VladD2 wrote:

> C>Такая логика группировки операций делается с помощью метода

> C>IOleUndoUnit::OnNextAdd.
> Речь не об реализации самого анду, а о *логике*.

Где-то в MSDN видел совет склеивать действия до нажатия enter/esc/alt
или до паузы в три секунды.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[5]: Какова логика Undo?
От: McSeem2 США http://www.antigrain.com
Дата: 26.05.05 02:28
Оценка: 2 (1)
VD>Пока что мнея поняли только двое — Синклер и c-smile но и от них информация очень скудна .

Ну дык это из за раплывчатой постановки задачи. Что тебе надо?
1. Сэмулировать Word,
2. Сделать более-менее привычно,
3. Изобрести свое супер-круглое колесо.

Если первое, то это надо спрашивать разработчиков ворда, если второе, то делай как предложили вышеуказанные люди. Если третье — надо изобретать самому и никто тебе здесь не указ.

А вообще-то я бы ввел как минимум два уровня детализации, типа Ctrl-Z — group undo, Ctrl-Shift-Z — detailed Undo. Сложность логики IMO не сильно страдает.

А еще было бы хорошо уметь ставить контрольные точки. Поставил точку — после нее редактируй хоть сколько, операция Undo (специальная) вернет к предыдущему состоянию за один клик. То есть, как бы, ручная группировка.
Конечно, можно вручную сохранять версии файлов, а потом к ним возвращаться если что, но это так утомительно и лениво... Даже при наличии всяких Version Control, тем более, что в них-то как раз мусорить по малейшему поводу нехорошо.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.05 22:46
Оценка:
Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и не могу уловить закономерности. То они включают в Undo одну строку, то несоклько. То одно слово.

Приверствуются ссылки и рассуждения.

26.05.05 12:59: Перенесено модератором из 'Философия программирования' — AndrewVK
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Какова логика Undo?
От: Cyberax Марс  
Дата: 24.05.05 08:03
Оценка:
VladD2 wrote:

> Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и

> не могу уловить закономерности. То они включают в Undo одну строку, то
> несоклько. То одно слово.
> Приверствуются ссылки и рассуждения.

В OLE (а значит и в Ворде) используется специальная Undo/Redo
подсистема, основанная на интерфейсах IOleUndoManager, IOleUndoUnit и т.п.

Такая логика группировки операций делается с помощью метода
IOleUndoUnit::OnNextAdd.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re: Какова логика Undo?
От: Quintanar Россия  
Дата: 24.05.05 10:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и не могу уловить закономерности. То они включают в Undo одну строку, то несоклько. То одно слово.


VD>Приверствуются ссылки и рассуждения.


В Emacs всегда известно, что отправляется в kill ring. Если две или больше операций удаления следуют непрерывно одна за другой, то удаленный текст склеивается.
Re: Какова логика Undo?
От: Локотков Александр Владимирович Россия  
Дата: 24.05.05 15:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и не могу уловить закономерности. То они включают в Undo одну строку, то несоклько. То одно слово.


VD>Приверствуются ссылки и рассуждения.


Дока: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/package-summary.html
Качественный пример можно взять, скажем, здесь:
http://www.jgraph.com/jgraph.html
bloß it hudla
Re[2]: Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 00:11
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>В редакторе Турбо Паскаля, когда ввели собсно Undo/Redo, была такая фича, как group together similar actions.

S>Идея ее проста как грабли: все действия раскладываются по определенным группам (тайпинг, навигация, вставка, удаление); действия из одной группы, идущие подряд, трактуются как атом undo/redo. Имхо, ворд использует подобную технику.

А как тогда понять, что Ворд при разбиении строк иногда склеивает анду (видимо когда строки короткие), а иногда нет?
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 00:11
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В OLE (а значит и в Ворде) используется специальная Undo/Redo

C>подсистема, основанная на интерфейсах IOleUndoManager, IOleUndoUnit и т.п.

C>Такая логика группировки операций делается с помощью метода

C>IOleUndoUnit::OnNextAdd.

Речь не об реализации самого анду, а о логике.
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 00:14
Оценка:
Здравствуйте, Локотков Александр Владимирович, Вы писали:

ЛАВ>Дока: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/package-summary.html

ЛАВ>Качественный пример можно взять, скажем, здесь:
ЛАВ>http://www.jgraph.com/jgraph.html

Меня не интересует процес реализации, паттенрны или сруктуры данных. Они примитивены. Меня интиресует логика применяемая в хороших текстовых редакторах.
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Какова логика Undo?
От: c-smile Канада http://terrainformatica.com
Дата: 25.05.05 05:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Локотков Александр Владимирович, Вы писали:


ЛАВ>>Дока: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/package-summary.html

ЛАВ>>Качественный пример можно взять, скажем, здесь:
ЛАВ>>http://www.jgraph.com/jgraph.html

VD>Меня не интересует процес реализации, паттенрны или сруктуры данных. Они примитивены. Меня интиресует логика применяемая в хороших текстовых редакторах.


В одном очень хорошем редакторе и естественно в этом тоже единица undo это напечатанное слово. При удалении единицей является символ.
Почему так — я думаю очевидно.

Просто по частоте: человек больше печатает буковок чем удаляет.
И всегда можно удалить выделив фрагмент первоначально.

Мне лично показалось что слово как единица undo (а не прарграф целиком) наиболее удобно.
Юзеры тоже говорят что это самое оно.
Re[3]: Какова логика Undo?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.05.05 17:16
Оценка:
Здравствуйте, VladD2, Вы писали:

ЛАВ>>Дока: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/package-summary.html

ЛАВ>>Качественный пример можно взять, скажем, здесь:
ЛАВ>>http://www.jgraph.com/jgraph.html

VD>Меня не интересует процес реализации, паттенрны или сруктуры данных. Они примитивены. Меня интиресует логика применяемая в хороших текстовых редакторах.


Ну, представь, что видимый объект суть некий эталон + набор изменений к нему. Изменения связаны, поскольку результат предыдущего является контекстом очередного. Соответственно, отмена — по стековому принципу. Возможно, что в каких-то случаях нужно будет расставлять контрольные точки с хранением промежуточного результата. Например, для того, чтобы при отмене некоторого действия восстанавливать контекст применяя оставшиеся действия между контрольной точкой и отменённым действием.

Например, стек действий (от раннего к позднему):

Action1
[ControlPoint_A]
Action2
Action3
Action4
Action5

Делаем Undo для Action5, который, такая зараза, не откатывается просто так, а требует повторного применения действий от контрольной точки. Соответственно,
1. Делаем текущим Control point_A
2. Применяем Action2 ... Action4

Вот так, или примерно так.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
PS.
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.05.05 17:18
Оценка:
А дальше — игры в паттерны, оптимизации, яхты, девки, самолёты и т.п.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 20:57
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Мне лично показалось что слово как единица undo (а не прарграф целиком) наиболее удобно.

CS>Юзеры тоже говорят что это самое оно.

Я тоже думал о том, что слово — это логично. Но вот гляжу на самые популярные редакторы и вижу, что похоже моя логика не соотвествует текущим предпочтениям.

Пользуясь Вордом или Студией я вроде как не напрягаюсь, от излишней детализации анду. Стало быть она в нем выбрана правильно. Хотя может я просто привык.

Слишком большая детализация может ведь напрягать. Люди не очено любят безсцельно жать одни и те же кнопки.

Возможно в намках одной строки анду на слово — это нормально. Но в разрезе текста скорее всего абзац будет более приемленмее.
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Какова логика Undo?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 20:57
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ну, представь, что видимый объект суть некий эталон + набор изменений к нему. Изменения связаны, поскольку результат предыдущего является контекстом очередного. Соответственно, отмена — по стековому принципу. Возможно, что в каких-то случаях нужно будет расставлять контрольные точки с хранением промежуточного результата. Например, для того, чтобы при отмене некоторого действия восстанавливать контекст применяя оставшиеся действия между контрольной точкой и отменённым действием.


ГВ>Например, стек действий (от раннего к позднему):


ГВ>Action1

ГВ>[ControlPoint_A]
ГВ>Action2
ГВ>Action3
ГВ>Action4
ГВ>Action5

ГВ>Делаем Undo для Action5, который, такая зараза, не откатывается просто так, а требует повторного применения действий от контрольной точки. Соответственно,

ГВ>1. Делаем текущим Control point_A
ГВ>2. Применяем Action2 ... Action4

ГВ>Вот так, или примерно так.


И ты свалился на обсуждение реализации. Это не проблема. Паттерн команда, два стека и инверсия команд при перекладывании из одного стека в другой спасают отцов русской демократии влет. У меня нет пробелм при любой детализации анду. Я просто сплющу две команды редакрирования и создам из них одну.

Проблема же в самой логике "сплющивания". Обрати внимание на то что Ворд и Синтила по разному агреггируют анду-информацию. Винтила похоже ориентируется на блоки определенного размера, а Ворд применяет какую-то совсем хитрую логику. Вот мне и интересно услышать про стратегии оных.

Пока что мнея поняли только двое — Синклер и c-smile но и от них информация очень скудна .
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: PS.
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.05 20:57
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А дальше — игры в паттерны, оптимизации, яхты, девки, самолёты и т.п.


Меня интересуют аспекты идущие за паттернами и потимизацией. Мне интересна логика объеденения отдельных команд редактирования при вооде.

Логика же самого анду яйца выеденного не стоит. Весь исходный код можно уместить в одном сообщении.
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Какова логика Undo?
От: c-smile Канада http://terrainformatica.com
Дата: 26.05.05 05:13
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Пользуясь Вордом или Студией я вроде как не напрягаюсь, от излишней детализации анду. Стало быть она в нем выбрана правильно. Хотя может я просто привык.


VD>Слишком большая детализация может ведь напрягать. Люди не очено любят безсцельно жать одни и те же кнопки.


VD>Возможно в намках одной строки анду на слово — это нормально. Но в разрезе текста скорее всего абзац будет более приемленмее.


Ну дык на то selection есть. Выделил и удалил сколько надо если массивный delete нужен.

Меня лично в Ворде сильно напрягает удаление всей строки.
И еще этот capitalizing "невмиручий" — просто раздражает.

Имхо, эту ветку лучше в User Interface перенести. Там она уместна и даже очень.
Re[2]: PS.
От: Dog  
Дата: 26.05.05 06:40
Оценка:
ГВ>>А дальше — игры в паттерны, оптимизации, яхты, девки, самолёты и т.п.
VD>Меня интересуют аспекты идущие за паттернами и потимизацией. Мне интересна логика объеденения отдельных команд редактирования при вооде.
VD>Логика же самого анду яйца выеденного не стоит. Весь исходный код можно уместить в одном сообщении.
А где можно посмотреть кошерные реализации? А чует моё сердце что сейчас велосипед напишу. Язык — С#.
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Re: Какова логика Undo?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.05.05 10:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот тупо смотрю на то как Word и другие редакторы делают Undo/Redo и не могу уловить закономерности. То они включают в Undo одну строку, то несоклько. То одно слово.


VD>Приверствуются ссылки и рассуждения.


Попробую вставить свои две копейки.

Имхо, есть изменяющие содержимое текста действия (удаления, вставка, форматирование), которые можно назвать change-actions, и неизменяющие (перемещения всяческие), которые можно назвать read-only-actions. Первое деление можно делать по этому признаку: все идущие подряд change-actions объединяются до тех пор, пока не встретиться read-only-action.
Далее делаем более подробную классификацию change-actions:
— удаления (delete-actions);
— вставка (insert-actions);
— замена (overwrite-actions), может быть реализована как агрегат delete-action и insert-action;
— форматирование (format-actions);
— и т.д., зависит от функциональности редактора.

Так вот, внутри общей последовательности change-actions объединяем вместе последовательно идущие действия, которые попадают в одну группу (т.е. insert-actions к insert-actions, delete-actions к delete-actions и т.д.).

Так же можно органичивать область действия для отдельных групп. Например, delete-actions не объединяются, если они относятся к разным абзацам или выделениям).
... << RSDN@Home 1.1.4 beta 7 rev. 447>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.