Здравствуйте!
Подскажите, можно ли написать макрос на lua, который бы в калькуляторе (плагин Calc) всегда подменял введенную запятую(,) на точку(.) ?
Работать такая замена должна только в калькуляторе.
Есть ли в lua возможность подменить обработчик событий для определенного плагина?
Частичная замена ввода в диалоге определённого плагина Topic is solved
-
Shmuel
- Posts: 7230
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 48 times
- Been thanked: 632 times
Замена
Code: Select all
local F = far.Flags
local CalcId = win.Uuid("E45555AE-6499-443C-AA04-12A1AADAB989")
local function ProcessEvent (Event, DlgEvent)
if Event==F.DE_DLGPROCINIT and DlgEvent.Msg==F.DN_CONTROLINPUT and DlgEvent.Param1==3 then
local Info = far.SendDlgMessage(DlgEvent.hDlg, F.DM_GETDIALOGINFO)
if Info and Info.Id == CalcId then
local Rec = DlgEvent.Param2
if Rec.EventType==F.KEY_EVENT and Rec.KeyDown then
if far.InputRecordToName(Rec) == "," then
mf.postmacro(Keys, ".")
return true
end
end
end
end
end
Event {
description="Calc plugin: replace commas with dots";
group="DialogEvent";
action=ProcessEvent;
}
-
Shmuel
- Posts: 7230
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 48 times
- Been thanked: 632 times
Замена
Code: Select all
local F = far.Flags
local CalcId = win.Uuid("E45555AE-6499-443C-AA04-12A1AADAB989")
local function ProcessEvent (Event, DlgEvent)
if Event==F.DE_DLGPROCINIT and DlgEvent.Msg==F.DN_EDITCHANGE and DlgEvent.Param1==3 then
local Info = far.SendDlgMessage(DlgEvent.hDlg, F.DM_GETDIALOGINFO)
if Info and Info.Id == CalcId then
local Item = DlgEvent.Param2
Item[10] = Item[10]:gsub(",", ".")
mf.postmacro(far.SetDlgItem, DlgEvent.hDlg, 3, Item)
end
end
end
Event {
description="Calc plugin: replace commas with dots";
group="DialogEvent";
action=ProcessEvent;
}
Last edited by Shmuel on Fri 06 Mar, 2026 11:11, edited 1 time in total.
-
Shmuel
- Posts: 7230
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 48 times
- Been thanked: 632 times
Частичная замена ввода в диалоге определённого плагина
Code: Select all
local F = far.Flags
local CalcId = win.Uuid("E45555AE-6499-443C-AA04-12A1AADAB989")
local function ProcessEvent (Event, DlgEvent)
if Event==F.DE_DLGPROCINIT and DlgEvent.Msg==F.DN_EDITCHANGE and DlgEvent.Param1==3 then
local Info = far.SendDlgMessage(DlgEvent.hDlg, F.DM_GETDIALOGINFO)
if Info and Info.Id == CalcId then
local txt = DlgEvent.Param2[10]:gsub(",", ".")
if txt ~= DlgEvent.Param2[10] then
mf.postmacro(far.SendDlgMessage, DlgEvent.hDlg, F.DM_SETTEXT, 3, txt)
end
end
end
end
Event {
description="Calc plugin: replace commas with dots";
group="DialogEvent";
action=ProcessEvent;
}
-
Yegor
- Posts: 1503
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 52 times
- Been thanked: 94 times
Частичная замена ввода в диалоге определённого плагина
А как же тогда вводить что-тот типа:
Шутка
if(10==10,1,2) ?Шутка
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин