Пользовательский режим сортировки для панелей

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

Shmuel wrote: Thu 05 Aug, 2021 20:22 Можно попробовать использовать для этого какое-то экзотическое поле, например CRC32.
Для этого было бы здорово, если б в InitSort и в EndSort можно было бы передать список lua-таблиц tPluginPanelItem в которых временно (на время сортировки) подменить значение. а потом в EndSort - вернуть на место… А лучше на время сортировки убрать записи-"хвосты", а потом вернуть. Эх! Некому теперь сделать…
stefanenko
Posts: 142
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 49 times
Been thanked: 7 times

Пользовательский режим сортировки для панелей

Post by stefanenko »

Подскажите какое сейчас последнее рабочее решений для сортировки по нескольким полям?
Если есть, можно пример скрипта?

Спасибо
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 »

stefanenko, у меня есть скрипт, сортирующий аудиофайлы по жанру/году/исполнителю. Также есть скрипт (по-моему, недоделанный), сортирующий фотографии по геометкам, размеру, разрешению, аппаратуре. Надо как примеры?
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Пользовательский режим сортировки для панелей

Post by HaRT »

stefanenko wrote: Fri 05 May, 2023 00:53 какое сейчас последнее рабочее решений для сортировки по нескольким полям?
Если это стандартные поля, то задача решается редактированием встроенных режимов сортировки (CtrlF12 F4).
Фар есть инструмент, а не нянька. © 2009 DrKnS
stefanenko
Posts: 142
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 49 times
Been thanked: 7 times

Пользовательский режим сортировки для панелей

Post by stefanenko »

HaRT wrote: Fri 05 May, 2023 01:56 Если это стандартные поля
Поля стандартные но есть моментик.
Хотелось бы иметь сортировку по дате и размеру.
В этом случае время не нужно учитывать.
Наверное не получится стандартными средствами.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Пользовательский режим сортировки для панелей

Post by Shmuel »

stefanenko wrote: Fri 05 May, 2023 03:19 Хотелось бы иметь сортировку по дате и размеру.
В этом случае время не нужно учитывать.
Вот здесь сортировка по времени, дата не учитывается. На основе этого можно сделать, что вам надо.
stefanenko
Posts: 142
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 49 times
Been thanked: 7 times

Пользовательский режим сортировки для панелей

Post by stefanenko »

Shmuel wrote: Fri 05 May, 2023 03:29 На основе этого можно сделать, что вам надо.
Спасибо. То что нужно. Сделал.
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

Пользовательский режим сортировки для панелей

Post by Konstantin »

stefanenko wrote: Fri 05 May, 2023 08:29Сделал
Так опубликуйте, плз.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
stefanenko
Posts: 142
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 49 times
Been thanked: 7 times

Пользовательский режим сортировки для панелей

Post by stefanenko »

Konstantin wrote: Fri 05 May, 2023 13:38 Так опубликуйте, плз.

Code: Select all

-- Started: 2023-05-05
-- Загрузить сортировку по дате и размеру файла.
local ffi = require "ffi"
local C = ffi.C
local F = far.Flags

ffi.cdef [[
  typedef struct {
    WORD wYear,wMonth,wDayOfWeek,wDay,wHour,wMinute,wSecond,wMilliseconds;
  } SYSTEMTIME;

  BOOL FileTimeToSystemTime(const FILETIME*, SYSTEMTIME*);
  BOOL SystemTimeToTzSpecificLocalTime(void*, const SYSTEMTIME*, SYSTEMTIME*);
]]

local ft1, ft2, ftmp = ffi.new("SYSTEMTIME"), ffi.new("SYSTEMTIME"), ffi.new("SYSTEMTIME")

local function Msec(st)
  return st.wMilliseconds + 1000*st.wSecond + 60000*st.wMinute + 3600000*st.wHour
end


local function MyCompare(a, b, p1, p2)
  if (a.wYear > b.wYear) then
    return 1
  elseif (a.wYear < b.wYear) then
    return -1
  elseif (a.wMonth > b.wMonth) then
    return 1
  elseif (a.wMonth < b.wMonth) then
    return -1
  elseif (a.wDay > b.wDay) then
    return 1
  elseif (a.wDay < b.wDay) then
    return -1
  end
  return p1.FileSize < p2.FileSize and -1 or p1.FileSize > p2.FileSize and 1 or 0
end

Panel.LoadCustomSortMode (F.SM_USER+1001,
  {
    Description="Sort by Date, Size";
    Compare = function(p1, p2, opt)
      C.FileTimeToSystemTime(p1.LastWriteTime, ftmp)
      C.SystemTimeToTzSpecificLocalTime(nil, ftmp, ft1)
      C.FileTimeToSystemTime(p2.LastWriteTime, ftmp)
      C.SystemTimeToTzSpecificLocalTime(nil, ftmp, ft2)
      return MyCompare(ft1, ft2, p1, p2)
    end;
    Indicator = "";
  })
Last edited by stefanenko on Sat 06 May, 2023 00:39, edited 1 time in total.
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

Пользовательский режим сортировки для панелей

Post by Konstantin »

За несколько лет у меня скопился набор пользовательских сортировок, которые я периодически использую. Предлагаю его вашему внимания.

Меню с ними выглядит так:
sort.png
(кстати, кроме прочего, данное меню можно вызывать из комстроки: lua:Panel.CustomSortMenu() и это весьма удобно делать алиасом).



Attachments
[F12sorting.7z
(241.33 KiB) Downloaded 43 times
Last edited by Konstantin on Sun 07 May, 2023 10:52, edited 2 times in total.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
Post Reply

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