Перегрузка/подгрузка скриптов/макросов «на лету»

Здесь обсуждается всё, что касается макросов.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

Latest post of the previous page:

zg wrote: Sat 25 Feb, 2023 20:25 чем вызван этот вопрос?
во время выполнения макроса я макросы перегружаю. никаких неожиданных последствий это не вызовет?
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Запуск макроса по событию смены директории

Post by zg »

gotar wrote: Sun 26 Feb, 2023 11:23 никаких неожиданных последствий это не вызовет?
не должно быть более неожиданно, чем перезагрузка из любого другого места.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Перегрузка/подгрузка скриптов/макросов «на лету»

Post by zg »

buniak_a_h wrote: Sat 25 Feb, 2023 19:38 far.MacroLoadAll([[%FARPROFILE%\Macros\scripts;]]..APanel.Path)
а зачем так жёстко? какое-то практическое применение такому подходу есть?
Last edited by Guest on Sun 05 Mar, 2023 18:55, edited 1 time in total.
Reason: Тема отделена
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

zg wrote: Sat 04 Mar, 2023 18:10 а зачем так жёстко? какое-то практическое применение такому подходу есть?
Вопроса (претензии) не понял. Стояла задача дозагрузить макросы из текущей папки и её подпапок, не теряя те, что загружены стандартно.
Я знаю ещё только один способ это сделать:
перебирать макро-файлы в папке активной панели, читать, интерпретировать и добавлять через far.MacroAdd (да ещё и проверять как-то на уникальность). Думаете, это - мягче?
Если знаете ещё какой "нежный" способ решения задачи - вэлкам!
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Запуск макроса по событию смены директории

Post by zg »

buniak_a_h wrote: Sun 05 Mar, 2023 01:11 Вопроса (претензии) не понял.
перегрузка макросов мягко говоря не очень лёгкая операция даже с моими тремя небольшими макросами, сколько это занимает с вашими гигабайтами — боюсь представить.
buniak_a_h wrote: Sun 05 Mar, 2023 01:11 Стояла задача дозагрузить макросы из текущей папки и её подпапок, не теряя те, что загружены стандартно.
вот мне интересно, что за задача такая.
buniak_a_h wrote: Sun 05 Mar, 2023 01:11 Думаете, это - мягче?
вопрос в задаче. из того, что я смог себе представить, это создание папок/файлов по шаблону (генерация новых проектов и подобное) и нестандартный запуск (папкозависимые ассоциации). но это настолько простые вещи, что именно far.MacroAdd/far.MacroDelete были бы самым простым решением.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

zg wrote: Sun 05 Mar, 2023 02:35 вот мне интересно, что за задача такая.
Задача была сформулирована так:
gotar wrote: Wed 22 Feb, 2023 18:03 А можно попросить пример макроса, использующего это событие. Например, загрузить макросы из текущей директории.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

buniak_a_h wrote: Sun 05 Mar, 2023 01:11
добавлять через far.MacroAdd
Судя по описанию, far.MarcoAdd может грузить только клавиатурные макросы. Это не так?
Last edited by gotar on Sun 05 Mar, 2023 13:38, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar wrote: Sun 05 Mar, 2023 13:37 far.MarcoAdd может грузить только клавиатурные макросы. Это не так?
Судя по описанию, как раз не так.
  1. Есть priority, который не актуален для клавиатурных макросов.
  2. Есть callback - аналог condition.
  3. Требуется только указание action, а не code в виде текста.
Last edited by buniak_a_h on Sun 05 Mar, 2023 13:46, edited 2 times in total.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

zg wrote: Sun 05 Mar, 2023 02:35 перегрузка макросов мягко говоря не очень лёгкая операция даже с моими тремя небольшими макросами, сколько это занимает с вашими гигабайтами — боюсь представить.
Если far.MacroLoadAll Вам кажется слишком тяжелой задачей, давай те заменим на выполнение lua файла с фиксированным именем. Например, в нем можно поменять настройки редактора, режимы сортировки, горячие клавиши и т.п. используемые в конкретном каталоге. Честно говоря пример мне уже не нужен, у меня почти все работает.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

buniak_a_h wrote: Sun 05 Mar, 2023 13:44 Требуется только указание action, а не code в виде текста
В far.MacroAdd нет ни параметра code ни параметра action. Есть параметр SequenceText, который судя по описанию MacroControl(MCTL_ADDMACRO)
и есть клавиатурный макрос. Вы могли бы привести пример вызова far.MacroAdd в котором по нажатию горячей клавиши вызывалась бы функция, описанная в этом же файле.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar wrote: Sun 05 Mar, 2023 14:02 Вы могли бы привести пример вызова far.MacroAdd в котором по нажатию горячей клавиши вызывалась бы функция, описанная в этом же файле
Есть мой скрипт LuaComplete Tabbed, там есть такой текст (слегка упрощённо):

Code: Select all

far.MacroAdd('MACROAREA_MENU', 0,
 c,
 [[
    local FilterStr = Menu.FilterStr(0) or ''
    Menu.FilterStr( 1, FilterStr.. akey(1,1) )
    Menu.Filter(1,1)
 ]]
 ,'FilterStr ++ '..c,
 function() return Menu.Id == MenuId end)
Ну и ещё есть …
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Запуск макроса по событию смены директории

Post by zg »

gotar wrote: Sun 05 Mar, 2023 13:54Честно говоря пример мне уже не нужен, у меня почти все работает.
пример нужен мне. я тут примитивный макрос для установки состояний папок. на данный момент есть установка сортировки с порядком и выполнение кода при заходе. так вот с сортировкой я смог придумать только два полезных примера. с кодом — только подсказанный @buniak_a_h пример с открытием пользовательского меню.
gotar wrote: Sun 05 Mar, 2023 13:54давай те заменим на выполнение lua файла с фиксированным именем.
элементарно делается.
gotar wrote: Sun 05 Mar, 2023 13:54Например, в нем можно поменять настройки редактора
зачем? настройки редактора можно уже больше 20 лет поменять при открытии файла в редакторе.
gotar wrote: Sun 05 Mar, 2023 13:54горячие клавиши и т.п.
интересны конкретные примеры.
gotar wrote: Sun 05 Mar, 2023 14:02Вы могли бы привести пример вызова far.MacroAdd в котором по нажатию горячей клавиши вызывалась бы функция, описанная в этом же файле.
функцию кладёте в _G и вызываете, никаких проблем быть не должно.
Last edited by zg on Sun 05 Mar, 2023 16:18, edited 2 times in total.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

zg wrote: Sun 05 Mar, 2023 16:17 настройки редактора можно уже больше 20 лет поменять при открытии файла в редакторе.
Я знаю только Ваш макрос обработки vim modeline. Все остальное - изменение характеристик редактора в зависимости от расширения файлов.
Про горячие клавиши: есть куча полезных макросов, которые не нужны при каждодневном использовании, а только при редактировании конкретного файла. Если их положить %FarProfile%\macros\scripts фар начинает вести себя хаотично. Хотелось бы использовать макросы только тогда, когда они нужны.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar wrote: Sun 05 Mar, 2023 14:02 Вы могли бы привести пример вызова far.MacroAdd в котором по нажатию горячей клавиши вызывалась бы функция, описанная в этом же файле
Возможно, я неточно понял задачу (проблему). «В этом же файле» - это в каком? В том, в котором вызывается far.MacroAdd? Легко:
  1. local F = far.Flags
  2.  
  3. local function Action()
  4.  
  5.   --[[*D*]]far.Show('2: madd вызван')
  6.  
  7. end
  8.  
  9. _G.BB_Test = {Action=Action}
  10.  
  11. far.MacroAdd(F.MACROAREA_COMMON, nil, 'CtrlShiftH', '_G.BB_Test.Action()', 'Тест')
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar wrote: Sun 05 Mar, 2023 17:17 Про горячие клавиши: есть куча полезных макросов, которые не нужны при каждодневном использовании, а только при редактировании конкретного файла. Если их положить %FarProfile%\macros\scripts фар начинает вести себя хаотично. Хотелось бы использовать макросы только тогда, когда они нужны.
А описать в condition правило типа
return far.ProcessName(F.PN_CMPNAMELIST, [[…(список масок файлов, в т.ч. имён масок)]], Editor.FileName)?
Или того проще: указать маску файлов, в которых макрос должен работать, в клаузе filemask? Не?
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

В описании far.MacroAdd упоминается структура tInputRecord.
В tInputRecord есть поле EventType. В этом поле может быть событие, связанное с темой этого топика? Как оно называется и какие в этом случае поля у tInputRecord?
Post Reply

Return to “Обсуждение макросов”