Skip to content

Commit

Permalink
1. Far.DisableHistory(-1) не запрещал добавления в историю при послед…
Browse files Browse the repository at this point in the history
…ующих вызовах Panel.SetPath().

2. Рефакторинг.
  • Loading branch information
shmuz committed Dec 30, 2014
1 parent 9ba7bd4 commit 58a5c21
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 107 deletions.
2 changes: 1 addition & 1 deletion plugins/luamacro/_globalinfo.lua
@@ -1,6 +1,6 @@
function export.GetGlobalInfo()
return {
Version = { 1, 0, 0, 462 },
Version = { 1, 0, 0, 463 },
MinFarVersion = { 3, 0, 0, 4214 },
Guid = win.Uuid("4EBBEFC8-2084-4B7F-94C0-692CE136894D"),
Title = "LuaMacro",
Expand Down
8 changes: 7 additions & 1 deletion plugins/luamacro/changelog
@@ -1,4 +1,10 @@
shmuel 26.12.2014 19:26:13 +0200 - build 462
shmuel 31.12.2014 00:11:10 +0200 - build 463

1. Far.DisableHistory(-1) не запрещал добавления в историю при последующих вызовах Panel.SetPath().

2. Рефакторинг.

shmuel 26.12.2014 19:26:13 +0200 - build 462

1. Рефакторинг: прекращено использование фаровских регулярных выражений для внутренних нужд плагина.

Expand Down
170 changes: 82 additions & 88 deletions plugins/luamacro/keymacro.lua
@@ -1,28 +1,32 @@
-- coding: utf-8

--------------------------------------------------------------------------------
local Shared = ...
local Msg, MacroInit, MacroStep, ErrMsg, pack, loadmacro =
Shared.Msg, Shared.MacroInit, Shared.MacroStep, Shared.ErrMsg, Shared.pack, Shared.loadmacro
local Msg, ErrMsg = Shared.Msg, Shared.ErrMsg
local MacroInit, MacroStep = Shared.MacroInit, Shared.MacroStep
local pack, loadmacro, utils = Shared.pack, Shared.loadmacro, Shared.utils
Shared = nil

local F = far.Flags

-- enum MACROPLUGINRETURNTYPE
local MPRT_NORMALFINISH, MPRT_ERRORFINISH, MPRT_HASNOMACRO =
F.MPRT_NORMALFINISH, F.MPRT_ERRORFINISH, F.MPRT_HASNOMACRO
F.MPRT_NORMALFINISH, F.MPRT_ERRORFINISH, F.MPRT_HASNOMACRO

-- enum FARMACROSTATE
local MACROSTATE_NOMACRO, MACROSTATE_EXECUTING, MACROSTATE_EXECUTING_COMMON =
F.MACROSTATE_NOMACRO, F.MACROSTATE_EXECUTING, F.MACROSTATE_EXECUTING_COMMON

-- unsigned __int64 MACROFLAGS_MFLAGS
local MFLAGS_ENABLEOUTPUT, MFLAGS_NOSENDKEYSTOPLUGINS, MFLAGS_POSTFROMPLUGIN =
0x1, 0x2, 0x10000000

local type, setmetatable = type, setmetatable
local bit = bit or bit64
local band, bor, bxor, lshift = bit.band, bit.bor, bit.bxor, bit.lshift
local math_floor = math.floor
local far_FarMacroCallToLua, far_MacroCallFar, far_Text = far.FarMacroCallToLua, far.MacroCallFar, far.Text
far.FarMacroCallToLua = nil

local MACROSTATE_NOMACRO = F.MACROSTATE_NOMACRO
local MACROSTATE_EXECUTING = F.MACROSTATE_EXECUTING
local MACROSTATE_EXECUTING_COMMON = F.MACROSTATE_EXECUTING_COMMON
local far_MacroCallFar = far.MacroCallFar

local MFLAGS_ENABLEOUTPUT = 0x00000001 -- не подавлять обновление экрана во время выполнения макроса
local MFLAGS_NOSENDKEYSTOPLUGINS = 0x00000002 -- не передавать плагинам клавиши во время записи/воспроизведения макроса
local MFLAGS_POSTFROMPLUGIN = 0x10000000 -- последовательность пришла от АПИ
local far_FarMacroCallToLua = far.FarMacroCallToLua
far.FarMacroCallToLua = nil
--------------------------------------------------------------------------------

local MCODE_F_KEYMACRO = 0x80C68
Expand All @@ -41,27 +45,26 @@ local Import = {

local NewMacroRecord do
local MacroRecord = {
m_lang="lua", -- Язык макропоследовательности
m_flags=0, -- Флаги макропоследовательности
m_key=-1, -- Назначенная клавиша
m_code="", -- оригинальный "текст" макроса
m_macroId=0, -- Идентификатор загруженного макроса в плагине LuaMacro; 0 для макроса, запускаемого посредством MSSC_POST.
m_macrovalue=nil, -- Значение, хранимое исполняющимся макросом
m_handle=nil -- Хэндл исполняющегося макроса
m_id = 0, -- идентификатор загруженного макроса в плагине LuaMacro; 0 для макроса, запускаемого посредством MSSC_POST.
m_lang = "lua", -- язык макропоследовательности
m_code = "", -- оригинальный код макроса
m_flags = 0, -- флаги макропоследовательности
m_key = -1, -- назначенная клавиша
m_value = nil, -- значение, хранимое исполняющимся макросом
m_handle = nil -- хэндл исполняющегося макроса
}
local meta = { __index=MacroRecord }

function MacroRecord:Flags() return self.m_flags end
function MacroRecord:GetFlags() return self.m_flags end
function MacroRecord:SetFlags(f) self.m_flags=f end
function MacroRecord:GetHandle() return self.m_handle end
function MacroRecord:SetHandle(handle) self.m_handle=handle end
function MacroRecord:GetValue() return self.m_macrovalue end
function MacroRecord:SetValue(val) self.m_macrovalue=val end
function MacroRecord:GetValue() return self.m_value end
function MacroRecord:SetValue(val) self.m_value=val end

NewMacroRecord = function (MacroId, Lang, Code, Flags, Key)
local mr = {
m_macroId=MacroId, m_lang=Lang, m_flags=Flags, m_key=Key, m_code=Code,
m_macrovalue=nil,
m_handle=nil
m_id=MacroId, m_lang=Lang, m_code=Code, m_flags=Flags, m_key=Key,
}
return setmetatable(mr, meta)
end
Expand Down Expand Up @@ -108,11 +111,11 @@ end

local NewMacroState do
local MacroState = {
IntKey=0, -- "описание реально нажатой клавиши"
Executing=0,
MacroQueue=nil,
HistoryDisable=0,
UseInternalClipboard=false
IntKey = 0, -- "описание реально нажатой клавиши"
HistoryDisableMask = 0,
UseInternalClipboard = false,
Executing = MACROSTATE_NOMACRO,
MacroQueue = nil
}
local meta = { __index=MacroState }
function MacroState:GetCurMacro() return self.MacroQueue.first end
Expand Down Expand Up @@ -146,29 +149,20 @@ local function RemoveCurMacro() CurState:RemoveCurMacro() end
local function IsExecuting()
local m = GetCurMacro()
if m and m:GetHandle() then
return band(m:Flags(),MFLAGS_NOSENDKEYSTOPLUGINS)~=0 and MACROSTATE_EXECUTING or MACROSTATE_EXECUTING_COMMON
return band(m:GetFlags(),MFLAGS_NOSENDKEYSTOPLUGINS)~=0 and MACROSTATE_EXECUTING or MACROSTATE_EXECUTING_COMMON
else
return StateStack[1] and MACROSTATE_EXECUTING_COMMON or MACROSTATE_NOMACRO
end
end

local function GetHistoryDisableMask()
return CurState.HistoryDisable
end

local function SetHistoryDisableMask (Mask)
local OldHistoryDisable = CurState.HistoryDisable
CurState.HistoryDisable = Mask
return OldHistoryDisable
end

local function IsHistoryDisable (TypeHistory)
return GetCurMacro() and band(CurState.HistoryDisable, lshift(1,TypeHistory))~=0 and 1 or 0
local State = StateStack:top() or CurState
return State:GetCurMacro() and band(State.HistoryDisableMask, lshift(1,TypeHistory))~=0 and 1 or 0
end

local function IsDisableOutput()
local m = GetCurMacro()
return m and band(m:Flags(),MFLAGS_ENABLEOUTPUT)==0 and 1 or 0
return m and band(m:GetFlags(),MFLAGS_ENABLEOUTPUT)==0 and 1 or 0
end

local function PushState (withClip)
Expand All @@ -189,50 +183,46 @@ local function PopState (withClip)
end
end

-- инициализация всех переменных
function KeyMacro.InitInternalVars (InitedRAM)
if InitedRAM then
CurState.MacroQueue = NewQueue()
CurState.Executing = MACROSTATE_NOMACRO
end
CurState.HistoryDisable = 0
CurState.HistoryDisableMask = 0
end

function KeyMacro.mmode (Action, nValue) -- N=MMode(Action[,Value])
function KeyMacro.mmode (Action, Value) -- N=MMode(Action[,Value])
local TopMacro = GetTopMacro()
if not TopMacro then return false end

if Action==1 then -- DisableOutput
local Result = band(TopMacro:Flags(),MFLAGS_ENABLEOUTPUT)==1 and 0 or 1
if (nValue==0 or nValue==1 or nValue==2) and nValue~=Result then
TopMacro.m_flags = bxor(TopMacro.m_flags, MFLAGS_ENABLEOUTPUT)
far_Text()
local result = 0
local flags = TopMacro:GetFlags()
if Action==1 then -- enable/disable output
result = band(flags, MFLAGS_ENABLEOUTPUT)==1 and 0 or 1
if (Value==0 or Value==1 or Value==2) and Value~=result then
TopMacro:SetFlags(bxor(flags, MFLAGS_ENABLEOUTPUT))
far.Text() -- M#2389: mmode(1,x): вывод на экран включается/отключается не вовремя
end
return Result
elseif Action==2 then -- Get MacroRecord Flags
return bor(lshift(TopMacro:Flags(),8), 0xFF)
else
return 0
elseif Action==2 then -- get MacroRecord flags
result = bor(lshift(flags,8), 0xFF)
end
return result
end

local function CheckCurMacro()
local macro = GetCurMacro()
if macro then
local handle = macro:GetHandle()
if handle == nil then
--MacroIsRunning = MacroIsRunning + 1
if not macro:GetHandle() then
PushState(false)
handle = MacroInit(macro.m_macroId, macro.m_lang, macro.m_code)
macro:SetHandle(MacroInit(macro.m_id, macro.m_lang, macro.m_code))
PopState(false)
--MacroIsRunning = MacroIsRunning - 1
if handle then macro:SetHandle(handle) end
end
if handle then
if macro:GetHandle() then
return macro
else
RemoveCurMacro()
Import.RestoreMacroChar()
end
RemoveCurMacro()
Import.RestoreMacroChar()
end
end

Expand Down Expand Up @@ -266,7 +256,7 @@ local function CallStep()
local value, handle = macro:GetValue(), macro:GetHandle()
if type(value) == "userdata" then
r1,r2 = MacroStep(handle, far_FarMacroCallToLua(value))
elseif type(value) == "table" --[[and value.n]] then
elseif type(value) == "table" then
r1,r2 = MacroStep(handle, unpack(value,1,value.n))
elseif value ~= nil then
r1,r2 = MacroStep(handle, value)
Expand All @@ -276,23 +266,25 @@ local function CallStep()
PopState(false)
macro:SetValue(nil)

if not (r1==MPRT_NORMALFINISH or r1==MPRT_ERRORFINISH) then
if band(macro:Flags(),MFLAGS_ENABLEOUTPUT)==0 then Import.ScrBufLock() end
if r1 == MPRT_NORMALFINISH or r1 == MPRT_ERRORFINISH then
if band(macro:GetFlags(),MFLAGS_ENABLEOUTPUT) == 0 then
Import.ScrBufUnlock()
end
RemoveCurMacro()
if not GetCurMacro() then
Import.RestoreMacroChar()
end
else
if band(macro:GetFlags(),MFLAGS_ENABLEOUTPUT) == 0 then
Import.ScrBufLock()
end
return r1, r2
end

if band(macro:Flags(),MFLAGS_ENABLEOUTPUT)==0 then Import.ScrBufUnlock() end

RemoveCurMacro()

if not GetCurMacro() then
Import.RestoreMacroChar()
end
end
end

local function GetInputFromMacro()
if Shared.utils.LoadingInProgress() then
if utils.LoadingInProgress() then
return false
end
if MacroIsRunning==0 and not GetCurMacro() then
Expand Down Expand Up @@ -330,22 +322,22 @@ function KeyMacro.PostNewMacro (macroId, code, flags, key, postFromPlugin)
end

local function TryToPostMacro (Mode, TextKey, IntKey)
local m = Shared.utils.GetMacro(Mode, TextKey, true, false)
local m = utils.GetMacro(Mode, TextKey, true, false)
if m then
if m.id then
KeyMacro.PostNewMacro(m.id, m.code, m.flags, TextKey, false)
SetHistoryDisableMask(0)
CurState.HistoryDisableMask = 0
CurState.IntKey = IntKey
end
return true
end
end

function KeyMacro.DisableHistory (State)
State = type(State)=="number" and math_floor(State)
function KeyMacro.DisableHistory (Mask)
Mask = type(Mask)=="number" and math.floor(Mask)
local t = StateStack:top()
local oldHistoryDisable = t and t.HistoryDisable or 0
if t and State then t.HistoryDisable = State end
local oldHistoryDisable = t and t.HistoryDisableMask or 0
if t and Mask then t.HistoryDisableMask = Mask end
return oldHistoryDisable
end

Expand Down Expand Up @@ -379,14 +371,16 @@ function KeyMacro.Dispatch (opcode, ...)
elseif opcode == OP_ISDISABLEOUTPUT then
return IsDisableOutput()
elseif opcode == OP_HISTORYDISABLEMASK then
return p1 and SetHistoryDisableMask(p1) or GetHistoryDisableMask()
local OldMask = CurState.HistoryDisableMask
if p1 then CurState.HistoryDisableMask = p1 end
return OldMask
elseif opcode == OP_ISHISTORYDISABLE then
return IsHistoryDisable(p1)
elseif opcode == OP_GETCURMACRO or opcode==OP_GETTOPMACRO then
local mr
if opcode==OP_GETCURMACRO then mr=GetCurMacro() else mr=GetTopMacro() end
if mr then
LastMessage = pack(mr.m_flags, mr.m_key)
LastMessage = pack(mr:GetFlags(), mr.m_key)
return MPRT_NORMALFINISH, LastMessage
end
elseif opcode == OP_ISMACROQUEUEEMPTY then
Expand All @@ -402,7 +396,7 @@ function KeyMacro.Dispatch (opcode, ...)
CurState.MacroQueue:add(NewMacroRecord({ f1,f2,HasFunction=true },Lang,Code,Flags,AKey))
return true
else
ErrMsg(f2, Msg.MMacroPErrorTitle)
ErrMsg(f2, Msg.MMacroParseErrorTitle)
end
elseif opcode == OP_GETTOPINTKEY then
local t=StateStack:top()
Expand Down
2 changes: 1 addition & 1 deletion plugins/luamacro/lang.lua
@@ -1,6 +1,6 @@
local list = {
"MOk",
"MMacroPErrorTitle",
"MMacroParseErrorTitle",

"UtExecuteMacroTitle",
"UtExecuteMacroBottom",
Expand Down

0 comments on commit 58a5c21

Please sign in to comment.