имеется несколько файлов на пассивной панели (например, aaa1.mp4, aaa2,mp4, aaa3.aac) и имеется активная панель, на которой есть файлы с такими же именами, но с другими расширениями (например, aaa1.mp3, aaa2.mp4.zip и т.д.). Требуется отметить на активной панели файлы с именами, присутствующие на пассивной панели без учёта расширения. Задачка родилась из практики, может оказаться полезной.
Итак, указанное делает следующий скрипт:
Code: Select all
local Info = package.loaded.regscript or function(...) return ... end
local nfo = Info {_filename or ...,
name = "SelTheSameFiles";
description = "Отметить такие же файлы";
version = "1.0.1";
author = "BAX";
url = "";
id = "86333D39-59B4-4F29-88E3-04714CFF045B";
history = [[
04.02.2022 v1.0.1 - стартовая версия
]];
help = function(nfo,name)
far.Message(
[[Скрипт отмечает на активной панели файлы, присутствующие (без учёта расширения) на пассивной панели.
Если на пассивной панели файлы отмечены, то поиск ограничивается отмеченными файлами.]],
'SelTheSameFiles', nil, 'l'
)
end;
}
if not nfo then return end
Macro{
id="DDA12C19-3A46-47BC-9DF4-7EC8D15084D7";
area="Shell";
key="ShiftAdd:Hold";
description="";
flags="";
action=function(data)
local aList = {}
local n,f = unpack(PPanel.Selected and {PPanel.SelCount, panel.GetSelectedPanelItem} or {PPanel.ItemCount, panel.GetPanelItem})
for i=1,n do
local x = mf.fsplit(f(nil, 0, i).FileName, 4)
x = (x:match("^([^.]*)(%..*)") or x):lower() .. '*.*'
if not aList[x] then
aList[x] = true
aList[#aList+1] = x
end
end
Panel.Select(0, 1, 3, table.concat(aList,','))
end;
}