Как включить другой файл кода в клавиатурный макрос?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
CodeMonkey
Posts: 82
Joined: Thu 14 Jul, 2016 11:17
Has thanked: 22 times

Как включить другой файл кода в клавиатурный макрос?

Post by CodeMonkey »

Собственно, сабж.
Или, может быть, есть возможность задать несколько макросов в одном файле? Если просто скопировать их в один файл, то не работает.
Чтобы не копировать один и тот же код в несколько файлов.
Shmuel
Posts: 6970
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 42 times
Been thanked: 562 times

Как включить другой файл кода в клавиатурный макрос?

Post by Shmuel »

Вам уже рассказали про папку Encyclopedia. Там есть мануал на русском языке.
"Клавиатурные" макросы - только один на файл. "Стационарные" - сколько угодно макросов в одном файле.
CodeMonkey
Posts: 82
Joined: Thu 14 Jul, 2016 11:17
Has thanked: 22 times

Как включить другой файл кода в клавиатурный макрос?

Post by CodeMonkey »

Shmuel wrote: Thu 13 Feb, 2025 18:35 "Клавиатурные" макросы - только один на файл. "Стационарные" - сколько угодно макросов в одном файле.
Это не отвечает на вопрос в заголовке.
User avatar
John Doe
Бюрократ
Posts: 14174
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 454 times
Contact:

Как включить другой файл кода в клавиатурный макрос?

Post by John Doe »

CodeMonkey wrote: Thu 13 Feb, 2025 18:41 Это не отвечает на вопрос в заголовке.
Если нужно переиспользовать код, то можно поместить его в глобальную переменную _G (нежелательно), либо использовать модули lua - см. мануал по луа.
Это если отвечать исключительно на вопрос в заголовке, потому что в посте вы резко смещаете контекст.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4459
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 239 times
Been thanked: 665 times
Contact:

Как включить другой файл кода в клавиатурный макрос?

Post by buniak_a_h »

Если нужно переиспользовать код, и его можно оформить в виде функции, то посмотрите про модули. Пишете скрипт, возвращающий функцию; помещаете его в %FarProfile%\Macros\modules\FIO; в коде своего макроса пишете нечто типа

Code: Select all

local SharedFunc = require"FIO.SharedFunc"
и вызываете переменную SharedFunc(…) как будто функция помещена в Ваш макрос
Увы, #include в LUA нету…
CodeMonkey
Posts: 82
Joined: Thu 14 Jul, 2016 11:17
Has thanked: 22 times

Как включить другой файл кода в клавиатурный макрос?

Post by CodeMonkey »

buniak_a_h wrote: Thu 13 Feb, 2025 21:21 local SharedFunc = require"FIO.SharedFunc"
А если просто сделать

Code: Select all

require("SharedFuncs")
?
Last edited by CodeMonkey on Sat 15 Feb, 2025 23:58, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4459
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 239 times
Been thanked: 665 times
Contact:

Как включить другой файл кода в клавиатурный макрос?

Post by buniak_a_h »

CodeMonkey wrote: Sat 15 Feb, 2025 23:58 А если просто сделать

Code: Select all

require("SharedFuncs")
?
  1. Можно и без FIO, но тогда модуль надо класть в %FarProfile%\Macros\modules и со временем там будет такая помойка-свалка! Надо как-то структурировать. Я для себя принял стандарт, что все мои модули собраны в подпапке BAX. Мне кажется, это - хороший тон.
  2. Просто оператор require вернёт функцию; её надо либо занести в переменную (как я написал), либо вызвать типа такого:

    Code: Select all

    require("SharedFuncs")(…)
    Но опять же со временем может получиться, что таких «разделяемых» функций будет несколько. Лично мне было бы влом писать модуль для каждой функции. Я в таких случаях пишу модуль, возвращающий таблицу, содержащую несколько (тематически связанных, но это - необязательно) функций.
  3. Можно, наверно, и без функции и вызова её обойтись, но код, записанный в модуле, не будет иметь доступ к переменным основного макроса и, соответственно, не смогут туда ничего вернуть (ну, может только через _G, но это - плохой стиль). Поэтому лучше, мне кажется, оформлять функцию, вызывать с параметрами и использовать её возврат.
User avatar
John Doe
Бюрократ
Posts: 14174
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 454 times
Contact:

Как включить другой файл кода в клавиатурный макрос?

Post by John Doe »

CodeMonkey wrote: Sat 15 Feb, 2025 23:58 А если просто сделать

Code: Select all

require("SharedFuncs")
Это возможно.
  1. Действительно в файле могут определяться глобальные идентификаторы.
    Но вообще начиная с Lua 5.1 так делать не принято.
  2. Да, можно вернуть не одну функцию, а таблицу.
Last edited by HaRT on Sun 16 Feb, 2025 12:51, edited 1 time in total.
Reason: Исправлен источник цитаты
https://t.me/FarManager — Telegram чат
Post Reply

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