ECTL_UNDOREDO

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

ECTL_UNDOREDO

Post by Shmuel » Thu 19 May, 2016 23:24

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

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

User avatar
zg
zero-gravity
Posts: 5266
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 44 times
Contact:

ECTL_UNDOREDO

Post by zg » Fri 20 May, 2016 08:50

новое действие удаляет всё, что было откачено до этого. не совсем понятно, в чём именно баг?

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

ECTL_UNDOREDO

Post by Shmuel » Fri 20 May, 2016 11:28

Вопрос тогда в том, можно ли сделать лучше. Например, удалять то, что было откачено, только в случае изменений, произведённых между EUR_BEGIN() и EUR_END().

User avatar
zg
zero-gravity
Posts: 5266
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 44 times
Contact:

ECTL_UNDOREDO

Post by zg » Fri 20 May, 2016 14:43

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

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

User avatar
John Doe
Бюрократ
Posts: 11268
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

ECTL_UNDOREDO

Post by John Doe » Sat 21 May, 2016 10:57

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

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

User avatar
zg
zero-gravity
Posts: 5266
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 44 times
Contact:

ECTL_UNDOREDO

Post by zg » Sat 21 May, 2016 11:04

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

Post Reply

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