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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by John Doe »

Latest post of the previous page:

В дистрибутиве фара забыли посмотреть?
xarx
Posts: 125
Joined: Tue 23 Nov, 2010 12:06

Re: Spring — внедрение Lua в качестве макроязыка

Post by xarx »

Спасибо, уже нашел. Этого я искал!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Сколько таких, кто уже пересел на Far 3 с Far 2

Post by John Doe »

Shmuel wrote:В "плане миграции" упомянуто, что конвертер макросов часто обламывается[...]
Для тех макросов, конвертация которых обламывается, я использую такой хелпер:

Code: Select all

Macro {
  area="Editor"; 
  key="CtrlEnter"; 
  description="*.macro convert"; 
  filemask="*.macro";
action=function()
  if not Object.Selected then Keys("CtrlA") end
  local Macro=Editor.SelValue:gsub("\r","")
                             :gsub(";;([^\n]+)",function(s)
                                return ("%%Comment=%q;"):format(s:gsub('"','"')):gsub("\r","")
                              end)  
  local guid = "50b1abe5-91ba-478c-be2d-64366a81d47c"
  local str_out, str_message = Plugin.Call(guid, "chunk", Macro)
  if str_out then 
    if msgbox("[[ "..str_message.." ]]", str_out, 0x00000008)==1 then mf.clip(1,str_out:gsub('"','"')) end
  else
    msgbox("Error",Macro,0x1+0x8) 
  end
end;
}

Мои макросы со времён двойки храняться в файлах (не макролиб), а комментарии через двойную точку с запятой, и потому конвертером не воспринимались.
Хелпер настроен на срабатывание в файлах *.macro
Запуск - CtrlEnter.
Обрабатывается выделенный блок, если нет - то выделяется весь файл.
В случае успеха результат выводится в msgbox, и доступен в буфере обмена.
В случае неуспеха - можно найти блок, на котором спотыкается.

У автора макролиба есть сходный хелпер: http://forum.farmanager.com/viewtopic.p ... 406#p99406

P.S.
Перед конвертацией необходимо ознакомиться не только с macroapi_manual.chm, но и (обязательно!) с readme.txt конвертера.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Сколько таких, кто уже пересел на Far 3 с Far 2

Post by Wave »

Спасибо, воспользуюсь чуть позже. Если мне не изменяет мой склероз, $Text выпилили ещё из двойки, до 1807. Но в целом а) понятно, учту, б) в любом случае нужно изучать новый макроязык и его обвязку детально. А так вломммм.
А, и да, самые используемые и самые простые макросы наподобии BS = CtrlPgUp перетащил и уровень комфорта благодаря этому скакнул на порядок.
Пользуюсь ФАРом больше 20 лет © собирательный.
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 »

Перевел все макросы с помощью macro2lua v.07 из Far2
Далее нажал Ctrl. и записа макрос. Получил
area="Editor" key="AltR" flags="" description="" code="Keys("x")
Вставил вместо code то, что перевелось и что хотелось;
code="Keys("F11") if Menu.Select("FarColorer", 0) > 0 then Keys("Enter C Space Enter") else Keys("Esc") Keys("AKey") end"
При старте Фара 3.0.3235.0 получаю ошибку в макросе
"C:\Program Files (x86)\Far3\Profile\Macros\internal\Editor_AltR.lua:5: '=' expected near 'C'"

Буду признателен, чзн?
Docent1
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Docent1 wrote:

Code: Select all

code="Keys("F11") if  Menu.Select("FarColorer", 0) > 0 then  Keys("Enter C Space Enter") else Keys("Esc") Keys("AKey") end"
В первую очередь настоятельно рекомендую не пользоваться таким способом создания макросов, то-есть редактированием клавиатурных макросов. Лучше поставьте этот макрос и пользуйтесь им.

А код ваш не компилируется потому, что внутри закавыченного стринга есть незаэкранированные кавычки. Замените внешние кавычки " на одинарные ', должно помочь.
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 »

Спасибо, Shmuel, наверняка lua хорош, но из головы уже вылезают всякие "языки и макросы" в виде шишек!
Docent1
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Docent1 wrote:Спасибо, Shmuel, наверняка lua хорош, но из головы уже вылезают всякие "языки и макросы" в виде шишек!
Если не ошибаюсь, это был твой первый пост по Lua-макросам? Что же ты хочешь: пришёл, увидел, победил? Так бывает редко. Язык Lua - очень простой на самом деле, так что иронии я не понял. Но если нужна будет помощь - всегда с удовольствием.
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 »

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.
Last edited by Docent1 on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: [code]
Docent1
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

При чём тут вообще Lua
Посмотрите примеры макросов в Addons хотя бы
action=function() end;
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 »

John Doe wrote:При чём тут вообще Lua
Посмотрите примеры макросов в Addons хотя бы
action=function() end;
Я перепробовал все варианты, в том числе и этот. В этом случае выдается ошибка, что это глобальный маккрос или типо того.
Docent1
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post 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)
Last edited by Docent1 on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: [code]
Docent1
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

В internal нечего делать макросам (поиск по changelog поможет)
Отсюда и ошибка.

P.S.
Я проверил, ваш макрос (в последней его редакции) прекрасно работает.
Поместить надо в любой сабфолдер внутри Macros\scripts
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Некоторые ньюансы.
DisableOutput уже не существует
А плагины лучше вызывать посредством Plugin.Menu и прочих функций того же семейства.
Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 »

John Doe
Так бы и сказали, что нужно помещать их в scripts.
Shmuel
Спасибо за Lua! Да, это первая попыка "переползти" с Far2 на Far3 и я вижу уже что Lua дает многое!
Docent1
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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          ║
Post Reply

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