rebind — управление клавишами вызова макросов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

rebind — управление клавишами вызова макросов

Post by John Doe » Tue 01 Jul, 2014 10:36


Ниже предлагается простое централизованное решение, позволяющее отключить любой сторонний макрос, или переопределить его клавиатурную комбинацию.
Прототип обсуждался ранее, а теперь всё это можно делать интерактивно, с помощью одного из двух альтернативных макро браузеров:
  • viewtopic.php?f=60&t=7936 (подробности в шапке темы)
  • MacroBrowser подробности тут:
Все настройки (состояние запрета и переназначенные клавиши) сохраняются в базе, и загружаются при запуске фара.
Также поддерживается альтернативный способ хранения настроек, в файле %FARPROFILE%\Macros\scripts\bindings.

Всё что требуется для работы перечисленных функций — это подключить в _macroinit.lua модуль rebind: require"rebind".
На практике полезно дополнительно настроить модуль:

Об идентификаторах макросов:

Требования: Far 3.0 build >4743 (luamacro build 580)
Attachments
rebind-1.1.7z
(5.15 KiB) Downloaded 64 times

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

rebind — управление клавишами вызова макросов

Post by Shmuel » Mon 18 Jul, 2016 10:51

Latest post of the previous page:

zg wrote: какое преимущество даёт отказ от валидных гуидов?
Для непродвинутых авторов легче написать id="Вася", чем непонятно откуда брать валидный гуид. И при этом "Вася" будет более уникальным, чем опустить это поле. (Это так, мысли вслух).

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind — управление клавишами вызова макросов

Post by IgorZ » Mon 18 Jul, 2016 10:56

John Doe wrote:
IgorZ wrote: Как разработчик, я предпочёл бы обязательное указание guid. Очень облегчило бы жизнь.
Пользователи не оценят.
Да я понимаю. Но помечтать-то можно?
John Doe wrote:
IgorZ wrote: На мой взгляд, если уж делать, то с возможностью заменять значение любой статической переменной. После загрузки содержимого файла это вполне реально.
После загрузки уже поздно.
Да и использования debug-функций очень хочется избежать.
Да, не подумал. Впрочем, если извращаться, можно считать всё содержимое файла в переменную, в памяти поправить в тексте значение изменяемых локальных переменных и загрузить правленый текст. В общем-то даже почти не извращение получается.
John Doe wrote:
IgorZ wrote: сгенерировать uid по шаблону, наподобие того, как это делается сейчас из имени файла и описания
Это не есть хорошо.
Но в rebind мы можем продолжать это делать, во всяком случае пока uid/guid как стандартное поле не будет принят большинством авторов.
Тогда уж пока uid/guid не станет обязательным полем (то есть, очень долго, если не вечно). Ибо совместимость со старыми макросами.
John Doe wrote:
IgorZ wrote: дописать в исходный файл в определение макроса.
luamacro не трогает макрофайлы, и не вижу причин для чего бы ему начинать.
Но это можно делать прямо в луа менеджере.
А это предлагалось делать на уровне LuaMacro. Но пока я писал, Shmuel отказался от подобного в принципе. А LuaManager и так это делает при редактировании макроса.

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

rebind — управление клавишами вызова макросов

Post by John Doe » Mon 18 Jul, 2016 11:54

IgorZ wrote: Тогда уж пока uid/guid не станет обязательным полем (то есть, очень долго, если не вечно). Ибо совместимость со старыми макросами.
Ну нет. Старым макросам мы ничем не обязаны, их каждый может поправить самостоятельно (причём не гуиды, а сразу клавиши и всё остальное).
А речь в первую очередь про поддерживаемые макросы, для которых обновления постятся, и в которые самостоятельно гуиды проставлять бессмысленно, т.к. следующее обновление всё затрёт.

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind — управление клавишами вызова макросов

Post by IgorZ » Mon 18 Jul, 2016 12:27

John Doe wrote: Старым макросам мы ничем не обязаны, их каждый может поправить самостоятельно (причём не гуиды, а сразу клавиши и всё остальное).
А речь в первую очередь про поддерживаемые макросы, для которых обновления постятся, и в которые самостоятельно гуиды проставлять бессмысленно, т.к. следующее обновление всё затрёт.
Пардон, выразился неточно. "Старыми" я обозвал макросы без uid. Подозреваю, ещё очень долго многие скриптописатели будут игнорировать uid и писать новые макросы без него.
Last edited by Guest on Mon 18 Jul, 2016 12:32, edited 1 time in total.
Reason: Удалён оверквотинг

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

rebind — управление клавишами вызова макросов

Post by Shmuel » Mon 18 Jul, 2016 13:01

С макросами как-то понятно зачем нужен Id. А как насчёт Event, CommandLine - надо это?

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

rebind — управление клавишами вызова макросов

Post by John Doe » Mon 18 Jul, 2016 13:11

Применяться может как минимум для того, что включить/отключить
В Event имеет практический смысл изменять filemask
В CommandLine — префиксы

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

rebind — управление клавишами вызова макросов

Post by Shmuel » Mon 18 Jul, 2016 14:22

Сделал для Macro и Event. Дальше видно будет. Можно тестировать и критиковать.

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

rebind — управление клавишами вызова макросов

Post by John Doe » Mon 18 Jul, 2016 16:42

Code: Select all

LuaMacro: в таблицы определений Macro и Event добавлено опциональное поле "id" типа string.
Мысли вслух: теперь надо пойти проверить, не отвалилось ли чего в моих скриптах, ведь поле id во внутренней таблице существовало и раньше, только с другим содержанием (а теперь оно переименовано в index)..

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

rebind — управление клавишами вызова макросов

Post by John Doe » Mon 18 Jul, 2016 19:32

John Doe wrote: LuaMacro: в таблицы определений Macro и Event добавлено опциональное поле "id" типа string.
Выложил в шапку очень быстрый фикс, учитывающий последние изменения.
Макросы с uid тоже пока поддерживаются.

Smitis
Posts: 1471
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

rebind — управление клавишами вызова макросов

Post by Smitis » Mon 18 Jul, 2016 20:17

Как я понял, id это не guid (т.е. не обязательно guid)?
Разум когда-нибудь победит.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

rebind — управление клавишами вызова макросов

Post by Shmuel » Mon 18 Jul, 2016 20:36

Smitis wrote: Как я понял, id это не guid (т.е. не обязательно guid)?
Пока сделано так, если есть аргументы против, давайте обсуждать.

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind — управление клавишами вызова макросов

Post by IgorZ » Wed 20 Jul, 2016 05:47

John Doe wrote:
John Doe wrote: LuaMacro: в таблицы определений Macro и Event добавлено опциональное поле "id" типа string.
Выложил в шапку очень быстрый фикс, учитывающий последние изменения.
Макросы с uid тоже пока поддерживаются.
Подправил LuaManager. Версию rebind с поддержкой Event следует ждать в ближайшее время? Хотелось бы потестировать и эту часть перед выкладкой.

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

rebind — управление клавишами вызова макросов

Post by John Doe » Wed 20 Jul, 2016 21:08

IgorZ wrote: Версию rebind с поддержкой Event следует ждать в ближайшее время?
Я не тестировал (совсем), но если хотите, то давайте попробуем
  1. local nfo = {
  2.   name        = "module: rebind.lua";
  3.   description = "easy control of macro bindings etc";
  4.   version     = "1";
  5.   author      = "jd";
  6.   url         = "http://forum.farmanager.com/viewtopic.php?f=15&t=10376";
  7.   id          = "C0C38A84-1F6D-436D-96D6-7053AC7BEA4F";
  8.   minfarversion = {3,0,0,4743,0}; --requires Far 3.0 build >4743 (LuaMacro 580)
  9. }
  10.  
  11. local F = far.Flags
  12.  
  13. local Info = package.loaded.regscript
  14. if Info then
  15.   Info(nfo)
  16. elseif select(4,far.AdvControl(F.ACTL_GETFARMANAGERVERSION,true))<=nfo.minfarversion[4] then
  17.   error("requires FAR 3 build>"..nfo.minfarversion[4])
  18. end
  19.  
  20. local _NAME = nfo.name
  21. local _KEY = "REBIND" -- default key name in luamacro db
  22.  
  23. for i=1,math.huge do
  24.   local m = mf.GetMacroCopy(i)
  25.   if m then -- ensure that loaded before any macro
  26.     if m.FileName then error(_NAME.." should be loaded in '_macroinit.lua'",2) end
  27.   else
  28.     break
  29.   end
  30. end
  31.  
  32. local REBIND --loaded settings
  33.  
  34. local usedUids = {}
  35. local auto_uids,no_warnings
  36.  
  37. local function MakeUid(file,descr)
  38.   return ("≈%s: %s"):format(file:match"[^\\]+$",descr or 'nil') -- ±≠≡∞ƒ≈
  39. end
  40.  
  41. local editall
  42. local function editBadUid(id,file,pos)
  43.   local msg = ("%s:%s: id is not unique:\n%q"):format(file,pos,id)
  44.   local buttons = "Skip;&Skip all;&Edit;Edit &all"
  45.   local ans = editall or far.Message(msg,"Warning",buttons,"wl")
  46.   if ans==4 then editall = bor(F.EF_NONMODAL,F.EF_IMMEDIATERETURN) end
  47.   if editall or ans==3 then editor.Editor(file,nil,nil,nil,nil,nil,editall,pos) end
  48.   if ans==2 then no_warnings = true end
  49. end
  50.  
  51. local LoadedMacros --array, forward decl.
  52.  
  53. local new_fields = {"rebinded","defline","disabled","bindfrom"} --info to store
  54. local function AddMacroNew(m,filename)
  55.   if type(m)~="table" then return end
  56.   --if m.guid then return mf.AddMacro(m,filename) end --MCTL_ADDMACRO
  57.   local currentline = debug.getinfo(3,"l").currentline --todo check timings
  58.   --if currentline==-1 then le(debug.getinfo(3)) end --fixme
  59.   m.defline = currentline~=-1 and currentline
  60.   m.id = m.id or m.uid or auto_uids and MakeUid(filename,m.description)
  61.   if not m.id or type(m.id)~="string" then --luacheck: ignore 542
  62.     --just skip
  63.   elseif not usedUids[m.id:lower()] then          --check if id is unique
  64.     local Binding = REBIND[m.id:lower()] or {}
  65.     if Binding.key then m.rebinded,m.key = m.key,Binding.key end
  66.     m.disabled = Binding.disabled
  67.     m.bindfrom = Binding.bindfrom
  68.   else
  69.     if not no_warnings then editBadUid(m.id,filename,currentline) end
  70.     m.id = nil
  71.   end
  72.   local Macro = mf.AddMacro(m,filename)
  73.   if Macro and Macro.id and Macro.id~="<no id>" then
  74.     for _,field in ipairs(new_fields) do Macro[field] = Macro[field] or m[field] end
  75.     usedUids[Macro.id:lower()] = Macro.index
  76.   end
  77.   return Macro
  78. end
  79.  
  80. local function AddEventNew(m,filename)
  81.   if type(m)~="table" then return end
  82.   local currentline = debug.getinfo(3,"l").currentline
  83.   m.defline = currentline~=-1 and currentline
  84.   m.id = m.id or m.uid or auto_uids and MakeUid(filename,m.description)
  85.   if not m.id or type(m.id)~="string" then --luacheck: ignore 542
  86.     --just skip
  87.   elseif not usedUids[m.id:lower()] then          --check if id is unique
  88.     local Binding = REBIND[m.id:lower()] or {}
  89.     m.disabled = Binding.disabled
  90.     m.bindfrom = Binding.bindfrom
  91.   else
  92.     if not no_warnings then editBadUid(m.id,filename,currentline) end
  93.     m.id = nil
  94.   end
  95.   local Event = mf.AddEvent(m,filename)
  96.   if Event and Event.id and Event.id~="<no id>" then
  97.     Event.original_condition = Event.condition
  98.     local prio = Event.priority or 50
  99.     Event.condition = function(...)
  100.       if not Event.disabled then
  101.         return not Event.original_condition and prio or Event.original_condition(...)
  102.       end
  103.     end
  104.     for _,field in ipairs(new_fields) do Event[field] = Event[field] or m[field] end
  105.     usedUids[Event.id:lower()] = Event.index
  106.   end
  107.   return Event
  108. end
  109.  
  110. do --get LoadedMacros, set AddMacro
  111.   local function getUpvalue(f,name)
  112.     for i=1,1000 do
  113.       local k,v = debug.getupvalue (f,i)
  114.       if k==nil then
  115.         error("unable to get upvalue: "..name)
  116.       end
  117.       if k==name then return v,i end
  118.     end
  119.   end
  120.   LoadedMacros = getUpvalue(mf.GetMacroCopy,"LoadedMacros")
  121.   local LoadMacros = getUpvalue(eval,"utils").LoadMacros
  122.   local AddMacro,iAddMacro = getUpvalue(LoadMacros,"AddRegularMacro")
  123.   local AddEvent,iAddEvent = getUpvalue(LoadMacros,"AddEvent")
  124.   if not mf.AddMacro then mf.AddMacro,mf.AddEvent = AddMacro,AddEvent end --luacheck: new globals mf
  125.   debug.setupvalue (LoadMacros,iAddMacro,AddMacroNew)
  126.   debug.setupvalue (LoadMacros,iAddEvent,AddEventNew)
  127. end
  128.  
  129. ---------------------------------------
  130. -- public functions [common]
  131.  
  132. local function Setup(options)
  133.   assert(type(options)=="table")
  134.   auto_uids = options.auto_uids or auto_uids
  135.   no_warnings = options.no_warnings or no_warnings
  136. end
  137.  
  138. ---------------------------------------
  139. -- public functions [settings in files]
  140.  
  141. local function Rebind(m)
  142.   local id = m.id or m.uid or m.FileName and m.description and
  143.               MakeUid(m.FileName, m.description)
  144.   local err = type(m)~="table" and "arg must be table"
  145.               or not id and "macro id must be specified"
  146.   local info = debug.getinfo(2,"lS")
  147.   local bindfrom = {FileName=info.source:match"@?(.+)", defline=info.currentline} --names must match
  148.   if err then
  149.     err = ("%s\n%s:%s"):format(err,bindfrom.FileName,bindfrom.defline)
  150.     far.Message(err,_NAME,nil,"w")
  151.   else
  152.     REBIND[id:lower()] = { disabled=m.disabled, key=m.key, bindfrom=bindfrom }
  153.   end
  154. end
  155.  
  156. local mloadkey --fwd decl.
  157. local function LoadBindings(profile,db)
  158.   assert(not profile or type(profile)=="string")
  159.   if db then
  160.     REBIND = mloadkey(profile or _KEY) or {}
  161.     _KEY = profile
  162.   else
  163.     profile = profile or win.GetEnv"FARPROFILE" .. [[\Macros\scripts\bindings]]
  164.     local f,err = loadfile(profile)
  165.     if err then far.Message(err,_NAME,nil,"w"); return end
  166.     local success,res = pcall(setfenv(f, {Rebind=Rebind, NoRebind=function()end}))
  167.     if not success then far.Message(res,_NAME,nil,"w"); return end
  168.   end
  169.   --le(REBIND)
  170. end
  171.  
  172. --[[
  173. do
  174. REBIND = {}
  175. return {
  176.   Setup=Setup,
  177.   Rebind=Rebind,
  178.   LoadBindings=LoadBindings,
  179. }
  180. end
  181. --]]
  182.  
  183. -------------------------------------
  184. -- private functions [settings in db]
  185.  
  186. function mloadkey(key)
  187.   local obj = far.CreateSettings()
  188.   local tbl
  189.   local subkey = obj:OpenSubkey(0, key)
  190.   if subkey then
  191.     tbl = {}
  192.     local enum = obj:Enum(subkey)
  193.     for i = 1,enum.Count do
  194.       local name = enum[i].Name
  195.       local chunk = obj:Get(subkey, name, F.FST_DATA)
  196.       tbl[name:lower()] = assert(loadstring(chunk))()
  197.     end
  198.   end
  199.   obj:Free()
  200.   return tbl
  201. end
  202. REBIND = mloadkey(_KEY) or {}
  203.  
  204. local function GetMacroIdx(id)
  205.   assert(id,"macro id not specified")
  206.   local idx = usedUids[id:lower()]
  207.   return idx, not idx and "specified macro not found" or nil
  208. end
  209.  
  210. local function GetMacro(id)
  211.   local idx,err = GetMacroIdx(id)
  212.   return idx and LoadedMacros[idx], err
  213. end
  214.  
  215. local function SaveMacro(m,keys) --expects correct args
  216.   local Binding
  217.   --if keys is not specified then look for current key (if rebinded)
  218.   keys = keys or (keys==nil) and m.rebinded and m.key
  219.   if m.disabled or keys then
  220.     Binding = { key         = keys or nil, -- false == revert to original
  221.                 disabled    = m.disabled or nil,
  222.                 description = m.description,
  223.                 FileName    = m.FileName }
  224.     mf.msave(_KEY,m.id,Binding)
  225.   else
  226.     mf.mdelete(_KEY,m.id)
  227.   end
  228.   REBIND[m.id] = Binding
  229. end
  230.  
  231. ------------------------------------
  232. -- public functions [settings in db]
  233.  
  234. local function MacroRebind(id,keys)
  235.   assert(type(keys or nil)=="string","'key' must be string")
  236.   local m,err = GetMacro(id)               --macro with specified id must be loaded
  237.   if err                                   --id not found
  238.          or keys=="" and not m.rebinded    --nothing to do: empty keys
  239.          or keys==m.key then               --nothing to do: unchanged keys
  240.     return nil,err or "nothing to do"
  241.   elseif keys=="" or keys==m.rebinded then --if keys are empty or match to original
  242.     keys = false                           --THEN need to delete record from base
  243.   end                                      --(false == revert to original)
  244.   SaveMacro(m,keys)
  245.   return true --!! macros reload needed to apply rebind
  246. end
  247.  
  248. local function MacroDisable(id,disable)
  249.   local m,err = GetMacro(id)
  250.   if err then
  251.     return nil,err
  252.   elseif type(disable)=="boolean" then
  253.     m.disabled = disable        --set if true|false
  254.   else
  255.     m.disabled = not m.disabled --otherwise toggle
  256.   end
  257.   SaveMacro(m)
  258.   return m.disabled
  259. end
  260.  
  261. -----------------------------------
  262. -- extra functions [settings in db]
  263.  
  264. local function MessagePopup(msg,title,flags,delay) --private
  265.   local s = far.SaveScreen()
  266.   far.Message(msg,title or "","",flags)
  267.   win.Sleep(delay or 500); far.RestoreScreen(s)
  268. end
  269.  
  270. local function MacroRebind_Prompt(id)
  271.   local idx,err = GetMacroIdx(id)
  272.   if err then far.Message(id or "nil",err,nil,"w"); return end --todo
  273.   local m = mf.GetMacroCopy(idx)
  274.   local title = "Enter new key"..
  275.                 (m.rebinded and (" [orig.: %s]"):format(m.rebinded) or "")
  276.   local msg = ("Macro: %q"):format(m.description or "index="..m.index)
  277.   local flags = F.FIB_ENABLEEMPTY + F.FIB_BUTTONS
  278.   local keys = far.InputBox(nil,title,msg,id,m.key,nil,nil,flags)
  279.   if not keys then return end
  280.   local success,err = MacroRebind(id,keys) --luacheck: ignore 411/err
  281.   if err then mf.postmacro(MessagePopup,err) else return success end
  282. end
  283.  
  284. local function MacroDisable_Msg(id,disable)
  285.   local disabled,err = MacroDisable(id,disable)
  286.   if err then
  287.     far.Message(id or "nil",err,nil,"w")
  288.   else
  289.     mf.postmacro(MessagePopup,disabled and "disabled" or "enabled")
  290.   end
  291.   return not err and disabled,err
  292. end
  293.  
  294. return {
  295.   _NAME=_NAME,
  296.   _VERSION=nfo.version,
  297.   _URL=nfo.url,
  298.   getCurProfile = function() return _KEY end,
  299.  
  300.   Setup=Setup,
  301. --[settings in files]
  302.   Rebind=Rebind,
  303.   LoadBindings=LoadBindings,
  304. --[settings in db]
  305.   MacroRebind=MacroRebind,    --(id), return: (true) or (nil,err)
  306.   MacroDisable=MacroDisable,  --(id[,disable]), return (current status) or (nil,err)
  307. --sample helpers [settings in db]
  308.   MacroRebind_Prompt=MacroRebind_Prompt,
  309.   MacroDisable_Msg=MacroDisable_Msg,
  310. --  GetMacroIdx,
  311. }

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind — управление клавишами вызова макросов

Post by IgorZ » Thu 28 Jul, 2016 09:20

В силу вариативности будущего занялся тестированием только сейчас. Не знаю, насколько это ещё актуально, но вот предлагаемые исправления найденных ошибок:
  1. 55c55
  2. <   if Macro and Macro.id and m.id then
  3. ---
  4. >   if Macro and Macro.id then
  5. 66c66
  6. <   m.id = m.id or m.uid or auto_uids and MakeUid(filename,m.description)
  7. ---
  8. >   m.id = m.id or m.id or auto_uids and MakeUid(filename,m.description)
  9. 78c78
  10. <   if Event and Event.id and m.id then
  11. ---
  12. >   if Event and Event.id then
  13. 179c179
  14. <   local idx = usedUids[id:lower()]
  15. ---
  16. >   local idx = usedUids[id]
Исправляет ошибки с повторяющимися id/uid; с id/uid, заданном с использованием верхнего регистра; с Event, содержащим поле uid.

Кроме того, тестировал на стабильной версии 4700 (чистый профиль, только стандартные плагины, из скриптов только rebind и его вызов в _macroinit.lua) и наткнулся на такое поведение: при выборе "Cancel" сообщение из error не выводится на экран (вставляемый перед ним для проверки far.Show отрабатывает нормально), в package.loaded.rebind содержится userdata.

К тому же (в любой версии) вставляемый в Event condition при редактировании всплывает вместо заданного, что вообще никуда не годится. Вдобавок, в стабильной версии это мешает корректно найти определение Event.

Пока всё.

Ах, да. Идея на "подумать". Если в определении Macro/Event есть неизвестные поля, скидывать их в виде таблицы в поле с именем "additional" или "nonstandard" или ещё как-то в этом духе.

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

rebind — управление клавишами вызова макросов

Post by John Doe » Thu 28 Jul, 2016 09:40

Спасибо за вашу работу!
IgorZ wrote: Исправляет ошибки с повторяющимися id/uid; с id/uid, заданном с использованием верхнего регистра;
Исправил в тот же день, думал никто не успеет заметить)
IgorZ wrote: if Macro and Macro.id then
Тут должно быть if Macro and Macro.id and Macro.id~="<no id>" then
IgorZ wrote: при выборе "Cancel" сообщение из error не выводится на экран
Странно..
В "стабильной" я не проверял, т.к. смысла вообще нет, но если в актуальной версии повысить требуемый билд, то у меня ошибка нормально выводится
IgorZ wrote: К тому же (в любой версии) вставляемый в Event condition при редактировании всплывает вместо заданного, что вообще никуда не годится.
Увы, я не знаю другого способа динамически отключить событие.
Вариантов вижу два:
- запретить делать это динамически.
- написать на мантис пожелание чтобы поле disabled обрабатывалось luamacro и в обработчиках событий
(или иначе: обрабатывать priority=0 как запрет выполнения)

P.S.
diff лучше с ключом -u

IgorZ
Posts: 461
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

rebind — управление клавишами вызова макросов

Post by IgorZ » Thu 28 Jul, 2016 12:41

John Doe wrote:Спасибо за вашу работу!
Общее дело делаем! ;)
John Doe wrote: В "стабильной" я не проверял, т.к. смысла вообще нет, но если в актуальной версии повысить требуемый билд, то у меня ошибка нормально выводится
Сейчас проверил на версии 4743 - так же распаковал дистрибутив, указал UseSystemProfiles=0, в пустой профиль положил на нужные места rebind.lua с правленной требуемой версией и _macroinit.lua, вызывающий rebind. Тоже не выводится. Буду чесать затылок.
John Doe wrote: Вариантов вижу два:
- запретить делать это динамически.
- написать на мантис пожелание чтобы поле disabled обрабатывалось luamacro и в обработчиках событий
(или иначе: обрабатывать priority=0 как запрет выполнения)
В качестве костыля: ввести поле OriginalCondition и хранить там ссылку на него, чтоб можно было пользоваться.

P. S. Хотя
John Doe wrote:чтобы поле disabled обрабатывалось luamacro и в обработчиках событий
наиболее правильно, на мой взгляд.
John Doe wrote:diff лучше с ключом -u
Спасибо, я раньше не использовал diff.
Last edited by IgorZ on Thu 28 Jul, 2016 12:41, edited 1 time in total.
Reason: Спрятан оверквотинг

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

rebind — управление клавишами вызова макросов

Post by John Doe » Thu 28 Jul, 2016 15:09

IgorZ wrote: В качестве костыля:
Да, действительно, исправил.
Будет добавляться поле original_condition

P.S.
Подумываю сделать 2 отдельных действия: 1. Отключить макро/евент временно (до перегрузки) 2. Отключить постоянно (с записью в базу)

Post Reply

Return to “Обсуждение макросов”