Изменение настроек в скрипте Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

Здравствуйте, уважаемые.
У меня такой вопрос (наверняка обсуждался, просто не знаю, как сформулировать поисковый запрос).
Мне надо в процессе выполнения скрипта изменить настройки ФАРа (в частности, запретить запись в историю, сделать дело и восстановить).
Получить нынешнее состояние- Far.GetConfig. Также можно через вызовы SQLite (тут не только прочитать можно, но и поменять). Но это попахивает "хакерством". Есть ли цивилизованный способ поменять настройки (причём было бы здорово, если б только на текущий сеанс, если не включено автосохранение настроек и не вызвано сохранение по ShiftF9). Но вот только изменённые параметры не учитываются ФАРом. Как быть?
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Изменение настроек в скрипте

Post by Yegor »

far.CreateSettings не оно?
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

Yegor wrote: Thu 26 Mar, 2020 00:33 far.CreateSettings не оно?
Я знаю, как при помощи этого прочитать и изменить конкретную историю (зная имя). Но вот как менять настройки - я не знаю. Более того! Хотя в мануале написано
For creating an object for accessing Far settings, pass Guid == "far".
но что с этим делать дальше - я не знаю. Конкретную историю (имя которой указано в tFarDialogItem[7]) - я могу получить и даже скорректировать. А где хранятся настройки самого FAR-а - я пока не нашёл.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

Yegor wrote: Thu 26 Mar, 2020 00:33 far.CreateSettings не оно?
Вдогонку…
Такой скрипт:

Code: Select all

local obj = far.CreateSettings('far')
local enum = obj:Enum(far.Flags.FSSF_HISTORY_CMD)
require'le'(enum)
выдаёт собственно историю, а не настройку (запоминать/нет).
Такой:

Code: Select all

local obj = far.CreateSettings('far')
local enum = obj:Enum(far.Flags.FSSF_SYSTEM)
require'le'(enum)
возвращает вообще nil (я надеялся как раз получить настройки из раздела System (те, что в far:Config начинаются с System.. Именно там есть настройка System.SaveHistory и остальные… :-()
Там ещё засада: enum для этих флагов недопустим:
John Doe wrote: Эти настройки хранятся как FarSettingsItem, Enum запрещён, получить значения (Get) можно по имени параметра,
Но в разделе System по имени параметра можно получить только 5 параметров; CopyOpened, DeleteToRecycleBin, PluginMaxReadData, ScanJunction и WordDiv. И я абсолютно не понимаю, чем, например, DeleteToRecycleBin лучше SaveFoldersHistory! Почему изменить настройку "удаление в корзину" можно поменять из макроса, а "сохранять историю …" - нельзя! Если судить с точки зрения безопасности - так наоборот, история касается только FAR-а, а безвозвратное удаление - именно безопасности.
Грустно…
Last edited by buniak_a_h on Thu 26 Mar, 2020 07:42, edited 3 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

Увы, "родственная тема" закрыта, ссылка на мантис. Обоснование "запрета" изменения настроек из плагина/скрипта такая:
https://bugs.farmanager.com/view.php?id=2481#c11400 wrote:а если плагин не злонамеренный, то и менять настройки ему не нужно.
Очень спорное утверждение, пример я привёл (в процессе работы панельного модуля надо запретить запись в историю, а затем восстановить). Far.DisableHistory работать не будет, т.к. дело происходит не во время работы скрипта. Но… С Юпитером не поспоришь…
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Изменение настроек в скрипте

Post by John Doe »

buniak_a_h wrote: Wed 25 Mar, 2020 23:43 пример я привёл
Может быть это с примером не всё хорошо.
Штатная временная панель ведь не имеет такой проблемы.

Даже если допустить что сейчас в фаре соответствующая функциональность работает не так как вам требуется - это не означает это правильный путь - выставлять путь вручную и при этом пытаться подавить историю
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

John Doe wrote: Thu 26 Mar, 2020 09:01 Штатная временная панель ведь не имеет такой проблемы.
У штатной временной панели есть фишка "автоматически переходить в пассивной панели на файл"? Я не знал, где настраивается? Потому что если тупо открывать на пассивной панели папку из временной, то все они помещаются в историю.
John Doe wrote: Thu 26 Mar, 2020 09:01 Даже если допустить что сейчас в фаре соответствующая функциональность работает не так как вам требуется - это не означает это правильный путь - выставлять путь вручную и при этом пытаться подавить историю
Это я уже совсем не понял… Всё работает правильно, всё - так, как мне требуется.

На самом деле ограничивать настройку того, что доступно последовательностью keystroke, глупо: можно обойти, только выглядит это, как Вы сами писали про моё первоначальное чтение с консоли, "варварски". Ну и не всегда доступно (функция Keys не всегда доступна). Да и последовательность клавиш может со временем измениться (добавится пункт в меню настроек - и ба-бах!).
Надо только проверить нынешнее состояние настройки (через Far.GetConfig(…))
Last edited by buniak_a_h on Thu 26 Mar, 2020 10:37, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Изменение настроек в скрипте

Post by John Doe »

buniak_a_h wrote: Thu 26 Mar, 2020 10:36 У штатной временной панели есть фишка "автоматически переходить в пассивной панели на файл"?
Автоматически нет конечно, а если бы была - в историю попадало бы.
buniak_a_h wrote: Thu 26 Mar, 2020 10:36 Это я уже совсем не понял… Всё работает правильно, всё - так, как мне требуется.
Да, похоже что всё работает правильно, и ничего другого не предусмотрено.
buniak_a_h wrote: Thu 26 Mar, 2020 10:36 На самом деле ограничивать настройку того, что доступно последовательностью keystroke, глупо: можно обойти
Отсутствие прямой возможности настроить через апи - это естественный ограничитель, чтобы не приходило в голову злоупотреблять.

Возможно, для истории стоило бы сделать исключение. Но не так в лоб (отключить полностью), а как-нибудь атомарно (например как параметр SetPath).

Кроме того, вы упускаете ещё один вариант решения вашего вопроса: вспомогательный макрос для навигации по вашей панели.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

John Doe wrote: Thu 26 Mar, 2020 11:10 Кроме того, вы упускаете ещё один вариант решения вашего вопроса: вспомогательный макрос для навигации по вашей панели.
Уже не упускаю. Т.к. прямой вызов Keys в том месте приводит к вылету, пришлось для выключения сохранения и перехода в папку вызывать mf.postmacro. А раз всё равно postmacro, то и Far.DisableHistory(2) заработало. Задача в принципе решена, хотя и проктологично.
Всем спасибо.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Изменение настроек в скрипте

Post by John Doe »

buniak_a_h wrote: Wed 25 Mar, 2020 23:43 Уже не упускаю
Вообще-то имелся ввиду не програмный, а пользовательский макрос. Это чуть попрямее
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Изменение настроек в скрипте

Post by zg »

John Doe wrote: Thu 26 Mar, 2020 11:10Отсутствие прямой возможности настроить через апи - это естественный ограничитель, чтобы не приходило в голову злоупотреблять.

Возможно, для истории стоило бы сделать исключение. Но не так в лоб (отключить полностью), а как-нибудь атомарно (например как параметр SetPath).
всё правильно сейчас.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

John Doe wrote: Thu 26 Mar, 2020 12:14 Вообще-то имелся ввиду не програмный, а пользовательский макрос. Это чуть попрямее
Я, наверно, не знаю терминологии. Знаю клавиатурные и стационарные макросы. Если имеется в виду повесить макрос на какую-нить клавишу - это точно не "прямее". Ну просто там нет клавиши: положение текущего итема может меняться слишком разными клавишами.
zg wrote: Thu 26 Mar, 2020 12:24
John Doe wrote: Thu 26 Mar, 2020 11:10Отсутствие прямой возможности настроить через апи - это естественный ограничитель, чтобы не приходило в голову злоупотреблять.

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

Изменение настроек в скрипте

Post by zg »

buniak_a_h wrote: Thu 26 Mar, 2020 14:54Чо-т я не понял сообщения. Ссылка ведёт к совершенно другой теме, в которой я не участвую, сообщение не имеет ничего ни про изменение настроек из скрипта, ни про управление конкретно историей."правильно" - это о чём?
изменение настроек программы втайне от пользователя — зло. то же самое в программе с кучей деструктивных функций — очень большое зло. у фара был в прошлом пример, когда плагин случайно менял сочетание xlat на x и потом годами пользователи жаловались, что не работает кнопка x. при этом и версия исправленная давно вышла и написано про это везде было. поэтому реальный пример, почему это плохо — есть. иногда это бывает хорошо, пример editor.SetParam. но все изменения локальны и временны для конкретной копии. но даже тут не обошлось без приключений, хотя гораздо меньшего масштаба. а по ссылке пример человека, который пишет скрипт, который влияет буквально на всё в фаре, и при этом не утруждает себя чтением документации. давать в руки таких людей возможность перманентно менять состояние фара — не выглядит разумным. и да, возможно для вас польза от (в процессе работы панельного модуля надо запретить запись в историю, а затем восстановить) очевидна. я, например, не понимаю — зачем это.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Изменение настроек в скрипте

Post by buniak_a_h »

zg, а клавиатурной последовательностью можно изменить эти настройки? А если можно - в чём смысл запрета?
Именно так я в одном из непоследних вариантов обошёл ваш запрет. :P
Если уж хотите защититься, то нужно предусмотреть специальный запуск ФАРа с ключом /Administrator и запрещать изменение настроек без этого ключа. Хотя бы … Без парольной защиты.
Last edited by buniak_a_h on Thu 26 Mar, 2020 16:38, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Изменение настроек в скрипте

Post by John Doe »

buniak_a_h wrote: Thu 26 Mar, 2020 14:54 Если имеется в виду повесить макрос на какую-нить клавишу - это точно не "прямее".
Это прямее в том смысле, что из кода скрипта выбрасываются сомнительные (и ненадёжные) костыли, по простой и логичной причине: "не предусмотрено в апи".
А вот пользователь в этом плане гораздо свободнее: не нужна история - значит добавляет себе макрос. Это уже его собственный макрос, и это важно (потому что сторонний скрипт для пользователя как чёрный ящик).
Не, ну можно эти дополнительные макросы и в комплект положить, в папку Addons, не проблема.
buniak_a_h wrote: Thu 26 Mar, 2020 14:54Ну просто там нет клавиши: положение текущего итема может меняться слишком разными клавишами.
В этом случае описанный подход может не подойти.
buniak_a_h wrote: Thu 26 Mar, 2020 16:35 а клавиатурной последовательностью можно изменить эти настройки? А если можно - в чём смысл запрета?
Вот тут (в цитате) же viewtopic.php?p=159888#p159888
https://t.me/FarManager — Telegram чат
Post Reply

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