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

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

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

Post by LanKing » Tue 09 Dec, 2014 20:08

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

Но почему-то не вызывается тот самый макрос. Подскажите пожалуйста, почему?

User avatar
John Doe
Бюрократ
Posts: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Wed 10 Dec, 2014 09:04

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

А по сути вашего вопроса можете почитать например тут: http://bugs.farmanager.com/view.php?id=2581
И не забудьте принять меры по предотвращению зацикливания.

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Wed 10 Dec, 2014 11:32

К эвалу уже пришёл сам, а как избежать зацикливания если 2 макроса по сути на 1 ключ повешены?

User avatar
John Doe
Бюрократ
Posts: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Wed 10 Dec, 2014 11:35

LanKing wrote: а как избежать зацикливания если 2 макроса по сути на 1 ключ повешены?
Подозреваю и к этому придёте самостоятельно, если подумаете, поэкспериментируете.

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Wed 10 Dec, 2014 15:14

Дело в том, что КАКОЙ макрос вызывается по хоткею я не знаю. Мне бы получит список макросов по хоткею и выполнить не родительский. Подскажите всё-таки плз.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 11 times

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

Post by sToLp » Wed 10 Dec, 2014 18:30

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Wed 10 Dec, 2014 18:39

Да, надо придумать подходящее условие для condition

User avatar
SUSim
Posts: 1536
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 9 times

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

Post by SUSim » Wed 10 Dec, 2014 20:11

LanKing, просто на свой макрос поставь приорите повыше, а из моего дёргай нужные функции...
SimSU ··· ·· -- ··· ··-

User avatar
John Doe
Бюрократ
Posts: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Wed 10 Dec, 2014 20:16

SUSim
Нерелевантный совет

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Wed 10 Dec, 2014 20:45

John Doe wrote:SUSim
Нерелевантный совет
Согласен

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Wed 10 Dec, 2014 21:05

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Thu 11 Dec, 2014 00:34

LanKing wrote: Извините за оффтоп
Да просто логичнее было бы разместить сообщение в другой теме.
LanKing wrote: eval("./"..k,2)
А не лишнее ли тут "./"..

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Thu 11 Dec, 2014 01:09

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

Пример: eval("./CtrlP",2)

User avatar
John Doe
Бюрократ
Posts: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Thu 11 Dec, 2014 10:20

А почему не хотите выполнять макросы из Common?

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Thu 11 Dec, 2014 14:32

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

User avatar
John Doe
Бюрократ
Posts: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Thu 11 Dec, 2014 14:36

Универсальным было бы eval(k,2)

Post Reply

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