Page 9 of 11

Re: Ликбез по Луа

Posted: Mon 11 Mar, 2013 20:22
by Docent1

Latest post of the previous page:

Shmuel
Shmuel wrote:
Docent1 wrote:Спасибо, Shmuel, наверняка lua хорош, но из головы уже вылезают всякие "языки и макросы" в виде шишек!
Если не ошибаюсь, это был твой первый пост по Lua-макросам? Что же ты хочешь: пришёл, увидел, победил? Так бывает редко. Язык Lua - очень простой на самом деле, так что иронии я не понял. Но если нужна будет помощь - всегда с удовольствием.
Переписал твой фай в "F:\Program Files (x86)\Far3\Profile\Macros\internal\Editor_AltR.lua"
Заменил

Code: Select all

Macro {
  description="colorer on off";
  area="Editor";
  key="AltR";
  flags="DisableOutput";
  action=Keys("F11") if  Menu.Select("FarColorer", 0) > 0 then  Keys("Enter C Space Enter") else Keys("Esc") Keys("AKey") end;
}
Выдает ошибку:
F:\Program Files (x86)\Far3\Profile\Macros\internal\Editor_AltR.lua:103: '}' expected
(to close '{' at line 98) near 'if'
Может, есть какие соображения?
Придется все-таки изучать LUA.

Re: Ликбез по Луа

Posted: Mon 11 Mar, 2013 20:29
by John Doe
При чём тут вообще Lua
Посмотрите примеры макросов в Addons хотя бы
action=function() end;

Re: Ликбез по Луа

Posted: Mon 11 Mar, 2013 20:40
by Docent1
John Doe wrote:При чём тут вообще Lua
Посмотрите примеры макросов в Addons хотя бы
action=function() end;
Я перепробовал все варианты, в том числе и этот. В этом случае выдается ошибка, что это глобальный маккрос или типо того.

Re: Ликбез по Луа

Posted: Mon 11 Mar, 2013 20:44
by Docent1

Code: Select all

Macro {
  description="colorer on off";
  area="Editor";
  key="AltR";
  flags="DisableOutput";
  action=function()
  Keys("F11")
  if  Menu.Select("FarColorer", 0) > 0 then
  Keys("Enter C Space Enter")
  else
  Keys("Esc") Keys("AKey")
  end;
  end;
}
Ошибка:
...s (x86)\Far3\Profile\Macros\internal\Editor_AltR.lua:98: attempt to call global
'Macro' (a nil value)

Re: Ликбез по Луа

Posted: Mon 11 Mar, 2013 20:47
by John Doe
В internal нечего делать макросам (поиск по changelog поможет)
Отсюда и ошибка.

P.S.
Я проверил, ваш макрос (в последней его редакции) прекрасно работает.
Поместить надо в любой сабфолдер внутри Macros\scripts

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Mon 11 Mar, 2013 20:56
by John Doe
Некоторые ньюансы.
DisableOutput уже не существует
А плагины лучше вызывать посредством Plugin.Menu и прочих функций того же семейства.

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Mon 11 Mar, 2013 21:06
by Docent1
John Doe
Так бы и сказали, что нужно помещать их в scripts.
Shmuel
Спасибо за Lua! Да, это первая попыка "переползти" с Far2 на Far3 и я вижу уже что Lua дает многое!

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Mon 18 Mar, 2013 12:41
by John Doe
Конвертер не любит символ CR.

Code: Select all

  local Macro1='%Comment="test1";\r\n%Comment="test1";\r\n'
  local Macro2='%Comment="test1";\n%Comment="test1";\n'

  local guid = "50b1abe5-91ba-478c-be2d-64366a81d47c"
  far.Show(Plugin.Call(guid, "chunk", Macro1),Plugin.Call(guid, "chunk", Macro2))
Результат:

Code: Select all

╔═══════════════════════╗
║  1│ Comment="test1";♪ ║
║   │ Comment="test1";♪ ║
║   │                   ║
║  2│ -- test1          ║
║   │ -- test1          ║

Помогите изменить макрос под новое API Far3

Posted: Mon 01 Apr, 2013 06:08
by kondrik
Макрос вызывается из под пользовательского меню и используется для создание папки по текущей дате:

Code: Select all

macro: post %%folder="F:\\DOWNLOADS\\"+date("%Y_%m0_%d");
macro: post $If(0==fexist(%%folder)) m d Space print(%%folder) Enter $End
macro: post $If(1) c d Space print(%%folder) Enter $End

Re: Помогите изменить макрос под новое API Far3

Posted: Mon 01 Apr, 2013 06:33
by 2useven10

Code: Select all

macro: post Far.DisableHistory(1); local f=mf.date("F:\\DOWNLOADS\\%Y_%m0_%d"); if not mf.fexist(f) then print("md "..f); Keys('Enter') end print("cd "..f); Keys('Enter')

Re: Помогите изменить макрос под новое API Far3

Posted: Mon 01 Apr, 2013 06:38
by Smitis
Макросом на клавишах (можно развернуть в одну строку или вызывать из меню через eval)
  1. Macro {
  2.  
  3.     description="Create folder YYYY-MM-DD";
  4.  
  5.     area="Shell Search";
  6.  
  7.     key="AltShiftF7";
  8.  
  9.     flags="NoPluginPanels";
  10.  
  11.     action=function()
  12.  
  13.         local f = mf.date("%Y-%m0-%d")
  14.  
  15.         if Panel.FExist(0,f) == 0 then
  16.  
  17.             Keys("F7 CtrlY")
  18.  
  19.             print(f)
  20.  
  21.             Keys("Enter")
  22.  
  23.         else
  24.  
  25.             Panel.SetPos(0,f)
  26.  
  27.         end
  28.  
  29.     end;
  30.  
  31. }

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Tue 07 May, 2013 11:19
by Vix
А аналог MacroView так и не появился? Чтобы через меню делать макросы, а не лезть редактором в lua, где ещё и разобраться надо...

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Tue 07 May, 2013 11:22
by John Doe

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Tue 07 May, 2013 13:52
by Vix
Посмотрел. Там надо писать в действиях function() Keys('F10') end, а хотелось бы просто F10. Есть такой плагин?

Re: Перенос макросов из прошлых версий фара в LuaMacro

Posted: Tue 07 May, 2013 13:54
by John Doe
Вообще-то это встроено в фар. Ctrl-<точка>

P.S.
Keys там тоже будет, однако да.
Хотите без Keys - старые версии фара ещё доступны.

Аналог panel.setpos

Posted: Thu 11 Jul, 2013 16:52
by ksandr1v
Есть макрос в Far2

Code: Select all

!w [Найти текущий элемент на пассивной панели]
%fname = Panel.Item(0,0,0);
panel.setpos(1, %fname)
Пытаюсь переписать на lua. В энкциклопедии (luafar_manual.chm) не нашел аналога функции panel.setpos.

Как можно переписать этот макрос в Far3?

Вот что пока получилось:

Code: Select all

Macro {
   area="Shell"; key="w"; flags="EmptyCommandLine|DisableOutput";
   action=function()
      item = panel.GetCurrentPanelItem (nil, 1)
      fname = item["FileName"]
      panel.SetPos(1, fname)  -- Exception !!
   end;
}