Вызов из макроса другого макроса по AKey - объясните логику работы?
Вызов из макроса другого макроса по AKey - объясните логику работы?
Поясните логику работы пожалуйста, есть макрос от SimSU. У него есть такой кусок кода:
На клавиши вызова этого макроса у меня завязан другой макрос. Хочется чтобы вызвался данный макрос, выполнил другой а потом выполнил свою основную ф-цию. То есть:
1. Keys("AKey");
2. SimSU.Shell_SamePath.Folder()
Но почему-то не вызывается тот самый макрос. Подскажите пожалуйста, почему?
1. Keys("AKey");
2. SimSU.Shell_SamePath.Folder()
Но почему-то не вызывается тот самый макрос. Подскажите пожалуйста, почему?
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вызов из макроса другого макроса по AKey - объясните логику работы?
В документации разве сказано, что Keys выполняет макросы?
А по сути вашего вопроса можете почитать например тут: http://bugs.farmanager.com/view.php?id=2581
И не забудьте принять меры по предотвращению зацикливания.
А по сути вашего вопроса можете почитать например тут: http://bugs.farmanager.com/view.php?id=2581
И не забудьте принять меры по предотвращению зацикливания.
Вызов из макроса другого макроса по AKey - объясните логику работы?
К эвалу уже пришёл сам, а как избежать зацикливания если 2 макроса по сути на 1 ключ повешены?
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вызов из макроса другого макроса по AKey - объясните логику работы?
Подозреваю и к этому придёте самостоятельно, если подумаете, поэкспериментируете.
Вызов из макроса другого макроса по AKey - объясните логику работы?
Дело в том, что КАКОЙ макрос вызывается по хоткею я не знаю. Мне бы получит список макросов по хоткею и выполнить не родительский. Подскажите всё-таки плз.
Вызов из макроса другого макроса по AKey - объясните логику работы?
LanKing
Чтобы грамотно работать с макросами это нужно знать!
Чтобы грамотно работать с макросами это нужно знать!
shmuel 17.05.2013 20:01:52 +0300 - build 166
1. При "конфликте" макросов, в меню выбора макроса работает AltF4 - открытие модального редактора.
shmuel 29.12.2012 15:09:01 +0200 - build 54
4. Допустимо более одного макроса на сочетание (key,area). В этом случае выполняется только макрос с наибольшим
приоритетом (как описано в 4a,4b,4c). Если есть более одного макроса с одинаковым приоритетом - выводится меню.
Для автостартующих макросов - выполняются все, независимо от приоритета.
4a. Опциональное поле 'priority' в описании макроса: число от 0 до 100. Значение по умолчанию = 50.
4b. Опциональное поле 'condition' в описании макроса: функция. Eсли возвращает false/nil/ничего, то макрос
не исполняется. Если возвращает число, то это число используется вместо 'priority'. При других значениях
возврата (например, true) используется 'priority'.
4c. Макросы, добавляемые посредством MCTL_ADDMACRO, имеют приоритет = 50.
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вызов из макроса другого макроса по AKey - объясните логику работы?
Да, надо придумать подходящее условие для condition
Вызов из макроса другого макроса по AKey - объясните логику работы?
СогласенJohn Doe wrote:SUSim
Нерелевантный совет
Вызов из макроса другого макроса по AKey - объясните логику работы?
SUSim, Кстати, это я ваш скрипт модифицировал. Не воспримите как назойливую критику, респект и уважуха за ваш труд -- Shell_SamePath.lua. Но пара моментов имеются:
В KeyAuto необходимо добавить ShiftPgUp ShiftPgDn
И были конфликты при работе с другими макросами навигации. Поэтому ф-ция стала такой:
И в теле скрипта добавилось
P.S. Я у себя не использую Space как выход из папки, но для Space у вас недостаточно условий было. Правильнее так:
Всем: Извините за оффтоп, просто продемонстрировал решение моего вопроса в виде реализации конкретного куска кода.
В KeyAuto необходимо добавить ShiftPgUp ShiftPgDn
И были конфликты при работе с другими макросами навигации. Поэтому ф-ция стала такой:
Code: Select all
Macro {area="Shell"; key=S.KeyAuto; priority=S.PriorAuto; description=M.DescrAuto; flags="EmptyCommandLine";
condition=function() return FolderAuto and Mouse.EventFlags~=2 and ExecAnotherMacro==false end;
action=function() ExecAnotherMacro = true; k = akey(1, 0); if eval("./"..k,2)==-2 then Keys(k) end; ExecAnotherMacro = false;SimSU.Shell_SamePath.Folder() end;
}
Code: Select all
local ExecAnotherMacro=false
Code: Select all
Macro {area="Shell"; key=S.KeyAutoUpSpace; priority=S.PriorAutoUpSpace; description=M.DescrAutoUp;
condition=function() return FolderAuto and APanel.Bof and not APanel.Root; end; action=SimSU.Shell_SamePath.Up;
}
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вызов из макроса другого макроса по AKey - объясните логику работы?
Да просто логичнее было бы разместить сообщение в другой теме.
А не лишнее ли тут
"./"..
Вызов из макроса другого макроса по AKey - объясните логику работы?
По идее нет.
Если в качестве "Area/" указана строка "./", то будет вызван макрос, назначенный на "Key" только в текущей области.
Пример: eval("./CtrlP",2)
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вызов из макроса другого макроса по AKey - объясните логику работы?
А почему не хотите выполнять макросы из Common?
Вызов из макроса другого макроса по AKey - объясните логику работы?
Я не знаю, какие сторонние макросы будут вызываться, поэтому сделал универсальное решение.