local F = far.Flags local ffi = require'ffi' local C = ffi.C Macro { description="* Select Duplicates FileName in Branch panel"; name="SDFN"; area="Shell"; action=function() local ptr=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 if pin.SortMode~=F.SM_NAME then panel.SetSortMode(nil,1,F.SM_NAME) end local pt,fn0,fn1,t0 = nil,"","",far.FarClock() for i=1,pin.ItemsNumber do --fn0,fn1 = fn1,string.match(panel.GetPanelItem(nil,1,i).FileName,"[^\\\\]+$") fn0,fn1 = fn1,string.gsub(panel.GetPanelItem(nil,1,i).FileName,"^.+\\","") --if fn1==fn0 then panel.SetSelection(nil,1,{i-1,i},true) end if fn1==fn0 then if pt then pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-2,ptr) pt=false end pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-1,ptr) else pt=true end end pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,nil) Keys("ShiftF12") msgbox("SDFN","mcs: "..far.FarClock()-t0.."\n\nUse ShiftF12 for sort") end; } |