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

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

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

Post by IgorZ »

Latest post of the previous page:

John Doe wrote: Wed 24 Apr, 2019 06:56
IgorZ wrote: Wed 24 Apr, 2019 04:54Временная панель ничего не знает про сторонний скрипт, следовательно, ничего не сможет в него передать.
Разве скрипт не может сам получить с панели необходимые данные?
Ну, в принципе может, это я слегка неточно выразился. Временная панель не сможет после открытия автоматически запустить скрипт. То есть, нужно запускать скрипт (причём, существенно переписанный заново) вручную. Налицо существенное ухудшение удобства пользования. Зачем?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Универсальность повысится. Такой режим отображения будет полезен не только для результатов поиска.
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: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

IgorZ wrote: Wed 17 Apr, 2019 12:26 функциональность скрипта может не совпадать с функциональностью стандартной временной панели.
Я пребывал в уверенности что F5/F6 это ну самая базовая функциональность (как для файлменеджера), без которой смысл панели мне не очень понятен.
Что сейчас можно делать с её помощью, кроме как смотреть на файлы?
Post Reply

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