Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 4)

Модерирует : gyra, Maz

Maz (23-11-2017 18:57): FAR Manager (часть 5)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
local F = far.Flags
local ffi = require'ffi'
local C = ffi.C
local BS = string.byte("\\")
 
ffi.cdef[[
int strcmp(const char*, const char*);
int _stricmp(const char*, const char*);
int _strnicmp(const char*, const char*, size_t);
char* strrchr(const char*, int);
size_t strlen(const char*);
int memcmp(const void*, const void*, size_t);
]]
 
local function StartAndLen(name)
  local ptr = C.strrchr(name,BS)
  name = ptr==nil and name or ptr+1
  local len = tonumber(C.strlen(name))
  return name,len
end
 
Macro {
description="* Select Duplicates FileName in Branch panel"; name="SDFN"; area="Shell";
action=function()
  local sz=far.InputBox(nil,"Select duplicates","Compare first symbols: ",nil,"999",4,nil,F.FIB_NONE)
  if sz then
    sz = tonumber(sz)
    local pBL=ffi.cast("BOOL*",1)
    local pc=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).PanelControl
    local pin=panel.GetPanelInfo(nil,1)
    if bit.band(pin.Flags,F.PFLAGS_SELECTEDFIRST)>0 then Keys("ShiftF12") end
    pc(PANEL_ACTIVE,"FCTL_SETNUMERICSORT",0,nil)
    pc(PANEL_ACTIVE,"FCTL_SETCASESENSITIVESORT",0,nil)
    if pin.SortMode~=F.SM_NAME then panel.SetSortMode(nil,1,F.SM_NAME) end
    local sid,sel,j,fn0,fn1,st0,ln0,st1,ln1,t0 = 0,{},0,"","",0,0,0,0,far.FarClock()
    pc(PANEL_ACTIVE,"FCTL_BEGINSELECTION",0,nil)
    for i=1,pin.ItemsNumber do
      fn0=fn1
      st1,ln1=StartAndLen(panel.GetPanelItem(nil,1,i).FileName)
      fn1=ffi.string(st1,ln1)
      if C._strnicmp(fn1,fn0,sz)==0 then
        if i>j then  
          pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-2,pBL)
          table.insert(sel,{fn0,1})
          sid=1
        end
        pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-1,pBL)
        j,sid=i+1,sid+1
        sel[#sel][2]=sid
      end
    end
    pc(PANEL_ACTIVE,"FCTL_ENDSELECTION",0,nil)
    pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,nil)
    table.sort(sel,function(a,b) return a[2]>b[2] end)
    local s=""
    for i=1,#sel do s=s..sel[i][2].."\t"..sel[i][1].."\n" end
    fwrite(s,"Z:\\Temp\\Report.txt")
    Keys("ShiftF12")
    msgbox("SDFN","mcs: "..far.FarClock()-t0.."\n\nUse ShiftF12 for sort")
  end
end;
}
 

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 18:19 05-05-2016
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 4)
Maz (23-11-2017 18:57): FAR Manager (часть 5)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru