Far 3 & SettingsControl

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

Far 3 & SettingsControl

Post by Shmuel »

Latest post of the previous page:

DrKnS wrote: Sat 15 Dec, 2018 18:14 Можно узнать, зачем вы держите у себя код, который не работает?
А что неправильного делает этот код, который не работает?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Far 3 & SettingsControl

Post by DrKnS »

Shmuel wrote: Sat 15 Dec, 2018 18:35А что неправильного делает этот код, который не работает?
Вы его не показываете, поэтому сложно что-то утверждать.
Исходя из схожести симптомов со случаем, описанным ранее John Doe - возможно, пытается открыть уже эксклюзивно кем-то (в т.ч. собой) открытую базу. Или я не прав и всё совсем иначе?
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Far 3 & SettingsControl

Post by Shmuel »

DrKnS wrote: Sat 15 Dec, 2018 18:51 возможно, пытается открыть уже эксклюзивно кем-то (в т.ч. собой) открытую базу
Ну да, только в Far API разве можно открыть базу не эксклюзивно?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Far 3 & SettingsControl

Post by DrKnS »

Сейчас - нельзя, поэтому я и интересуюсь - зачем вам ускорять код, который всё равно не работает?

Если из plugsettings.cpp выкинуть PluginsCfg->BeginTransaction() и PluginsCfg->EndTransaction() - скорее всего, будет можно, но настройки, наверное, будут сохраняться несколько дольше. Или не дольше. Или в пределах погрешности, кто его знает.

Последний раз, как я понимаю, с этим экспериментировал t-rex, 21.03.2011, build 1924.
Возможно, за 8 лет SQLite оптимизировали (ну или железо догнало) и все эти приседания уже неактуальны.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Far 3 & SettingsControl

Post by Shmuel »

DrKnS wrote: Sat 15 Dec, 2018 19:14 зачем вам ускорять код, который всё равно не работает?
Мне не ускорять надо, и код у меня, как правило, работает (это в ответ на вопрос, зачем я держу у себя неработающий код) :)
Но есть такая штука, как экспериментирование с кодом, при котором возможны любые ситуации.

То, что сейчас принудительная эксклюзивность, мне не нравится. Предпочёл бы, например, добавление в API команд SCTL_BEGIN и SCTL_COMMIT (не обязательных для применения). Но да ладно, переживём.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Far 3 & SettingsControl

Post by DrKnS »

Shmuel wrote: Sat 15 Dec, 2018 19:26То, что сейчас принудительная эксклюзивность, мне не нравится. Предпочёл бы, например, добавление в API команд SCTL_BEGIN и SCTL_COMMIT.
Я так и хотел сделать для решения 0002940. Но zg, например, считает, что это слишком низкоуровнево.
Я не писал плагинов, использующих SettingsControl, поэтому настаивать не стал.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Far 3 & SettingsControl

Post by Shmuel »

Не так давно сильно критиковалась функция far.FreeSettings(). А ведь, фактически, это единственный способ закрыть хэндлы, созданные, но не закрытые какими-то (да, кривыми) макросами. А иначе, доступ к Settings Control для всех прочих макросов будет перекрыт (в плохом варианте - вплоть до перезагрузки Фара).
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Far 3 & SettingsControl

Post by DrKnS »

Shmuel wrote: Sat 15 Dec, 2018 19:58это единственный способ закрыть хэндлы
Это, всё же, слишком грубо и кто-то потом, с ненулевой вероятностью и неизвестными последствиями, обломается.
доступ к Settings Control для всех прочих макросов будет перекрыт
Если архитектурно все макросы живут в одном плагине - несомненно.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Far 3 & SettingsControl

Post by Shmuel »

DrKnS wrote: Sat 15 Dec, 2018 20:41
доступ к Settings Control для всех прочих макросов будет перекрыт
Если архитектурно все макросы живут в одном плагине - несомненно.
Но это всего лишь следствие искусственно навязанной эксклюзивности доступа к базе.
Что касается воображаемой (или неизвестно кем используемой) архитектуры, при которой макросы живут в разных плагинах, это представляет теоретический интерес. Практически я с этим не встречался.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Far 3 & SettingsControl

Post by John Doe »

Подскажите при доступе к историям едитбоксов имеет ли смысл что-либо кроме SCTL_ENUM?
Я для эксперимента (за отсутствием документации) попробовал SCTL_GET, но ничего кроме nil от него не смог добиться.

Знаю только что buniak_a_h в соседней теме вроде бы SCTL_DELETE смог задействовать.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Far 3 & SettingsControl

Post by buniak_a_h »

John Doe wrote: Wed 03 Apr, 2024 01:34 Знаю только что buniak_a_h в соседней теме вроде бы SCTL_DELETE смог задействовать.
Если честно, я даже не знаю ничего про флаги SCTL_…. Если Вы имеете в виду удаление элемента из именованной истории, то в макросе я это делал вызовом obj:Delete(…)
P/S. Про вызов Get (и Set) можно посмотреть в скрипте Bookmark manager от IgorZ - там есть, по-моему, всё.
Last edited by buniak_a_h on Wed 03 Apr, 2024 02:31, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Far 3 & SettingsControl

Post by John Doe »

buniak_a_h wrote: Wed 03 Apr, 2024 02:30 Если честно, я даже не знаю ничего про флаги SCTL_…
В LuaFAR это просто Enum/Get/Set.
buniak_a_h wrote: Wed 03 Apr, 2024 02:30 Если Вы имеете в виду удаление элемента из именованной истории, то в макросе я это делал вызовом obj:Delete(…)
Я не знаю что вы понимаете под "именованной историей".
Меня интересует история в полях ввода, Enum с ней работает, вопрос в том можно ли к ней применить и другие функции - Get/Set/Delete.
Если можно, то пример использования, с параметрами.
Спрашиваю потому что у меня не получилось, и возможно просто где-то протупил.
buniak_a_h wrote: Wed 03 Apr, 2024 02:30 Про вызов Get (и Set) можно посмотреть в скрипте Bookmark manager от IgorZ - там есть, по-моему, всё.
Вот именно, там много разного, при том максимально размазано по всему коду, поэтому найти нужный вариант использования у меня что-то не получилось.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Far 3 & SettingsControl

Post by buniak_a_h »

John Doe wrote: Wed 03 Apr, 2024 10:41 Я не знаю что вы понимаете под "именованной историей".
Вот как раз история DI_EDIT-ов и т.п. . «Именованная» - т.к. у неё есть имя (7-й элемент - History - таблицы, описывающей итем). В отличие от истории команд-папок-редактируемых файлов. У них нет имени и изменения там запрещены (якобы в целях обеспечения безопасности, котя всегда можно сделать любые изменения, используя Keys):
zg wrote: Sat 26 Nov, 2022 23:44
Shmuel wrote: Thu 24 Nov, 2022 18:09Мне кажется, что удаление из истории Фара с помощью API Settings не предусмотрено.
так и есть.
zg wrote: Sun 27 Nov, 2022 13:55
buniak_a_h wrote: Sun 27 Nov, 2022 03:44 Специально заблокирована такая возможность, или просто недоделка?
специально. настройки нельзя менять из кода.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Far 3 & SettingsControl

Post by John Doe »

buniak_a_h wrote: Wed 03 Apr, 2024 11:20 Вот как раз история DI_EDIT-ов и т.п. . «Именованная»
И как именно вы с ней работаете?
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Far 3 & SettingsControl

Post by buniak_a_h »

John Doe wrote: Wed 03 Apr, 2024 11:32 И как именно вы с ней работаете?
Вот функция проверки наличия некоторой строки:

Здесь я проверяю только последний добавленный элемент истории, т.к. если он - не тот, что я ищу, то по DM_ADDHISTORY добавляю, и он оказывается последним. Можно в цикле проверить все элементы истории (строки с Enum и следующая).
Конкретно в этом скрипте я добавляю в начало истории временную панель. Но тупо добавлять, получается, нельзя, т.к. между прошлым добавлением и проверкой могли поменять язык, и тогда в истории будет два (или больше - в зависимости от настроек языка) пункта
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Far 3 & SettingsControl

Post by John Doe »

buniak_a_h wrote: Wed 03 Apr, 2024 11:56 Вот функция проверки наличия некоторой строки:
С Enum у меня тоже всё хорошо получается. С другими функциями у вас есть опыт?
https://t.me/FarManager — Telegram чат
Post Reply

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