Здесь можно обсудить ваш любимый плагин.
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Sat 21 Feb, 2015 21:20
Latest post of the previous page:
По первой части: сообщения об ошибках прекратились.
По второй: макросов выдаёт много, больше дюжины (не стал дожидаться всех).
U:\FarLce\Profile\Macros\scripts\ctAlShSl[dot[K]получениеНазванияКлавиши[Common_KeyName](SimSU)com-МЕШАЕТ_SortString.lua, Получение названия клавиши. © SimSU
Code: Select all
-- SUSim on Sun 05 Oct, 2014 11:15 http://forum.farmanager.com/viewtopic.php?p=93266#p93266
-------------------------------------------------------------------------------
-- Получение названия клавиши. © SimSU Благодарность: Shmuel.
-------------------------------------------------------------------------------
---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Common_KeyName.cfg
return{
Key="Common_KeyName CtrlAltShift/ CtrlAltShift. CtrlAltShiftK"; --Prior=50; -- Получение названия клавиши. -- Ctrl/
}
-- Конец файла Profile\SimSU\Common_KeyName.cfg
end
---- Локализация
_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\SimSU\Common_KeyNameRussian.lng
return{
Descr="Получение названия клавиши. © SimSU";
Press=" Нажмите клавишу... ";
Name="Название клавиши";
Code="Код клавиши";
}
-- Конец файла Profile\SimSU\Common_KeyNameRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Common_KeyNameEnglish.lng
return{
Descr="Get name of key. © SimSU";
Press=" Press key... ";
Name="Key name";
Code="Key code";
}
-- End of file Profile\SimSU\Common_KeyNameEnglish.lng
end end
local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_KeyName"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Common_KeyName.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_KeyName.cfg") or Settings)()
local SimSU=SimSU or {}
-------------------------------------------------------------------------------
function SimSU.Common_KeyName() -- Получение названия клавиши.
far.Message(M.Press,"","")
local VK=mf.waitkey(0,1)
VK=prompt(M.Name,("%s: %d (0x%X)"):format(M.Code,VK,VK),0x01+0x10,mf.key(VK))
return VK
end
-------------------------------------------------------------------------------
if not Macro then return {Common_KeyName=SimSU.Common_KeyName} end
local ok, mod = pcall(require,"SimSU.Common_KeyName"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------
Macro {area="Common"; key=S.Key; priority=S.Prior; description=M.Descr;
action=function() local VK=SimSU.Common_KeyName(); if VK then print(VK) end end;
}
sToLp
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sat 21 Feb, 2015 21:41
На этот макрос у меня не ругается. Нужно было пройти все макросы до тех пор пока не возникнет ошибка. Последний - и есть проблемный. Вы так сделали?
Max Rusov
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Sat 21 Feb, 2015 22:08
Ошибку вызывает любой internal-макрос.
В т.ч. вновь созданный Shell_CtrlShiftI.lua:
Code: Select all
Macro {
description="";
area="Shell"; key="CtrlShiftI";
flags="NoSendKeysToPlugins";
code="Keys(\"CtrlO\")";
}
sToLp
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sat 21 Feb, 2015 22:18
Понятно, спасибо.
надо заменить
if m.FileName then
на
if m.FileName and m.action then
Max Rusov
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Sat 21 Feb, 2015 22:32
Поменял, и теперь всё в порядке.
Спасибо за оперативную починку!
И особая благодарность за продолжение развития плагина!
sToLp
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Sun 22 Feb, 2015 06:57
Составил
Code: Select all
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Press";
area="Shell"; key="CtrlShiftM:Press";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Press","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Press";
area="Shell"; key="CtrlShiftM:Press";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Press","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Release";
area="Shell"; key="CtrlShiftM:Release";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Release","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Release";
area="Shell"; key="CtrlShiftM:Release";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Release","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Hold";
area="Shell"; key="CtrlShiftM:Hold";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Hold","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Hold";
area="Shell"; key="CtrlShiftM:Hold";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Hold","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Single";
area="Shell"; key="CtrlShiftM:Single";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Single","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Single";
area="Shell"; key="CtrlShiftM:Single";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Single","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Double";
area="Shell"; key="CtrlShiftM:Double";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Double","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Double";
area="Shell"; key="CtrlShiftM:Double";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Double","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Down";
area="Shell"; key="CtrlShiftM:Down";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Down","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Down";
area="Shell"; key="CtrlShiftM:Down";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Down","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Up";
area="Shell"; key="CtrlShiftM:Up";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Up","OK")
end;
}
Macro {
description="&h проба расширенной привязки шорткатов CtrlShiftM:Up";
area="Shell"; key="CtrlShiftM:Up";
action=function()
local msg = win.GetEnv("farlang")=="Russian" and "проба расширенной привязки шорткатов" or "sample enhanced binding shortcuts"
far.Message(msg,":Up","OK")
end;
}
с расширенной привязкой шорткатов (с каждым из модификаторов: Press, Release, Hold, Single, Double, Down, Up).
При их вызове по
CtrlShiftM
выводится следующий
картинка test23.png (113.43 KiB) Viewed 6481 times
, отображающий не все макросы из набора.
Так и должно быть?
Attachments
test23.7z
тестовый набор макросов (642 Bytes) Downloaded 70 times
sToLp
Shmuel
Posts: 6819 Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times
Post
by Shmuel » Sun 22 Feb, 2015 07:48
Парочка наблюдений по версии 1.24:
1. Если путь к папке плагина содержит пробелы, то при запуске Фара видим
Code: Select all
╔════════════════════════════════════════ LuaMacro ════════════════════════════════════════╗
║ [string "return Files\Far3\Plugins\Other\macrolib\Macr..."]:1: '<eof>' expected near '\' ║
╟──────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
.
2. На Windows XP SP3 x86 при запуске Фара получаем многократное
Code: Select all
╔═══════════════ MacroLib ════════════════╗
║ External exception C0000005 at 01C06D2F ║
╟─────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════╝
, видимо на каждый нативный макрос. На Windows 7 этого нет.
Shmuel
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Sun 22 Feb, 2015 09:18
Code: Select all
Macro {
description="&m проба определения шортката расширенной привязки";
area="Shell"; key="CtrlShiftM:Press CtrlShiftM:Release CtrlShiftM:Hold CtrlShiftM:Single CtrlShiftM:Double CtrlShiftM:Down CtrlShiftM:Up";
action=function()
local a=akey(1,1);
far.Message("проба определения шортката расширенной привязки",a,"OK")
end;
}
выдаёт сообщение без указания модификатора:
Code: Select all
╔══════════════════ CtrlShiftM ═══════════════════╗
║ проба определения шортката расширенной привязки ║
╟─────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════╝
А если этот макрос ещё и удвоить, и запускать его через диалог выбора, то сообщение и вовсе становится таким:
Code: Select all
╔═══════════════════════ ☺ ═══════════════════════╗
║ проба определения шортката расширенной привязки ║
╟─────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════╝
sToLp
John Doe
Бюрократ
Posts: 13807 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:
Post
by John Doe » Sun 22 Feb, 2015 10:02
Max Rusov wrote: Для поддержки нативных LUA макросов больше не нужен макрос-хелпер
А как плагин узнаёт о перезагрузке макросов?
Max Rusov wrote: Вызов сделал иначе, без eval
А проверяются ли флаги-условия?
И также надо помнить о EnableOutput и NoSendKeysToPlugins.
John Doe
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sun 22 Feb, 2015 17:37
sToLp wrote: ...отображающий не все макросы из набора. Так и должно быть?
Видимо, да. Одно нажатие не может попасть под все модификаторы, зачем бы они тогда были нужны?
sToLp wrote: макрос выдает сообщение без указания модификатора
Так и должно быть, я об этом сразу написал.
sToLp wrote: если этот макрос ещё и удвоить, и запускать его через диалог выбора, то сообщение и вовсе становится таким:
Это поправлю.
Max Rusov
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sun 22 Feb, 2015 18:02
John Doe wrote: А как плагин узнаёт о перезагрузке макросов?
Никак. При перезагрузке макросов FAR, надо вызвать перезагрузку макросов MacroLib. Пример макроса в комплекте.
John Doe wrote: А проверяются ли флаги-условия?
Нет, только condition. Надо добавить.
Max Rusov
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sun 22 Feb, 2015 18:39
Shmuel wrote: На Windows XP SP3 x86 при запуске Фара получаем многократное
У меня не воспроизводится. Если не затруднит - попробуйте отладочный Build. Перед запуском FAR запустите DBWinOle.exe, и пришлите лог с ошибкой.
Attachments
MacroLib_Deb.rar
(217.14 KiB) Downloaded 81 times
Max Rusov
Shmuel
Posts: 6819 Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times
Post
by Shmuel » Sun 22 Feb, 2015 20:21
Max Rusov wrote: и пришлите лог с ошибкой.
Поставил ночную сборку 4276 с новым профилем. Создал 1 макрофайл с 1 макросом
Macro { area="Shell"; key="F1"; action=function() end; }
Вот репорт:
Code: Select all
"C:\fartest\Plugins\MacroLib\MacroLib.dll" (MacroLib, ver: 1.24)
(Addr: 40F00000, Delphi5 Frames Asserts Unicode)
ExecMacro: @"C:\fartest\Plugins\MacroLib\MacroLib.lua"
ExecMacro: if MacroLib then MacroLib.UpdateLuaMacros() end
Error at 40F0C36B, EExternal: External exception C0000005 at 40F0C36B
: 40F057F5 : 40F05F87 : 40F06F0C : 40F01C25 : 00020000
Shmuel
Max Rusov
Posts: 3651 Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times
Post
by Max Rusov » Sun 22 Feb, 2015 21:10
Понятно. Это потому что у нет ни одного *.fmlua макроса. Fixed.
Max Rusov
sToLp
Posts: 938 Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times
Post
by sToLp » Mon 23 Feb, 2015 08:55
При наличии макроса с модификатором Press макросы с другими модификаторами либо совсем не работают, либо конфликтуют с ним (Single и Down) и, соответственно, вызываются только через диалог выбора. А хотелось бы, чтобы и другие макросы с модификаторами работали вкупе с Press. Сейчас мне особенно интересны макросы с Hold и с Double.
То, что такое в принципе возможно, показывает пример применения макроса
MacroEx . После его установки возможно создать три lua-макроса на один шорткат: без модификатора, с Hold и с Double. И каждый из них будет работать. И это весьма удобно и полезно.
sToLp
John Doe
Бюрократ
Posts: 13807 Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:
Post
by John Doe » Mon 23 Feb, 2015 09:36
Видимо баг, т.к. Press c Hold и Double должны прекрасно сочетаться.
Но какую цель вы преследуете назначая макросы одновременно на Single, Press и Down?
Чем вообще Single отличается от Press и Down?
John Doe