Victor_VG
Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору shmuz Alexyz21 Кстати, из серии "мечта ..." - при правке SV_Review.lua у меня мелькнула идея - вместо флага-выключателя (добавлен в v1.2): Код: -- Open current graphics or video file at active panel in to Review. -- -- v1.0, Initial version -- VictorVG, 14.08.2019 01:07:44 +0300 -- v1.1, Refactoring -- VictorVG, 14.08.2019 06:41:47 +0300 -- 1.2, Add on/off flags (bulean): on=true , off=nil -- VictorVG, 14.08.2019 16:43:23 +0300 local RVId="0364224C-A21A-42ED-95FD-34189BA4B204" local MaskG,MaskV="/.+\\.(pcx|psd)/i","/.+\\.(3gp|avi|flv|m2t|mkv|mov|mp4|mp4v|mp4a|mpg|mpeg|mts|ts|wbem|wmv)/i" local FG,FV=nil,true Macro{ id="12FA2EAA-E5B0-4F4B-8C02-E8B008490D47"; area="Shell Viewer"; key="F3 Enter NumEnter MsM1Click"; description="Review: Open graphics files"; condition=function() return (FG and Plugin.Exist(RVId) and mf.fmatch(APanel.Current,MaskG)==1) end; action=function() Far.DisableHistory(-1) Plugin.Command(RVId,APanel.Current); end; } Macro{ id="3A7772FB-E33D-4239-A67F-4B4800787C16"; area="Shell"; key="F3 CtrlPgDn"; description="Review: Open video files"; priority=60; condition=function() return (FV and Plugin.Exist(RVId) and mf.fmatch(APanel.Current,MaskV)==1) end; action=function() Far.DisableHistory(-1) Plugin.Command(RVId,APanel.Current); end; } | делать проверку по версии плагина FarImageView. Грубо говоря так: Код: local PlgId=GUID local ver="<version>" -- версия для сравнения {macro ..... condition=function() return ((Plugin.Version(PlgId) < Ver) and Plugin.Exist(RVId) and mf.fmatch(APanel.Current,MaskV)==1) end; .... end } | смысл - мы знаем версии которые не работают с форматами .PCX/.PSD - это все версии ниже 3.46.8.4363 и проверяем версию установленного плагина на "Если больше, то зовём его, иначе альтернативный". Алгоритм разбора известен, но скорость его работы не самая высокая - в библиотеках NSIS есть несколько подобных макросов и функций, например в библиотеке FileFunc есть макрос ${GetFileVersion} "[Executable]" $var который возвращает в $var результат в формате Major.Minor.Buld.Revision или ставит флаг ошибки при неудаче. Или зови встроенную функцию GetDllVersion() и сам парси её вывод (пример их хелпа NSIS): Код: GetDllVersion "$INSTDIR\MyDLL.dll" $R0 $R1 IntOp $R2 $R0 / 0x00010000 IntOp $R3 $R0 & 0x0000FFFF IntOp $R4 $R1 / 0x00010000 IntOp $R5 $R1 & 0x0000FFFF StrCpy $0 "$R2.$R3.$R4.$R5" | - работа с обоими не всегда удобна, особенно если надо сравнить версии - этого в NSIS нет. Но у NSIS есть плагины и они сильно упрощают жизнь. Например xtInfo умеет сравнивать строки версий (xtInfo::CompareVersion) и выдавать ответ больше / меньше или равно, а дальше делай что нужно. И главное плагины работают на порядки быстрее, и потому и в случае с этой идеей мне подумалось, что функция типа Plugin.GetVersion(GUID|DllName) возвращающая номер версии плагина из GlobalInfo -> VersionInfo окажется достаточно востребованной т.к. позволит реализовать в скриптах зависящее от версии плагина ветвление и оптимизацию их алгоритмов. Честно говоря я пока не представляю с какой стороны подступится к сей задаче, просто высказываю мысли в слух для оценки - "А есть ли смысл с этим возится?".
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
|