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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12265
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 163 times

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

Post by John Doe » Wed 24 Apr, 2019 08:24

Latest post of the previous page:

Универсальность повысится. Такой режим отображения будет полезен не только для результатов поиска.
IgorZ wrote:
Wed 24 Apr, 2019 07:40
причём, существенно переписанный заново
Возможно будет проще интегрировать во временную панель из плагинов Shmuel.

IgorZ
Posts: 604
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 38 times

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

Post by IgorZ » Wed 24 Apr, 2019 09:36

Отвлекли, забыл отправить. Выкладываю.
  1. local F = far.Flags
  2. local Title ="TmpPanel"
  3. local DirSortMode
  4. PanelModule{
  5.   Info={
  6.     Guid=win.Uuid("BA461384-095B-4D0F-AA87-07365A0E2AF6");
  7.     Title=Title;
  8.     Description="Временная панель, как окно поиска";
  9.     Version="0.7";
  10.     Author="IgorZ";
  11.   };
  12. --
  13.   Open=function(OpenFrom)
  14. if OpenFrom==F.OPEN_FINDLIST then
  15.   DirSortMode = band(panel.GetPanelInfo(nil,1).Flags,F.PFLAGS_DIRECTORIESFIRST)~=0
  16.   return {}
  17. end
  18.   end;
  19. --
  20.   SetFindList=function(object,_,Items)
  21. local TPGuid,fn = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C",far.MkTemp()
  22. local h = io.open(fn,"w")
  23. for _,nm in ipairs(Items) do h:write(nm.FileName.."\n") end
  24. h:close()
  25. far.MacroPost([[Keys"Tab" Plugin.Command("]]..TPGuid..[[",[=[ +replace -menu ]]..fn..[[]=]) if Area.Dialog then Keys"Enter" end Keys"Tab"]])
  26. --far.MacroPost([[Keys"Tab" Plugin.Command("]]..TPGuid..[[",[=[ +replace -menu ]]..fn..[[]=]) if Area.Dialog then Keys"Enter" end Keys"Enter Tab"]])
  27. object.List = Items
  28. return true
  29.   end;
  30. --
  31.   GetFindData=function (object)
  32. local Items,ldir = {},":"
  33. for _,PI in ipairs(object.List) do
  34.   local FT = win.FileTimeToSystemTime(win.FileTimeToLocalFileTime(PI.LastWriteTime))
  35.   local cdir = PI.FileAttributes:match("d") and PI.FileName or PI.FileName:match("^(.*)\\[^\\]*$")
  36.   if (not PI.FileAttributes:match("d")) and (cdir~=ldir) then
  37.     Items[#Items+1] = win.GetFileInfo(cdir)
  38.     Items[#Items].FileName,Items[#Items].CustomColumnData = cdir,{cdir}
  39.   end
  40.   ldir = cdir
  41.   Items[#Items+1] = {
  42.     LastWriteTime = PI.LastWriteTime,
  43.     LastAccessTime = PI.LastAccessTime,
  44.     CreationTime = PI.CreationTime,
  45.     ChangeTime = PI.ChangeTime,
  46.     FileSize = PI.FileSize,
  47.     AllocationSize = PI.AllocationSize,
  48.     FileName = PI.FileName,
  49.     AlternateFileName = PI.AlternateFileName,
  50.     FileAttributes = PI.FileAttributes,
  51.     Flags = PI.Flags,
  52.     NumberOfLinks = PI.NumberOfLinks,
  53.     CRC32 = PI.CRC32,
  54.     Description = PI.Description,
  55.     Owner = PI.Owner,
  56.     CustomColumnData = {PI.FileAttributes:match("d") and PI.FileName or ([[%7d.%02d.%4d%3d:%02d:%02d│%13d│%-6s│%s]]):
  57.       format(FT.wDay,FT.wMonth,FT.wYear,FT.wHour,FT.wMinute,FT.wSecond,PI.FileSize,PI.FileAttributes:upper(),PI.FileName:match("[^\\]*$"))},
  58.     UserData = PI.UserData,
  59.   }
  60. end
  61. return Items
  62.   end;
  63. --
  64.   GetOpenPanelInfo=function()
  65. return {
  66.   Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES;
  67.   PanelTitle = Title;
  68.   PanelModesArray = {{
  69.     ColumnTypes = "C0",
  70.     ColumnWidths = "0",
  71.     ColumnTitles = {"Found files:"},
  72.     StatusColumnTypes = "N",
  73.     StatusColumnWidths = "0",
  74.     Flags = F.PMFLAGS_FULLSCREEN,
  75.   }};
  76.   PanelModesNumber = 1;
  77.   StartPanelMode = "1";
  78.   StartSortMode = F.SM_UNSORTED;
  79.   StartSortOrder = 0;
  80.   ShortcutData = "";
  81. }
  82.   end;
  83. --
  84.   ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end;
  85. --
  86.   ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end;
  87. }
Во вложении он же в архиве.
Изменения:
  • во временную панель передаются только найденные элементы, без добавляемых папок;
  • если для временной панели включён режим "Использовать общую панель", то, закомментировав строку 25 и раскомментировав строку 26, получим вариант, когда временная панель не открыта на пассивной панели Far, но найденные элементы скопированы на неё и при открытии временной панели окажутся там. Если режим выключен, то временная панель откроется пустой, и данный вариант не имеет смысла.
Attachments
TmpPanel.0.7.7z
(1.46 KiB) Downloaded 23 times

MasterLogic
Posts: 8
Joined: Wed 15 Aug, 2018 12:17
Has thanked: 1 time

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

Post by MasterLogic » Wed 24 Apr, 2019 12:18

IgorZ wrote:
Wed 24 Apr, 2019 04:54
Образно говоря, Вам шашечки, или ехать? Данные передаются, а как это делается - какая Вам разница?
Образно говоря и шашечки (удобный список Вашего модуля) и ехать (функциональность фара - передача результатов поиска во времен.панель) :)
Про передачу средствами фара думал, что это как-то нативней, надежней что ли, да и через внеш.файл не аккуратненько как-то - ну да это так, мелочи.
Главное что v0.7 работает правильно в обоих случаях. Спасибо.

IgorZ
Posts: 604
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 38 times

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

Post by IgorZ » Fri 26 Apr, 2019 07:38

Довёл до состояния релиза.
Версия 1.0. Изменения по сравнению с версией 0.7:
  • Добавлена настройка. Теперь режимы копирования файлов во временную панель и открытия временной панели в пассивной могут быть отключены.
  • Добавлен "обратный режим": из открытой временной панели файлы можно скопировать в данную. При этом она открывается вместо временной.
  • Добавлена локализация.
  • Добавлена справка.
  • Различные мелочи.

MasterLogic
Posts: 8
Joined: Wed 15 Aug, 2018 12:17
Has thanked: 1 time

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

Post by MasterLogic » Fri 26 Apr, 2019 15:21

Ошибка в строке 118 при закрытии диалога конфигурации по ESC или Cancel. Там походу надо заменить L.er.Cancel на L.Cancel.
Вы поменяли название на SearchTmpPanel, тогда возможно лучше и файл также переименовать, для единообразия.

PS И еще просьба (в принципе это касается всех Ваших скриптов) - не могли бы убрать зависимость от регистра расширения, т.е. работает *.lua, а *.Lua, *.LUA уже нет, ну что-то типа .source:lower():match("^@?([^@].*)%.lua$") вместо .source:match("^@?([^@].*)%.lua$").

IgorZ
Posts: 604
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 38 times

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

Post by IgorZ » Mon 29 Apr, 2019 05:33

MasterLogic wrote:
Fri 26 Apr, 2019 15:21
Ошибка в строке 118 при закрытии диалога конфигурации по ESC или Cancel. Там походу надо заменить L.er.Cancel на L.Cancel.
Нет, там всё правильно. Это я в языковых файлах лишнее почистил.
MasterLogic wrote:
Fri 26 Apr, 2019 15:21
Вы поменяли название на SearchTmpPanel, тогда возможно лучше и файл также переименовать, для единообразия.
Не стоит. Без крайней надобности лучше не менять имя файла - людям удобнее и безопаснее будет заменять версию.
MasterLogic wrote:
Fri 26 Apr, 2019 15:21
PS И еще просьба (в принципе это касается всех Ваших скриптов) - не могли бы убрать зависимость от регистра расширения, т.е. работает *.lua, а *.Lua, *.LUA уже нет, ну что-то типа .source:lower():match("^@?([^@].*)%.lua$") вместо .source:match("^@?([^@].*)%.lua$").
Забавно. Сколько пользуюсь этим приёмом - никто никогда не жаловался. Вы, похоже, первый, кто из чувства прекрасного корректирует регистр расширения файлов. Хорошо, сделаю даже больше.

Версия 1.0.1. Изменения по сравнению с версией 1.0:
  • Исправлена ошибка в языковых файлах.
  • Добавлена независимость от расширения файла скрипта. Теперь оно может быть любым. Вообще. Лишь бы из букв.

Post Reply

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