Экспериментально: ProcessFarCommandLine

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

Latest post of the previous page:

После обсуждения в http://forum.farmanager.com/viewtopic.php?f=3&t=10242 и с появлением http://bugs.farmanager.com/view.php?id=3223 может стоит вернуть ProcessFarCommandLine?
Теоретически, это решило бы проблему использования альтернативных оболочек - проанализировали comspec, выполнили необходимые преобразования и выполнили через win.system, нет - вернули строку Far-у и там уже включается стандартный механизм?
Разум когда-нибудь победит.
gene.pavlovsky
Posts: 173
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 13 times
Been thanked: 9 times
Contact:

Экспериментально: ProcessFarCommandLine

Post by gene.pavlovsky »

IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Экспериментально: ProcessFarCommandLine

Post by IgorZ »

Если кому-то нужен перехват командной строки, можно использовать обработчик событияConsoleInput. вот простенький пример, кому надо:
  1. -- +
  2.  
  3. -- Данный пример перехватывает командные строки, заканчивающиеся на "!!!", и выводит сообщение.
  4.  
  5. -- Для использования в своих нуждах скорректируйте строки, помеченные *поменять*
  6.  
  7. -- -
  8.  
  9. local F = far.Flags
  10.  
  11. Event{
  12.  
  13.   group="ConsoleInput"; description="Пример обработки командной строки";
  14.  
  15.   condition=
  16.  
  17. function(IR)
  18.  
  19. return Area.Shell and -- панели и
  20.  
  21.        not CmdLine.Empty and -- командная строка не пуста и
  22.  
  23.        IR.EventType==F.KEY_EVENT and IR.VirtualKeyCode==0x0d -- нажата Enter
  24.  
  25. end;
  26.  
  27.   action=
  28.  
  29. function()
  30.  
  31. if CmdLine.Value:match(".*!!!$") then -- командная строка удовлетворяет образцу? *поменять*
  32.  
  33.   far.Message(CmdLine.Value:sub(1,-4).."??? Вы взволнованы, успокойтесь...") -- сами что-то сделаем *поменять*
  34.  
  35.   return 1 -- Far ничего не делает
  36.  
  37. end
  38.  
  39. return 0 -- обычная обработка
  40.  
  41. end;
  42.  
  43. }
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Экспериментально: ProcessFarCommandLine

Post by Shmuel »

IgorZ, здОрово! Вроде до сих пор никто не озвучивал этого решения.
Добавлю, что данный подход позволяет также и модифицировать комстроку перед передачей её Фару.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

IgorZ wrote:Если кому-то нужен перехват командной строки, можно использовать обработчик события ConsoleInput. вот простенький пример, кому надо:
Ну так можно было и просто макросы на Enter и ShiftEnter повесить, для непустой строки.
Но ещё есть меню пользователя, ассоциации, история команд, Apply Command (CtrlG).
Разум когда-нибудь победит.
gene.pavlovsky
Posts: 173
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 13 times
Been thanked: 9 times
Contact:

Экспериментально: ProcessFarCommandLine

Post by gene.pavlovsky »

Такой метод отличается чем-нибудь от установки макроса на Enter, ShiftEnter?
Кстати, а почему ставлю какой-либо макрос на AltEnter, а он не выполняется?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Экспериментально: ProcessFarCommandLine

Post by HaRT »

gene.pavlovsky wrote:Кстати, а почему ставлю какой-либо макрос на AltEnter, а он не выполняется?
http://forum.farmanager.com/viewtopic.p ... 28#p116428
Фар есть инструмент, а не нянька. © 2009 DrKnS
gene.pavlovsky
Posts: 173
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 13 times
Been thanked: 9 times
Contact:

Экспериментально: ProcessFarCommandLine

Post by gene.pavlovsky »

IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Экспериментально: ProcessFarCommandLine

Post by IgorZ »

Smitis wrote:Ну так можно было и просто макросы на Enter и ShiftEnter повесить, для непустой строки.
Можно. Но обработчик событий кажется мне несколько более гибким в данной ситуации, а значит, данный подход обладает бОльшим потенциалом. Впрочем, на абсолютную правоту не претендую.
Smitis wrote:Но ещё есть меню пользователя, ассоциации, история команд, Apply Command (CtrlG).
Я просто предложил простенький пример, который можно взять за основу.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

Shmuel, а Вас нет желания вынести данный функционал в отдельный lua-плагин? Как я понимаю, есть какие-то неозвученные причины не делать этого в LuaMacro, но отдельный плагин, не входящий в стандартную поставку, на основе LuaMacro, никому бы не помешал.
Разум когда-нибудь победит.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Экспериментально: ProcessFarCommandLine

Post by Shmuel »

Зачем отдельный плагин, чем LuaMacro не годится?
Данная функциональность уже была реализована в первом приближении (билд 3885), но столкнувшись с явно выраженным недовольством двух коллег по Far Group, я её откатил, решив, что мне не больше всех надо.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

Возможно, недовольства не будет, если функция не будет входить в стандартный плагин.
Разум когда-нибудь победит.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Экспериментально: ProcessFarCommandLine

Post by Shmuel »

Smitis wrote: Возможно, недовольства не будет, если функция не будет входить в стандартный плагин.
Насчёт довольства/недовольства кого бы то ни было, меня это сейчас не интересует. Но никто никому не запрещает это сделать, это необязательно должен быть я.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

Shmuel wrote:Но никто никому не запрещает это сделать
Была такая мысль. Но не знаю как к этому подступиться. Допустим, обработку командной строки можно сделать через ProcessPanelEvent. Из истории, по логике, должно попадать туда же. А остальное? Например, команду из ассоциации? Apply command?
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Экспериментально: ProcessFarCommandLine

Post by John Doe »

Smitis wrote: Но не знаю как к этому подступиться.
Для того чтобы реализовать (и поддерживать) всё по-простому, как было, надо быть членом фартим.

Если альтернативно, отдельным плагином, то для этого необходимо специальное апи (имеющегося как вы заметили недостаточно).
Впрочем подозреваю даже разработав такое апи, мы столкнёмся с тем, что никто из фартим не заинтересован в его поддержке.

Имхо.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Экспериментально: ProcessFarCommandLine

Post by Smitis »

Перекомпилировал LuaMacro с поддержкой ProcessPanelEventW (в таблицу экспорта добавилась). Ставлю отдельным плагином. Но export.ProcessPanelEvent не вызывается, ни на какие события. Там есть какие-нибудь нюансы использования, кроме того, что бы просто описать эту функцию?
Разум когда-нибудь победит.
Post Reply

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