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

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Описание:
Скрипт является панельным модулем, предназначенным заменять временную панель при выводе результатов поиска файлов. Основные отличия:
  • форма вывода информации приближёна к формату результатов поиска в диалоге поиска Far;
  • функциональность скрипта, в отличие от стандартной временной панели, ограничена реальными файлами;
  • работа с файлами внутри архивов.


Требуемая версия Far 3.0.5182+.

Замечание: скрипт передаёт список содержимого плагину "Временная панель" через файл. Сборки плагина 107-109 при заполнении Временной панели содержимым из файла для каждого элемента заполняют APanel.UNCPath полным именем (включая абсолютный путь) файла-списка. Если это может сломать работу Ваших скриптов, используйте сборку Временной панели 106 от более ранней версии Far, а лучше перейдите на Far 3.0.5641+, содержащий Временную панель сборки 110+ с устранённой вышеописанной особенностью.



Attachments
TmpPanel.1.3.5.7z
(14.48 KiB) Downloaded 169 times
Last edited by IgorZ on Thu 12 May, 2022 11:40, edited 23 times in total.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

Универсальность повысится. Такой режим отображения будет полезен не только для результатов поиска.
IgorZ wrote: Wed 24 Apr, 2019 07:40причём, существенно переписанный заново
Возможно будет проще интегрировать во временную панель из плагинов Shmuel.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Отвлекли, забыл отправить. Выкладываю.
  1. local F = far.Flags
  2.  
  3. local Title ="TmpPanel"
  4.  
  5. local DirSortMode
  6.  
  7. PanelModule{
  8.  
  9.   Info={
  10.  
  11.     Guid=win.Uuid("BA461384-095B-4D0F-AA87-07365A0E2AF6");
  12.  
  13.     Title=Title;
  14.  
  15.     Description="Временная панель, как окно поиска";
  16.  
  17.     Version="0.7";
  18.  
  19.     Author="IgorZ";
  20.  
  21.   };
  22.  
  23. --
  24.  
  25.   Open=function(OpenFrom)
  26.  
  27. if OpenFrom==F.OPEN_FINDLIST then
  28.  
  29.   DirSortMode = band(panel.GetPanelInfo(nil,1).Flags,F.PFLAGS_DIRECTORIESFIRST)~=0
  30.  
  31.   return {}
  32.  
  33. end
  34.  
  35.   end;
  36.  
  37. --
  38.  
  39.   SetFindList=function(object,_,Items)
  40.  
  41. local TPGuid,fn = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C",far.MkTemp()
  42.  
  43. local h = io.open(fn,"w")
  44.  
  45. for _,nm in ipairs(Items) do h:write(nm.FileName.."\n") end
  46.  
  47. h:close()
  48.  
  49. far.MacroPost([[Keys"Tab" Plugin.Command("]]..TPGuid..[[",[=[ +replace -menu ]]..fn..[[]=]) if Area.Dialog then Keys"Enter" end Keys"Tab"]])
  50.  
  51. --far.MacroPost([[Keys"Tab" Plugin.Command("]]..TPGuid..[[",[=[ +replace -menu ]]..fn..[[]=]) if Area.Dialog then Keys"Enter" end Keys"Enter Tab"]])
  52.  
  53. object.List = Items
  54.  
  55. return true
  56.  
  57.   end;
  58.  
  59. --
  60.  
  61.   GetFindData=function (object)
  62.  
  63. local Items,ldir = {},":"
  64.  
  65. for _,PI in ipairs(object.List) do
  66.  
  67.   local FT = win.FileTimeToSystemTime(win.FileTimeToLocalFileTime(PI.LastWriteTime))
  68.  
  69.   local cdir = PI.FileAttributes:match("d") and PI.FileName or PI.FileName:match("^(.*)\\[^\\]*$")
  70.  
  71.   if (not PI.FileAttributes:match("d")) and (cdir~=ldir) then
  72.  
  73.     Items[#Items+1] = win.GetFileInfo(cdir)
  74.  
  75.     Items[#Items].FileName,Items[#Items].CustomColumnData = cdir,{cdir}
  76.  
  77.   end
  78.  
  79.   ldir = cdir
  80.  
  81.   Items[#Items+1] = {
  82.  
  83.     LastWriteTime = PI.LastWriteTime,
  84.  
  85.     LastAccessTime = PI.LastAccessTime,
  86.  
  87.     CreationTime = PI.CreationTime,
  88.  
  89.     ChangeTime = PI.ChangeTime,
  90.  
  91.     FileSize = PI.FileSize,
  92.  
  93.     AllocationSize = PI.AllocationSize,
  94.  
  95.     FileName = PI.FileName,
  96.  
  97.     AlternateFileName = PI.AlternateFileName,
  98.  
  99.     FileAttributes = PI.FileAttributes,
  100.  
  101.     Flags = PI.Flags,
  102.  
  103.     NumberOfLinks = PI.NumberOfLinks,
  104.  
  105.     CRC32 = PI.CRC32,
  106.  
  107.     Description = PI.Description,
  108.  
  109.     Owner = PI.Owner,
  110.  
  111.     CustomColumnData = {PI.FileAttributes:match("d") and PI.FileName or ([[%7d.%02d.%4d%3d:%02d:%02d│%13d│%-6s│%s]]):
  112.  
  113.       format(FT.wDay,FT.wMonth,FT.wYear,FT.wHour,FT.wMinute,FT.wSecond,PI.FileSize,PI.FileAttributes:upper(),PI.FileName:match("[^\\]*$"))},
  114.  
  115.     UserData = PI.UserData,
  116.  
  117.   }
  118.  
  119. end
  120.  
  121. return Items
  122.  
  123.   end;
  124.  
  125. --
  126.  
  127.   GetOpenPanelInfo=function()
  128.  
  129. return {
  130.  
  131.   Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES;
  132.  
  133.   PanelTitle = Title;
  134.  
  135.   PanelModesArray = {{
  136.  
  137.     ColumnTypes = "C0",
  138.  
  139.     ColumnWidths = "0",
  140.  
  141.     ColumnTitles = {"Found files:"},
  142.  
  143.     StatusColumnTypes = "N",
  144.  
  145.     StatusColumnWidths = "0",
  146.  
  147.     Flags = F.PMFLAGS_FULLSCREEN,
  148.  
  149.   }};
  150.  
  151.   PanelModesNumber = 1;
  152.  
  153.   StartPanelMode = "1";
  154.  
  155.   StartSortMode = F.SM_UNSORTED;
  156.  
  157.   StartSortOrder = 0;
  158.  
  159.   ShortcutData = "";
  160.  
  161. }
  162.  
  163.   end;
  164.  
  165. --
  166.  
  167.   ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end;
  168.  
  169. --
  170.  
  171.   ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end;
  172.  
  173. }
Во вложении он же в архиве.
Изменения:
  • во временную панель передаются только найденные элементы, без добавляемых папок;
  • если для временной панели включён режим "Использовать общую панель", то, закомментировав строку 25 и раскомментировав строку 26, получим вариант, когда временная панель не открыта на пассивной панели Far, но найденные элементы скопированы на неё и при открытии временной панели окажутся там. Если режим выключен, то временная панель откроется пустой, и данный вариант не имеет смысла.
Attachments
TmpPanel.0.7.7z
(1.46 KiB) Downloaded 67 times
MasterLogic
Posts: 13
Joined: Wed 15 Aug, 2018 12:17
Has thanked: 2 times

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

Post by MasterLogic »

IgorZ wrote: Wed 24 Apr, 2019 04:54 Образно говоря, Вам шашечки, или ехать? Данные передаются, а как это делается - какая Вам разница?
Образно говоря и шашечки (удобный список Вашего модуля) и ехать (функциональность фара - передача результатов поиска во времен.панель) :)
Про передачу средствами фара думал, что это как-то нативней, надежней что ли, да и через внеш.файл не аккуратненько как-то - ну да это так, мелочи.
Главное что v0.7 работает правильно в обоих случаях. Спасибо.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Довёл до состояния релиза.
Версия 1.0. Изменения по сравнению с версией 0.7:
  • Добавлена настройка. Теперь режимы копирования файлов во временную панель и открытия временной панели в пассивной могут быть отключены.
  • Добавлен "обратный режим": из открытой временной панели файлы можно скопировать в данную. При этом она открывается вместо временной.
  • Добавлена локализация.
  • Добавлена справка.
  • Различные мелочи.
MasterLogic
Posts: 13
Joined: Wed 15 Aug, 2018 12:17
Has thanked: 2 times

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

Post by MasterLogic »

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

PS И еще просьба (в принципе это касается всех Ваших скриптов) - не могли бы убрать зависимость от регистра расширения, т.е. работает *.lua, а *.Lua, *.LUA уже нет, ну что-то типа .source:lower():match("^@?([^@].*)%.lua$") вместо .source:match("^@?([^@].*)%.lua$").
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

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:21PS И еще просьба (в принципе это касается всех Ваших скриптов) - не могли бы убрать зависимость от регистра расширения, т.е. работает *.lua, а *.Lua, *.LUA уже нет, ну что-то типа .source:lower():match("^@?([^@].*)%.lua$") вместо .source:match("^@?([^@].*)%.lua$").
Забавно. Сколько пользуюсь этим приёмом - никто никогда не жаловался. Вы, похоже, первый, кто из чувства прекрасного корректирует регистр расширения файлов. Хорошо, сделаю даже больше.

Версия 1.0.1. Изменения по сравнению с версией 1.0:
  • Исправлена ошибка в языковых файлах.
  • Добавлена независимость от расширения файла скрипта. Теперь оно может быть любым. Вообще. Лишь бы из букв.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Техническое: может, имеет смысл уже перекинуть тему в "Полезные макросы и скрипты"? Оформление, вроде, в порядке, скрипт устоялся, замечаний от пользователей нет...
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Как раз сам начал делать. Для полноты щястия не хватает:
1. Пункт меню должен добавляться не только в МЕНЮ плагинов, но и в МЕНЮ дисков (аналогично стандартной Temporary panel)
2. Самое обидное: я не вижу в меню плагинов «пункта Панель результатов поиска файлов». Хотя после поиска помещение на Вашу панель работает.
3. И ГЛАВНОЕ (на мой взгляд): было бы очень кузяво реализовать копирование с сохранением структуры. Тем более, что в Вашей панели гарантированно можно определить "корневой" каталог (из которого вызывался поиск). Я такое копирование когда-то делал из обычной временной панели, но там пришлось полагаться на корректность действий, т.к. не гарантировалось, что содержимое панели - это исключительно результат поиска: всегда есть возможность добавить файлы на временную панель, в результате чего понятие "корневого" каталога может потерять смысл.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Не понял... Вроде, писал ответ, а тут его нет. Отвечаю повторно.
buniak_a_h wrote: Tue 26 Nov, 2019 16:55 Как раз сам начал делать. Для полноты щястия не хватает:
1. Пункт меню должен добавляться не только в МЕНЮ плагинов, но и в МЕНЮ дисков (аналогично стандартной Temporary panel)
Легко. Достаточно исправить строку
guid=Guids.MIGuid; menu="Plugins Config"; area="Shell"; description=L.Desc;
на
guid=Guids.MIGuid; menu="Plugins Config Disks"; area="Shell"; description=L.Desc;
buniak_a_h wrote: Tue 26 Nov, 2019 16:55 2. Самое обидное: я не вижу в меню плагинов «пункта Панель результатов поиска файлов». Хотя после поиска помещение на Вашу панель работает.
Поскольку он предназначен для дублирования содержимого стандартной временной панели в данную, то и появляется, соответственно, только когда активная панель - временная.
buniak_a_h wrote: Tue 26 Nov, 2019 16:55 3. И ГЛАВНОЕ (на мой взгляд): было бы очень кузяво реализовать копирование с сохранением структуры. Тем более, что в Вашей панели гарантированно можно определить "корневой" каталог (из которого вызывался поиск). Я такое копирование когда-то делал из обычной временной панели, но там пришлось полагаться на корректность действий, т.к. не гарантировалось, что содержимое панели - это исключительно результат поиска: всегда есть возможность добавить файлы на временную панель, в результате чего понятие "корневого" каталога может потерять смысл.
Хм. А обычный F5 чем не устраивает?
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote: Wed 27 Nov, 2019 12:05 А обычный F5 чем не устраивает?
Не сохраняет структуру файлов. Я делал макрос, копирующий с временной панели с сохранением структуры. Но одно дело - макрос, не привязанный к поиску, и совсем другое - собственный панельный модуль со своей обработкой ProcessPanelInput и возможностью запоминания "стартового" каталога при создании (например, в Analyse при OPM_FIND.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

IgorZ wrote: Wed 27 Nov, 2019 12:05 Поскольку он предназначен для дублирования содержимого стандартной временной панели в данную, то и появляется, соответственно, только когда активная панель - временная.
Это - серьёзное ограничение…
Попробовал пассивную (спрятанную) панель перенаправить на дисковую папку. F5 совсем перестала работать. Действительно, не собственное представление найденных файлов, а дублирование временной..
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

buniak_a_h wrote: Wed 27 Nov, 2019 12:18
IgorZ wrote: Wed 27 Nov, 2019 12:05 А обычный F5 чем не устраивает?
Не сохраняет структуру файлов. Я делал макрос, копирующий с временной панели с сохранением структуры.
А, так речь идёт о копировании файлов, найденных поиском? Сразу не понял. Ладно, прикину, как время будет (у меня сейчас со свободным временем полосато).
buniak_a_h wrote: Wed 27 Nov, 2019 12:25
IgorZ wrote: Wed 27 Nov, 2019 12:05 Поскольку он предназначен для дублирования содержимого стандартной временной панели в данную, то и появляется, соответственно, только когда активная панель - временная.
Это - серьёзное ограничение…
Попробовал пассивную (спрятанную) панель перенаправить на дисковую папку. F5 совсем перестала работать. Действительно, не собственное представление найденных файлов, а дублирование временной..
Нет, это расширение возможностей. Мой скрипт предназначен для принятия результатов поиска файлов и полностью автономен, но, если файлы уже есть на временной панели, то может взять список файлов и оттуда.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

IgorZ wrote: Fri 29 Nov, 2019 09:07 Мой скрипт предназначен для принятия результатов поиска файлов и полностью автономен
В шапке ограничений не указано.
У меня результаты принимает.
При этом на пассивной панели открывается обычная временная панель.

Открываю на пассивной нужную мне папку, чтобы скопировать туда что-то.
Но по F5 ничего не происходит.
Снова открываю на пассивной панели временную - F5 начинает работать.

Но зачем мне временные панели с двух сторон?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote: Fri 29 Nov, 2019 10:00
IgorZ wrote: Fri 29 Nov, 2019 09:07 Мой скрипт предназначен для принятия результатов поиска файлов и полностью автономен
В шапке ограничений не указано.
Каких? Что файлы с панели не копируются? До этого как-то упускал из виду. Сейчас добавлю, как смогу, так что надо ли дописывать то, что в ближайшее (надеюсь) время придётся обратно стирать? Впрочем, допишу, что функциональность может быть неполной и добавляется по мере поступления заявок пользователей.
John Doe wrote: Fri 29 Nov, 2019 10:00 У меня результаты принимает.
При этом на пассивной панели открывается обычная временная панель.
Пожелание первоначального заказчика. Отключается в настройках.
John Doe wrote: Fri 29 Nov, 2019 10:00 Открываю на пассивной нужную мне папку, чтобы скопировать туда что-то.
Но по F5 ничего не происходит.
Да, как я понял, buniak_a_h, именно это и хочет. Сделаю, раз надо.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

IgorZ wrote: Wed 17 Apr, 2019 12:26 функциональность скрипта может не совпадать с функциональностью стандартной временной панели.
Я пребывал в уверенности что F5/F6 это ну самая базовая функциональность (как для файлменеджера), без которой смысл панели мне не очень понятен.
Что сейчас можно делать с её помощью, кроме как смотреть на файлы?
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

IgorZ, если будете переделывать, ещё пожелание.
Сейчас у Вас временная панель открывается в Alternative full режиме. Хотелось бы, чтоб была возможность показывать на не-FullScreen панели. Чтобы пассивную панель можно было видеть …
Post Reply

Return to “Полезные макросы и скрипты”