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

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

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

Post by John Doe » Fri 15 Feb, 2013 13:46

Latest post of the previous page:

В дистрибутиве фара забыли посмотреть?

xarx
Posts: 123
Joined: Tue 23 Nov, 2010 12:06

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

Post by xarx » Fri 15 Feb, 2013 15:26

Спасибо, уже нашел. Этого я искал!

User avatar
John Doe
Бюрократ
Posts: 11123
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 71 times

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

Post by John Doe » Wed 06 Mar, 2013 15:22

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, и доступен в буфере обмена.
В случае неуспеха - можно найти блок, на котором спотыкается.

У автора макролиба есть сходный хелпер: viewtopic.php?p=99406#p99406

P.S.
Перед конвертацией необходимо ознакомиться не только с macroapi_manual.chm, но и (обязательно!) с readme.txt конвертера.

User avatar
Wave
Posts: 1716
Joined: Thu 04 Aug, 2005 18:47
Location: Харьков, Украина
Has thanked: 2 times
Been thanked: 9 times
Contact:

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

Post by Wave » Wed 06 Mar, 2013 15:36

Спасибо, воспользуюсь чуть позже. Если мне не изменяет мой склероз, $Text выпилили ещё из двойки, до 1807. Но в целом а) понятно, учту, б) в любом случае нужно изучать новый макроязык и его обвязку детально. А так вломммм.
А, и да, самые используемые и самые простые макросы наподобии BS = CtrlPgUp перетащил и уровень комфорта благодаря этому скакнул на порядок.
Пользуюсь ФАРом больше 15 лет © собирательный.

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 » Mon 11 Mar, 2013 18:23

Перевел все макросы с помощью 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: 5154
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 14 times
Been thanked: 144 times

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

Post by Shmuel » Mon 11 Mar, 2013 18:32

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 » Mon 11 Mar, 2013 19:38

Спасибо, Shmuel, наверняка lua хорош, но из головы уже вылезают всякие "языки и макросы" в виде шишек!
Docent1

Shmuel
Posts: 5154
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 14 times
Been thanked: 144 times

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

Post by Shmuel » Mon 11 Mar, 2013 19:51

Docent1 wrote:Спасибо, Shmuel, наверняка lua хорош, но из головы уже вылезают всякие "языки и макросы" в виде шишек!
Если не ошибаюсь, это был твой первый пост по Lua-макросам? Что же ты хочешь: пришёл, увидел, победил? Так бывает редко. Язык Lua - очень простой на самом деле, так что иронии я не понял. Но если нужна будет помощь - всегда с удовольствием.

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 » Mon 11 Mar, 2013 20:22

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: 11123
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 71 times

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

Post by John Doe » Mon 11 Mar, 2013 20:29

При чём тут вообще Lua
Посмотрите примеры макросов в Addons хотя бы
action=function() end;

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 » Mon 11 Mar, 2013 20:40

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 » Mon 11 Mar, 2013 20:44

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: 11123
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 71 times

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

Post by John Doe » Mon 11 Mar, 2013 20:47

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

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

User avatar
John Doe
Бюрократ
Posts: 11123
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 71 times

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

Post by John Doe » Mon 11 Mar, 2013 20:56

Некоторые ньюансы.
DisableOutput уже не существует
А плагины лучше вызывать посредством Plugin.Menu и прочих функций того же семейства.

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

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

Post by Docent1 » Mon 11 Mar, 2013 21:06

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

User avatar
John Doe
Бюрократ
Posts: 11123
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 71 times

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

Post by John Doe » Mon 18 Mar, 2013 12:41

Конвертер не любит символ 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          ║

kondrik
Posts: 128
Joined: Tue 29 Mar, 2005 13:30
Location: Ukraine, Kyiv

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

Post by kondrik » Mon 01 Apr, 2013 06:08

Макрос вызывается из под пользовательского меню и используется для создание папки по текущей дате:

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

Post Reply

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