Отметка файлов с именами, совпадающими с именами пассивной панели

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Отметка файлов с именами, совпадающими с именами пассивной панели

Post by buniak_a_h »

Задача:
имеется несколько файлов на пассивной панели (например, 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;
}
или в виде вложения:
SelTheSameFiles.lua
(1.42 KiB) Downloaded 191 times
Post Reply

Return to “Обсуждение макросов”