Latest post of the previous page:
теперь я не понялJohn Doe wrote:В противном случае запускает не оборачивая.
Latest post of the previous page:
теперь я не понялJohn Doe wrote:В противном случае запускает не оборачивая.
Ну почему - вполне поможет. Пример подразумевал целью - именно проверить наличие плагина. А доступность в контексте определяется обычным способом - через macroarea.AlexII wrote:Пусть в примере на замену F11, Menu.Select() сие не особо поможет (не все плагины могут быть доступны в вызванном контексте)
Не ясно. Если можно — пример макроса в личку.Max Rusov wrote:А доступность в контексте определяется обычным способом - через macroarea.
Спасибо, теперь ясно.Max Rusov wrote:Макрос привязан к macroarea, там где он не имеет смысла он не вызовется.
Ну, если мы говорим в контексте MacroLib, то там все проще. Макросы в реестре приходилось относить к области Common, чтобы не дублировать их код для N областей, где макрос имеет смысл. MacroLib умеет привязывать макрос сразу к нескольким областям - только тем где он действительно работает, например: Area="Shell Editor Viewer". Поэтому Common макросов становится не так много - только такие, которые действительно имеют смысл везде. У меня таких - всего несколько штук осталось.AlexII wrote:А если макрос в области «Common»?"
Нельзя ли привести практический пример полезности этой идеи?Max Rusov wrote:А можно ли теперь будет решить задачу, обсуждавшуюся в этом топике:
Как вернуть в плагин результат работы макроса?
По приведенной ссылке было много примеров, но продублирую.Shmuel wrote:Нельзя ли привести практический пример полезности этой идеи?
Code: Select all
macro Descr="Extended Copy" Area="Shell" Key="F5" If="Plugin.Exist(#%ExtendedCopy)"
{{
Plugin.Menu(#%ExtendedCopy)
}}
...Конечно, в 90% случаев if будет укладываться в формулу, но эта формула должна пользоваться всеми функциями макро-api. Например, очень часто нужен условный запуск макросов, в зависимости от переменных окружения. Не хочется повторять вычислитель выражений в плагине, раз он уже есть в FAR'е.
Это в принципе можно было бы реализовать по другому, не возвращая результат операции плагину, а делая всё внутри Фара. То-есть, каждый макрос нового формата содержал бы два макроса старого формата, первый из которых определял бы, нужно ли запускать второй.Max Rusov wrote:Довольно давно предлагалось сделать для макросов более гибкое условие запуска, чтобы это было произвольное логическое выражение, а не просто набор флажков. Например, в MacroLib можно было бы писать:
Code: Select all
macro Descr="Extended Copy" Area="Shell" Key="F5" If="Plugin.Exist(#%ExtendedCopy)" {{ Plugin.Menu(#%ExtendedCopy) }}
Нет никакой проблемы уже сейчас добавить функцию в API плагинов, которая бы вызывала Lua-скрипт синхронно и возвращала бы результат (один или более). Загвоздка в том, видимо, что этот скрипт не должен посылать клавиш или делать прочие операции, для которых нужно быть внутри цикла опроса и обработки событий.NightRoman wrote:Наверное, не совсем так. Условие-то должно быть записано пользователем в виде скрипта. И плагин этот скрипт (макрос) должен запустить и получить результат.