Шаблон макроса

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

Здравствуйте!

Нужна ваша консультация. С Lua познакомился пару дней назад, еще плаваю. Написал простенький макрос - вроде работает. Однако, нашел странный баг/фича, не знаю ... короче

Code: Select all

local TabSize = Editor.Set(0)
... мне только один раз вернул нормальное значение размера табуляции из настроек, остальные попытки - получаю нуль. Потом Фар вообще свалился по ошибке (деление на нуль где-то в его недрах). Вот я и подумал, а "законно" ли а оформил свой макрос. Посмотрите пожалуйста шаблон, который я сконструировал. Можно ли так:

Code: Select all

--[[
    Testo for Far Manager
    Version: 1.0
    Copyright (C) 2016 Majestio
--]]

local Majestio = {}

Macro {
  area = "Editor"; 
  key = "CtrlAltT"; 
  description = "Testo Macros"; 
  action = function() Majestio.Testo() end;
}

Majestio.Testo = function ()
  if Editor.Sel(0,4) == 1 then
    local BlockLineUp = Editor.Sel(0,0)
    local BlockLineDn = Editor.Sel(0,2)
    local BlockPosOne = Editor.Sel(0,1)
    local BlockPosTwo = Editor.Sel(0,3)
    local CursorLine  = Editor.Pos(0,1)
    local CursorPos   = Editor.Pos(0,2)
    --local TabSize = Editor.Set(0)
    local TabSize = editor.GetInfo().TabSize
    msgbox('Info',
     ' Cursor: '..CursorPos..':'..CursorLine..'\n'..
     ' BlockUp: '..BlockPosOne..':'..BlockLineUp..'\n'..
     ' BlockDn: '..BlockPosTwo..':'..BlockLineDn..'\n'..
     ' TabSize: '..TabSize,
     0x20008
    )
  end
end
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Шаблон макроса

Post by Shmuel »

Majestio, вот мой шаблон для вставки макроса.
Кажется у SimSU есть более навороченный.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

Не не не ... я не соревнуюсь в навороченности) Мне важно/хочется чтобы "интерфейснаая" часть Macro {} была в начале. Поэтому и извратился с локальной таблицей local Majestio = {} ... но в Lua у меня не то, что первые шаги, а, скорее, заглядывание в приоткрытую дверь)))

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

Шаблон макроса

Post by John Doe »

Majestio wrote: Можно ли так:
Конечно
Majestio wrote: остальные попытки - получаю нуль. Потом Фар вообще свалился по ошибке (деление на нуль где-то в его недрах).
См. Поведение при обнаружении ошибок

P.S.
Сейчас для макросов доступно 2 АПИ, функционально несколько перекрывающие друг друга.
И при прочих равных условиях следует отдавать предпочтение апи плагинов (см. шапку темы luamacro)
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

John Doe wrote:И при прочих равных условиях следует отдавать предпочтение апи плагинов (см. шапку темы luamacro)
Хм... Странно, заменил local TabSize = Editor.Set(0) на local TabSize = editor.GetInfo().TabSize — все работает без сбоев :wacko:

Если не лениво, гляньте код - мож мои косяки, поэтому и глюкает.
Набросок - чистит табы в строковом блоке, вернее заменяет их нужным числом пробелов
Last edited by Majestio on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: [c], поименован [spoiler]
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Шаблон макроса

Post by John Doe »

Code: Select all

local TabSize = Editor.Set(0,-1)
Вот так работает. И именно это описано в Энциклопедии
Но я согласен, что опуская второй параметр ожидаешь что он будет принят как -1.
Ошибка или нет, вопрос к Shmuel.

Но уж точно падать ничего не должно, убедитесь именно Editor.Set(0) вызывает падение.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

Понял. Пасип, запишу)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Шаблон макроса

Post by Shmuel »

John Doe wrote: Но я согласен, что опуская второй параметр ожидаешь что он будет принят как -1.
Ошибка или нет, вопрос к Shmuel.
Поскольку документация об этом умалчивает, то (формально) это не ошибка. То, что падает, естественно - баг.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Шаблон макроса

Post by John Doe »

Опущенный Value сейчас принимается за 0. Но корректное ли это значение для табуляции?
Сказано "Возвращает предыдущее значение опций или -1, если данные указаны некорректно"

Просто мысли вслух.
Очевидно что это значение фар считает корректным, раз позволяет установить.

Update
Но да, падает после этого при нажатии Tab, значит значение всё же некорректно
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

John Doe wrote:Сейчас для макросов доступно 2 АПИ, функционально несколько перекрывающие друг друга.
И при прочих равных условиях следует отдавать предпочтение апи плагинов (см. шапку темы luamacro)
Т.е. (в моем случае) предпочтительнее использовать local TabSize = Editor.Set(0,-1), я правильно понял?
Last edited by Majestio on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: [c]
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Шаблон макроса

Post by John Doe »

Majestio wrote: я правильно понял?
Наоборот, предпочтительнее апи плагинов, т.е. editor.GetInfo().TabSize
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Шаблон макроса

Post by Majestio »

John Doe wrote:Опущенный Value сейчас принимается за 0
Согласно докам по Lua, вроде nil, а не нуль?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Шаблон макроса

Post by John Doe »

Согласно докам по Lua, вроде nil, а не нуль?
Для макроапи (существовашего и до внедрения луа) нет понятия nil, поэтому и 0.
Хотя в доках нет, наверно стоит упомянуть в статье "Изменения API в сравнении с макроязыком"
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Шаблон макроса

Post by John Doe »

John Doe wrote: Опущенный Value сейчас принимается за 0. Но корректное ли это значение для табуляции?
Сказано "Возвращает предыдущее значение опций или -1, если данные указаны некорректно"
Для сравнения

Code: Select all

editor.SetParam(nil,"ESPT_TABSIZE",0)
В результате значение выставляется в 8 (всё верно, т.к. сказано "Значение размера табуляции, выходящее за указанные границы, выставляется равным 8.")

Но тут ещё возникает вопрос к luafar: в Энциклопедии сказано "iParam содержит новое значение - от 1 до 512.", но editor.SetParam возвращает только true.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Шаблон макроса

Post by Shmuel »

John Doe wrote: Но тут ещё возникает вопрос к luafar: в Энциклопедии сказано "iParam содержит новое значение - от 1 до 512.", но editor.SetParam возвращает только true.
И кто мешает глянуть в код LuaFAR, прежде, чем предъявлять к нему претензии?
Post Reply

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