просьба, меню кастомной сортировки показывать в стандартном диалоге, т.е. через сепаратор после основных. привык я мышой по символу менять сортировочку. очччень прошу
╔═════════════ Sort by ═════════════╗
║ Name Ctrl-F3 ║
║ Extension Ctrl-F4 ║
║ Write time Ctrl-F5 ║
║ Size Ctrl-F6 ║
║ Unsorted Ctrl-F7 ║
║ Creation time Ctrl-F8 ║
║ Access time Ctrl-F9 ║
║ Change time ║
║ Descriptions Ctrl-F10 ║
║ Owner Ctrl-F11 ║
║ Allocated size ║
║ Number of hard links ║
║ Number of streams ║
║ Size of streams ║
║ Full name ║
║ Custom data ║
╟───────────────────────────────────╢
║ + Sort files with StrCmpLogicalW ║
╟───────────────────────────────────╢
║ Numeric sort ║
║ Uppercase before lowercase ║
║ Use sort groups Shift-F11 ║
║ Show selected first Shift-F12 ║
║√ Show directories first ║
╚═══════════════════════════════════╝
Господа, а все-таки кто-нибудь реализовал макрос (может есть другие способы), чтобы сортировка каталогов была строго по алфавиту?
Меня в частности интересует, сортировка каталогов строго по алфавиту, а файлов по дате изменения. У меня это основной режим работы в другом файловом менеджере. Хотелось и Far также. С Lua к сожалению не знаком...
local ffi=require'ffi'
local C=ffi.C
local band,bor = bit.band,bit.bor
local tonumber = tonumber
local CompareStringFlags = bor(C.NORM_IGNORECASE, C.SORT_STRINGSORT)
local FILE_ATTRIBUTE_DIRECTORY = 0x0010
local BS = string.byte("\\")
--------------------------------------------------------------------------------
-- Helper functions.
--------------------------------------------------------------------------------
local function isDir (p)
return 0 ~= band(tonumber(p.FileAttributes), FILE_ATTRIBUTE_DIRECTORY)
end
local function cmpName (name1, name2)
return -2 + C.CompareStringW(C.LOCALE_USER_DEFAULT, CompareStringFlags, name1, -1, name2, -1)
end
local function getName (fullname)
local bs = C.wcsrchr(fullname,BS)
return bs ~= nil and bs+1 or fullname
end
local function cmpTime (ft1, ft2)
if ft1.dwHighDateTime < ft2.dwHighDateTime then return -1 end
if ft1.dwHighDateTime > ft2.dwHighDateTime then return 1 end
if ft1.dwLowDateTime < ft2.dwLowDateTime then return -1 end
if ft1.dwLowDateTime > ft2.dwLowDateTime then return 1 end
return 0
end
-- Options ---------------------------------------------------------------------
local mode100 = 100
local desc100 = "Custom sort: directories by name, files by write time"
local indic100 = "@#"
local key100 = "CtrlShiftF5"
local OptRevertDirs = false
--------------------------------------------------------------------------------
Panel.LoadCustomSortMode (mode100, {
Description = desc100;
Indicator = indic100;
Compare = function(p1,p2,opt)
local d1,d2 = p1,p2
if not OptRevertDirs and opt.RevertSorting then d1,d2 = p2,p1 end
if isDir(d1) and isDir(d2) then return cmpName(getName(d1.FileName),getName(d2.FileName)) end
return cmpTime(p2.LastWriteTime, p1.LastWriteTime)
end;
})
Macro {
description = desc100;
area="Shell"; key=key100;
action=function() Panel.SetCustomSortMode(mode100) end;
}