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

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

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

Post by IgorZ » Wed 17 Apr, 2019 12:26

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



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



Attachments
TmpPanel.1.0.1.7z
(7.36 KiB) Downloaded 88 times
Last edited by IgorZ on Fri 29 Nov, 2019 10:58, edited 4 times in total.

User avatar
John Doe
Бюрократ
Posts: 12538
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 239 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: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 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 34 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: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 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: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 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:
  • Исправлена ошибка в языковых файлах.
  • Добавлена независимость от расширения файла скрипта. Теперь оно может быть любым. Вообще. Лишь бы из букв.

IgorZ
Posts: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Tue 26 Nov, 2019 07:02

Техническое: может, имеет смысл уже перекинуть тему в "Полезные макросы и скрипты"? Оформление, вроде, в порядке, скрипт устоялся, замечаний от пользователей нет...

buniak_a_h
Posts: 1266
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 89 times
Been thanked: 80 times
Contact:

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

Post by buniak_a_h » Tue 26 Nov, 2019 16:55

Как раз сам начал делать. Для полноты щястия не хватает:
1. Пункт меню должен добавляться не только в МЕНЮ плагинов, но и в МЕНЮ дисков (аналогично стандартной Temporary panel)
2. Самое обидное: я не вижу в меню плагинов «пункта Панель результатов поиска файлов». Хотя после поиска помещение на Вашу панель работает.
3. И ГЛАВНОЕ (на мой взгляд): было бы очень кузяво реализовать копирование с сохранением структуры. Тем более, что в Вашей панели гарантированно можно определить "корневой" каталог (из которого вызывался поиск). Я такое копирование когда-то делал из обычной временной панели, но там пришлось полагаться на корректность действий, т.к. не гарантировалось, что содержимое панели - это исключительно результат поиска: всегда есть возможность добавить файлы на временную панель, в результате чего понятие "корневого" каталога может потерять смысл.

IgorZ
Posts: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Wed 27 Nov, 2019 12:05

Не понял... Вроде, писал ответ, а тут его нет. Отвечаю повторно.
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 чем не устраивает?

buniak_a_h
Posts: 1266
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 89 times
Been thanked: 80 times
Contact:

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

Post by buniak_a_h » Wed 27 Nov, 2019 12:18

IgorZ wrote:
Wed 27 Nov, 2019 12:05
А обычный F5 чем не устраивает?
Не сохраняет структуру файлов. Я делал макрос, копирующий с временной панели с сохранением структуры. Но одно дело - макрос, не привязанный к поиску, и совсем другое - собственный панельный модуль со своей обработкой ProcessPanelInput и возможностью запоминания "стартового" каталога при создании (например, в Analyse при OPM_FIND.

buniak_a_h
Posts: 1266
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 89 times
Been thanked: 80 times
Contact:

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

Post by buniak_a_h » Wed 27 Nov, 2019 12:25

IgorZ wrote:
Wed 27 Nov, 2019 12:05
Поскольку он предназначен для дублирования содержимого стандартной временной панели в данную, то и появляется, соответственно, только когда активная панель - временная.
Это - серьёзное ограничение…
Попробовал пассивную (спрятанную) панель перенаправить на дисковую папку. F5 совсем перестала работать. Действительно, не собственное представление найденных файлов, а дублирование временной..

IgorZ
Posts: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Fri 29 Nov, 2019 09:07

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: 12538
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 239 times

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

Post by John Doe » Fri 29 Nov, 2019 10:00

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

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

Но зачем мне временные панели с двух сторон?

IgorZ
Posts: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Fri 29 Nov, 2019 10:58

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: 12538
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 239 times

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

Post by John Doe » Fri 29 Nov, 2019 11:11

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

buniak_a_h
Posts: 1266
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 89 times
Been thanked: 80 times
Contact:

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

Post by buniak_a_h » Fri 29 Nov, 2019 13:52

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

IgorZ
Posts: 647
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Mon 02 Dec, 2019 05:50

John Doe wrote:
Fri 29 Nov, 2019 11:11
IgorZ wrote:
Wed 17 Apr, 2019 12:26
функциональность скрипта может не совпадать с функциональностью стандартной временной панели.
Я пребывал в уверенности что F5/F6 это ну самая базовая функциональность (как для файлменеджера), без которой смысл панели мне не очень понятен.
Что сейчас можно делать с её помощью, кроме как смотреть на файлы?
Изначально пользователю требовалось именно F3/F4. Самое начало обсуждения, похоже, потерялось, так что ссылку не дам. Но в итоге имеем то, что имеем. F5 добавлю. Насчёт F6F8?) не уверен, надо ли. Но если надо - можно и их попробовать.

Post Reply

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