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

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

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

Post by Majestio » Thu 25 Aug, 2016 08:13

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

Нужна ваша консультация. С 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: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Thu 25 Aug, 2016 08:21

Majestio, вот мой шаблон для вставки макроса.
Кажется у SimSU есть более навороченный.

Majestio
Posts: 8
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 1 time

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

Post by Majestio » Thu 25 Aug, 2016 08:28

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

Посему, мне важно знать - косячу я в своем шаблоне, и ли так прокатит.

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

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

Post by John Doe » Thu 25 Aug, 2016 08:34

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

P.S.
Сейчас для макросов доступно 2 АПИ, функционально несколько перекрывающие друг друга.
И при прочих равных условиях следует отдавать предпочтение апи плагинов (см. шапку темы luamacro)

Majestio
Posts: 8
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 1 time

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

Post by Majestio » Thu 25 Aug, 2016 08:42

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: 11074
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Thu 25 Aug, 2016 08:50

Code: Select all

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

Но уж точно падать ничего не должно, убедитесь именно Editor.Set(0) вызывает падение.

Majestio
Posts: 8
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 1 time

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

Post by Majestio » Thu 25 Aug, 2016 08:53

Понял. Пасип, запишу)

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Thu 25 Aug, 2016 09:12

John Doe wrote: Но я согласен, что опуская второй параметр ожидаешь что он будет принят как -1.
Ошибка или нет, вопрос к Shmuel.
Поскольку документация об этом умалчивает, то (формально) это не ошибка. То, что падает, естественно - баг.

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

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

Post by John Doe » Thu 25 Aug, 2016 09:16

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

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

Update
Но да, падает после этого при нажатии Tab, значит значение всё же некорректно

Majestio
Posts: 8
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 1 time

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

Post by Majestio » Thu 25 Aug, 2016 09:30

John Doe wrote:Сейчас для макросов доступно 2 АПИ, функционально несколько перекрывающие друг друга.
И при прочих равных условиях следует отдавать предпочтение апи плагинов (см. шапку темы luamacro)
Т.е. (в моем случае) предпочтительнее использовать local TabSize = Editor.Set(0,-1), я правильно понял?
Last edited by HaRT on Thu 25 Aug, 2016 12:26, edited 2 times in total.
Reason: [c]

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

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

Post by John Doe » Thu 25 Aug, 2016 09:33

Majestio wrote: я правильно понял?
Наоборот, предпочтительнее апи плагинов, т.е. editor.GetInfo().TabSize

Majestio
Posts: 8
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 1 time

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

Post by Majestio » Thu 25 Aug, 2016 09:34

John Doe wrote:Опущенный Value сейчас принимается за 0
Согласно докам по Lua, вроде nil, а не нуль?

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

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

Post by John Doe » Thu 25 Aug, 2016 09:38

Согласно докам по Lua, вроде nil, а не нуль?
Для макроапи (существовашего и до внедрения луа) нет понятия nil, поэтому и 0.
Хотя в доках нет, наверно стоит упомянуть в статье "Изменения API в сравнении с макроязыком"

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

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

Post by John Doe » Thu 25 Aug, 2016 09:39

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: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Thu 25 Aug, 2016 09:45

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

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

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

Post by John Doe » Thu 25 Aug, 2016 09:59

У меня ни в коем случае не претензии, а именно вопрос.
Рекомендация глянуть в код слишком сурова)
Но полагаю вы намекаете, что в данном случае поведение фара не соответствует заявленной в Энциклопедии?
Ага, я неверно истолковал формулировку..
iParam тут не выходной параметр.

Post Reply

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

Who is online

Users browsing this forum: No registered users and 3 guests