Page 1 of 1

ECTL_UNDOREDO

Posted: Thu 19 May, 2016 23:24
by Shmuel
1. Введём в редакторе какой-либо текст.
2. Нажмём CtrlZ, т.е. сделаем UNDO.
3. Исполним (например, макросом) editor.UndoRedo(nil,"EUR_BEGIN"); editor.UndoRedo(nil,"EUR_END").

Теперь нажмём CtrlShiftZ, чтобы сделать REDO, а оно не работает. Баг?

ECTL_UNDOREDO

Posted: Fri 20 May, 2016 08:50
by zg
новое действие удаляет всё, что было откачено до этого. не совсем понятно, в чём именно баг?

ECTL_UNDOREDO

Posted: Fri 20 May, 2016 11:28
by Shmuel
Вопрос тогда в том, можно ли сделать лучше. Например, удалять то, что было откачено, только в случае изменений, произведённых между EUR_BEGIN() и EUR_END().

ECTL_UNDOREDO

Posted: Fri 20 May, 2016 14:43
by zg
1. undo/redo сейчас реально работает на магии.
2. сейчас всё логично, EUR_BEGIN срабатывает в момент вызова. если делать в момент первого изменения, то возможны неоднозначности, когда это делают несколько плагинов. вроде при undo сохраняется позиция курсора, тогда тоже не совсем понятно, как разруливать.

и хотелось бы увидеть конкретный пример, где со стороны плагина это разрулить сложнее, чем со стороны фара.

ECTL_UNDOREDO

Posted: Sat 21 May, 2016 10:57
by John Doe
Shmuel wrote: Вопрос тогда в том, можно ли сделать лучше.
Что если запретить пустые блоки?
Т.е. в момент EUR_END проверять последний элемент буфера, и при обнаружении там маркера EUR_BEGIN - удалять его.

Или я неправильно понял проблему.

ECTL_UNDOREDO

Posted: Sat 21 May, 2016 11:04
by zg
John Doe wrote:Или я неправильно понял проблему.
неправильно. EUR_BEGIN удаляет все откаченные изменения. грубо говоря мы сделали замену, откатили, сделали другую замену, которая по факту ничего не поменяла и вот хочется сделать redo отмене предыдущей замены, но нет.