Вызов из макроса другого макроса по AKey - объясните логику работы?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

Поясните логику работы пожалуйста, есть макрос от SimSU. У него есть такой кусок кода:
  1. Macro {area="Shell"; key=S.KeyAuto; priority=S.PriorAuto; description=M.DescrAuto; flags="EmptyCommandLine";
  2.  
  3.   condition=function() return FolderAuto and Mouse.EventFlags~=2 end;
  4.  
  5.   action=function() Keys("AKey"); SimSU.Shell_SamePath.Folder() end;
  6.  
  7. }
На клавиши вызова этого макроса у меня завязан другой макрос. Хочется чтобы вызвался данный макрос, выполнил другой а потом выполнил свою основную ф-цию. То есть:
1. Keys("AKey");
2. SimSU.Shell_SamePath.Folder()

Но почему-то не вызывается тот самый макрос. Подскажите пожалуйста, почему?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

В документации разве сказано, что Keys выполняет макросы?

А по сути вашего вопроса можете почитать например тут: http://bugs.farmanager.com/view.php?id=2581
И не забудьте принять меры по предотвращению зацикливания.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

К эвалу уже пришёл сам, а как избежать зацикливания если 2 макроса по сути на 1 ключ повешены?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

LanKing wrote: а как избежать зацикливания если 2 макроса по сути на 1 ключ повешены?
Подозреваю и к этому придёте самостоятельно, если подумаете, поэкспериментируете.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

Дело в том, что КАКОЙ макрос вызывается по хоткею я не знаю. Мне бы получит список макросов по хоткею и выполнить не родительский. Подскажите всё-таки плз.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by sToLp »

LanKing
:rtfm2:
Чтобы грамотно работать с макросами это нужно знать!
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.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

Да, надо придумать подходящее условие для condition
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by SUSim »

LanKing, просто на свой макрос поставь приорите повыше, а из моего дёргай нужные функции...
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

SUSim
Нерелевантный совет
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

John Doe wrote:SUSim
Нерелевантный совет
Согласен
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

SUSim, Кстати, это я ваш скрипт модифицировал. Не воспримите как назойливую критику, респект и уважуха за ваш труд -- Shell_SamePath.lua. Но пара моментов имеются:
В 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
P.S. Я у себя не использую Space как выход из папки, но для Space у вас недостаточно условий было. Правильнее так:

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;
}               
Всем: Извините за оффтоп, просто продемонстрировал решение моего вопроса в виде реализации конкретного куска кода.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

LanKing wrote: Извините за оффтоп
Да просто логичнее было бы разместить сообщение в другой теме.
LanKing wrote: eval("./"..k,2)
А не лишнее ли тут "./"..
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

По идее нет.
Если в качестве "Area/" указана строка "./", то будет вызван макрос, назначенный на "Key" только в текущей области.

Пример: eval("./CtrlP",2)
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by John Doe »

А почему не хотите выполнять макросы из Common?
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Вызов из макроса другого макроса по AKey - объясните логику работы?

Post by LanKing »

Я не знаю, какие сторонние макросы будут вызываться, поэтому сделал универсальное решение.
Post Reply

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