Как удалить запись из истории команд?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

Re: Как удалить запись из истории команд?

Post by Max Rusov »

Latest post of the previous page:

А зачем там вообще ID? Индекса что-ли не хватает?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

Max Rusov wrote:А зачем там вообще ID? Индекса что-ли не хватает?
Какой индекс вы имеете в виду?

Насколько я понимаю, записи (однозначно) можно удалить только по ключу, коим является ID.

Можно этот ID возвращать как часть Data (например, отделив его ";"). Я понимаю, что все это криво, но что же делать, если надо сохранить бинарную совместимость?!

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

Re: Как удалить запись из истории команд?

Post by zg »

fml2 wrote:но иногда все же делается
например?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

Например, Far

2useven10
Posts: 4042
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 187 times

Re: Как удалить запись из истории команд?

Post by 2useven10 »

fml2 wrote:Например, Far
это не пример, это заявка на бан.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

2useven10 wrote:
fml2 wrote:Например, Far
это не пример, это заявка на бан.
Не могли бы объяснить, почему? Меня, как я понял, попросили назвать пример проекта, в котором менялся АПИ плагинов, и я выполнил просьбу. Или что-то не так?

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

Re: Как удалить запись из истории команд?

Post by zg »

нет, вопрос был: когда в фаре ломалась бинарная совместимость после того, как было объявлено что, она ломаться не будет?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

zg wrote:нет, вопрос был: когда в фаре ломалась бинарная совместимость после того, как было объявлено что, она ломаться не будет?
Так так бы и писали. А то слишком много приходится додумывать.

По существу вопроса (хотя это и не по существу ветки): я не утверждал, что в Фаре ломалась совместимость после того, как было объявлено, что она ломаться не будет. Я сказал, что в проектах иногда ломается совместимость, хотя это и всегда нежелательно. Но ведь это всегда делается не просто так, а потому что есть какая-то потребность.

А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3? Или для чего? Просто если это до скончания времен, то не слишком ли Фар сам себя ограничил?

У вас есть какие-нибудь ответы на мои ранее заданные вопросы?

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

Re: Как удалить запись из истории команд?

Post by zg »

fml2 wrote:А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3?
нет. нет.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

Re: Как удалить запись из истории команд?

Post by Max Rusov »

fml2 wrote:А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3? Или для чего? Просто если это до скончания времен, то не слишком ли Фар сам себя ограничил?
Вроде очевидно - API может развиваться сохраняя бинарную совместимость снизу вверх. Если надо добавить поля в структуру, то поля добавляются в конец структуры, а по полю StructSize определяется заполнены ли они, и т.п.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

Max Rusov wrote:Если надо добавить поля в структуру, то поля добавляются в конец структуры
Я так и сделал (добавил поле "Id" в конец структуры "FarSettingsHistory")
Max Rusov wrote:а по полю StructSize определяется заполнены ли они
Но в этой структуре нет поля "StructSize".

Насколько я понимаю, единственным местом, в котором АПИ из-за добавления этого поля может "сломаться", является функция для перечисления опций (plugapi.cpp, функция "apiSettingsControl", ветка "SCTL_ENUM"). Но там уже стоит какая-то проверка "CheckStructSize". Это не является гарантией совместимости АПИ "снизу вверх"?

Тут один участник форума (zg) утверждал, что добавление поля ломает АПИ. Но так и не сказал, почему.

А вы понимаете, почему? И как сделать, чтобы он все же остался совместимым?

И еще: вы тут ранее упомянули какой-то индекс, по которому можно было бы удалять записи из истории. Вы не могли бы подробнее объяснить, что вы имели в виду?

Shmuel
Posts: 6127
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Re: Как удалить запись из истории команд?

Post by Shmuel »

fml2 wrote:Тут один участник форума (zg) утверждал, что добавление поля ломает АПИ. Но так и не сказал, почему.
Возьмите Far с вашим патчем, а LuaFAR - без оного, и попробуйте получить список историй. Вы увидите, что это перестало работать. LuaFAR без вашего патча + LuaMacro - это пример плагина, который не будет работать из-за поломанной совместимости.

Хорошо, LuaFAR вы подправили, а как быть с остальными плагинами?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Re: Как удалить запись из истории команд?

Post by fml2 »

В то, что он ломает, я верю. Но не очень понимаю, почему (ведь есть проверка на размер). И еще меньше понимаю, как сделать, чтобы не ломал (Max Rusov говорит, что это возможно -- как я понял, просто соблюдая некие "правила гигиены").

Shmuel
Posts: 6127
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Re: Как удалить запись из истории команд?

Post by Shmuel »

Я несколько неточно выразился: LuaFAR нужно взять, скомпилированный с plugin.hpp, к которому не применялся ваш патч.
fml2 wrote:В то, что он ломает, я верю. Но не очень понимаю, почему (ведь есть проверка на размер).
Я мог бы объяснить, но раз вы берётесь модифицировать Фар, то должны уметь докапываться сами, тем более, что это на поверхности.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

Re: Как удалить запись из истории команд?

Post by Max Rusov »

fml2 wrote:И еще: вы тут ранее упомянули какой-то индекс, по которому можно было бы удалять записи из истории. Вы не могли бы подробнее объяснить, что вы имели в виду?
Если есть Count то то идентифицировать элемент можно по индексу, использование какого-то ID - мне непонятно зачем. Но в исходники я не лез, поэтому что-то более конкретное не скажу.

Shmuel
Posts: 6127
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Re: Как удалить запись из истории команд?

Post by Shmuel »

Shmuel wrote:Я мог бы объяснить, но раз вы берётесь модифицировать Фар, то должны уметь докапываться сами, тем более, что это на поверхности.
Ладно, не буду занудой:

- в структуре FarSettingsEnum, есть указатель на массив const struct FarSettingsHistory* Histories.

- размер структуры FarSettingsHistory в Фаре увеличился после вашего патча, но старые плагины этого не знают (они скомпилированы со старым plugin.hpp) и при итерации по массиву Histories будет применяться прежний размер данной структуры, что, естественно, приведёт к неработоспособности, а скорее всего и к падению.

Post Reply

Return to “Нужна помощь”