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 |  
  |