Автор: Alexyz21
Дата сообщения: 05.05.2016 10:36
В меню плагина SortStr поломались переходы по полям с помощью TAB - произошло ли это в результате недавних ломок/починок FAR или это проблемы самого плагина мне неизвестно.
Добавлено:
Shmuel
LuaMacro: cannot resolve symbol 'stricmp': Не найдена указанная процедура.
Функция stricmp() не поддерживается? - Можно добавить?
задекларировал:
ffi.cdef[[int stricmp(const char*, const char*);]]
вызвал C.stricmp, получил сообщение выше.
Добавлено:
Angel_Ka
С сохранением списка дубликатов, отсортированном по убыванию. [more]
Код: local F = far.Flags
local ffi = require'ffi'
local C = ffi.C
local BS = string.byte("\\")
ffi.cdef[[
int strcmp(const char*, const char*);
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 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",1,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 fn1==fn0 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;
}