Макрофункция Exec()

Здесь обсуждается всё, что касается макросов.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрофункция Exec()

Post by SUSim »

Latest post of the previous page:

брр... не понял.
в меню пользователя (F2) жму Ins в полях команды пишу
edit:<type !.! и получаю в редактор содержимое файла,
создаю другой пункт юзерменю команду задаю vc: "!/!.!" "!#!/!.!" запускается плагин VisualCompare Максима Русова со сравнением 2 файлов соседних панелей, такое и должна выполнять эта макрокоманда!

А если запускать просто команду винды/приложение то это мне ,почти, не нужно... :(

У меня плагин есть который с этим отлично справляется, ща вот под callplagin его допилю... Хотите я и вывод в клипбоард им помещать буду? я хотел наооборот от него отказаться...
SimSU ··· ·· -- ··· ··-
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Макрофункция Exec()

Post by AlexII »

Что нужно реально получить в макросе при запуске процесса из макроса (без переключения на панели, без помещения командной строки запуска в историю):
1) ErrorLevel;
2) содержимое StdOut и StdErr (желательно раздельно, если нет — то шут с ним).
Хотя бы в предопределённые переменные (наподобие состояний «Far.Title» и т.п.). Всё прочее — вторично.

Для реализации 1) сейчас, скажем, делаю . Вот такие приседания.

Ещё больше плясок с бубном получается, если нужно получить вывод команды в переменную.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Макрофункция Exec()

Post by Max Rusov »

Нужно реализовать ProcessMacroFunc, все остальное смогут сделать плагины. Вот мне, например, больше хочется automation объекты - я планирую их как функции в MacroLib'е...
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Макрофункция Exec()

Post by AlexII »

2Max Rusov: так изначально и предполагалось — сначала дождаться, потом просить.
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Макрофункция Exec()

Post by AlexII »

SUSim wrote:Хотите я и вывод в клипбоард им помещать буду?
Не хочу. В буфер обмена и сейчас можно получить через «FarCmds». Хочу не портить содержимое буфера обмена, а сразу — в переменную.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Макрофункция Exec()

Post by John Doe »

SUSim wrote:в меню пользователя (F2) жму Ins в полях команды пишу
edit:<type !.! и получаю в редактор содержимое файла,
создаю другой пункт юзерменю команду задаю vc: "!/!.!" "!#!/!.!" запускается плагин VisualCompare Максима Русова со сравнением 2 файлов соседних панелей, такое и должна выполнять эта макрокоманда!
Из юзерменю ясно как работает.
Но разве нужен в этом конкретном случае exec()?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрофункция Exec()

Post by Skirda »

Max Rusov wrote:Нужно реализовать ProcessMacroFunc
поработаем в этом направлении (не здесь, в соответствующей теме)?
только она будет называться ProcessMacroW и иметь несколько иные параметры, нежели сейчас...

и таки да - Exec можно будет реализовать плагином (после появления ProcessMacroW)
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Макрофункция Exec()

Post by Max Rusov »

Skirda wrote:
Max Rusov wrote:Нужно реализовать ProcessMacroFunc
поработаем в этом направлении (не здесь, в соответствующей теме)?
Хотелось бы - у меня есть несколько мыслей.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Макрофункция Exec()

Post by John Doe »

Skirda wrote:и таки да - Exec можно будет реализовать плагином (после появления ProcessMacroW)
Но плагину не всё доступно. Невозможно реализовать запуск плагинов по префиксам. Метасимволы.

Нельзя назначить внутренние переменные (что-то типа stdout и stderr). Впрочем, наверно можно назначить %%stdout и %%stderr...
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрофункция Exec()

Post by Skirda »

John Doe wrote:Но плагину не всё доступно. Невозможно реализовать запуск плагинов по префиксам. Метасимволы.
А у нас как бы нет запрета на изменения в АПИ... так шта.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрофункция Exec()

Post by SUSim »

Запустить внешний процесс я могу и с помощью плагина(для этого я и писал его), а вот очень хотелось бы запускать всё то, что позволяет запускать юзер меню. И самое главное плагины по префиксам и команды обрабатываемые фаром.
Кстати макрос я под юзер меню написал - в первом сообщении он есть, его недостатки вроде бы очевидны, но повторюсь:
- громоздкость
- ограниченость областями Shell, Editor(немодальный), Viewer
- появление лишней команды в юзерменю
Использование плагина снижает ограничения на область но не позволяет выполнять команды фара и плагинов...

Я уяснил сложность вопроса: повторить в макрокоманде весь функционал пункта юзерменю не возможно... очень много на мой взгляд там завязано...
Всем кто декларирует префиксы озаботится поддерзкой callplugin (в макросах это тяжелее но фартиму тоже есть чем заняться).
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрофункция Exec()

Post by SUSim »

ОЧЕНЬ хочется выполнить внутреннюю команду фар из макроса!!! может это все таки возможно? - аналогично команде меню пользователя? или дать возможность плагинам [это имхо намного сложнее] выполнить тот же функционал - приложения и команды могут запускать в консоле фара, а вот префикс фар не могут заставить выполнить :(
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Макрофункция Exec()

Post by John Doe »

0002021 Макрофункция Exec (для запуска приложений и плагинов)

P.S.
Я попытался сформулировать тикет в том минимальном виде, что устроил бы всех, иначе не видать нам этой функции до пришествия.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Макрофункция Exec()

Post by John Doe »

NightRoman wrote:
Допустимы префиксы плагинов, но только если активны панели.
Почему такое ограничение "только если активны панели"?

Вызывающий вызывает, скажем, из редактора по префиксу. Что в этом не так? Если он вызывает при этом запуск панели, то он сам криворук. Есть масса более простых способов проявить криворукость, чем Exec с префиксом из редактора.

Но если плагин по этой команде предназначен делать что-то в редакторе, то все законно и полезно. И необязательно пилить UI для F1 | Plugin | MyCommmand (команда еще без параметров, то есть их придется еще несколько, скажем, напилить или с дополнительными диалогами для уточнения параметров).
...
Мне кажется что действия по префиксу не должны выполняться в редакторе, потому что это как-то... неправильно.
Ведь получается что для редактора у плагина будет совсем другой набор действий, который мы в настоящей командной строке даже не сможем выполнить (потому что не предусмотрена в редакторе командная строка).
Возможно вам это не кажется препятствием, но как по мне это нарушает метафору командной строки.

Поэтому в случае редактора мне видится более правильным использовать callplugin, или (когда-нибудь) ProcessMacroFuncW.

P.S.
Но если фар когда-нибудь приобретёт командную строку в редакторе, то эти мои аргументы станут неактуальными.
Post Reply

Return to “Обсуждение макросов”