ECTL_UNDOREDO

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

ECTL_UNDOREDO

Post by Shmuel »

1. Введём в редакторе какой-либо текст.
2. Нажмём CtrlZ, т.е. сделаем UNDO.
3. Исполним (например, макросом) editor.UndoRedo(nil,"EUR_BEGIN"); editor.UndoRedo(nil,"EUR_END").

Теперь нажмём CtrlShiftZ, чтобы сделать REDO, а оно не работает. Баг?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

ECTL_UNDOREDO

Post by zg »

новое действие удаляет всё, что было откачено до этого. не совсем понятно, в чём именно баг?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

ECTL_UNDOREDO

Post by Shmuel »

Вопрос тогда в том, можно ли сделать лучше. Например, удалять то, что было откачено, только в случае изменений, произведённых между EUR_BEGIN() и EUR_END().
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

ECTL_UNDOREDO

Post by zg »

1. undo/redo сейчас реально работает на магии.
2. сейчас всё логично, EUR_BEGIN срабатывает в момент вызова. если делать в момент первого изменения, то возможны неоднозначности, когда это делают несколько плагинов. вроде при undo сохраняется позиция курсора, тогда тоже не совсем понятно, как разруливать.

и хотелось бы увидеть конкретный пример, где со стороны плагина это разрулить сложнее, чем со стороны фара.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

ECTL_UNDOREDO

Post by John Doe »

Shmuel wrote: Вопрос тогда в том, можно ли сделать лучше.
Что если запретить пустые блоки?
Т.е. в момент EUR_END проверять последний элемент буфера, и при обнаружении там маркера EUR_BEGIN - удалять его.

Или я неправильно понял проблему.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

ECTL_UNDOREDO

Post by zg »

John Doe wrote:Или я неправильно понял проблему.
неправильно. EUR_BEGIN удаляет все откаченные изменения. грубо говоря мы сделали замену, откатили, сделали другую замену, которая по факту ничего не поменяла и вот хочется сделать redo отмене предыдущей замены, но нет.
Post Reply

Return to “Разработка плагинов”