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

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

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

Post by IgorZ »

IgorZ wrote:
Wed 17 Apr, 2019 12:26
Описание:
Скрипт является панельным модулем, предназначенным заменять временную панель при выводе результатов поиска файлов. Основные отличия
  • форма вывода информации приближёна к формату результатов поиска в диалоге поиска Far.
  • функциональность скрипта, в отличие от стандартной временной панели, ограничена реальными файлами.


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



Attachments
TmpPanel.1.2.3.7z
(12.73 KiB) Downloaded 62 times
Last edited by IgorZ on Wed 04 Mar, 2020 05:29, edited 15 times in total.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

не обновляются атрибуты после редактирования найденных файлов

Post by IgorZ »

Переделал.
  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.4";
  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) object.List = Items return true end;
  21. --
  22.   GetFindData=function (object)
  23. local Items = {win.GetFileInfo(object.List[1].FileName:match("^(.*)\\[^\\]*$"))}
  24. Items[1].FileName = far.ConvertPath(Items[1].FileName,F.CPM_FULL)
  25. Items[1].CustomColumnData = {Items[1].FileName}
  26. for _,PI in ipairs(object.List) do
  27.   local FT = win.FileTimeToSystemTime(win.FileTimeToLocalFileTime(PI.LastWriteTime))
  28.   Items[#Items+1] = {
  29.     LastWriteTime = PI.LastWriteTime,
  30.     LastAccessTime = PI.LastAccessTime,
  31.     CreationTime = PI.CreationTime,
  32.     ChangeTime = PI.ChangeTime,
  33.     FileSize = PI.FileSize,
  34.     AllocationSize = PI.AllocationSize,
  35.     FileName = PI.FileName,
  36.     AlternateFileName = PI.AlternateFileName,
  37.     FileAttributes = PI.FileAttributes,
  38.     Flags = PI.Flags,
  39.     NumberOfLinks = PI.NumberOfLinks,
  40.     CRC32 = PI.CRC32,
  41.     Description = PI.Description,
  42.     Owner = PI.Owner,
  43.     CustomColumnData = {PI.FileAttributes:match("d") and PI.FileName or ([[%7d.%02d.%4d%3d:%02d:%02d│%13d│%-6s│%s]]):
  44.       format(FT.wDay,FT.wMonth,FT.wYear,FT.wHour,FT.wMinute,FT.wSecond,PI.FileSize,PI.FileAttributes:upper(),PI.FileName:match("[^\\]*$"))},
  45.     UserData = PI.UserData,
  46.   }
  47. end
  48. return Items
  49.   end;
  50. --
  51.   GetOpenPanelInfo=function()
  52. return {
  53.   Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES;
  54.   PanelTitle = Title;
  55.   PanelModesArray = {{
  56.     ColumnTypes = "C0",
  57.     ColumnWidths = "0",
  58.     ColumnTitles = {"Found files:"},
  59.     StatusColumnTypes = "N",
  60.     StatusColumnWidths = "0",
  61.     Flags = F.PMFLAGS_FULLSCREEN,
  62.   }};
  63.   PanelModesNumber = 1;
  64.   StartPanelMode = "1";
  65.   StartSortMode = F.SM_UNSORTED;
  66.   StartSortOrder = 0;
  67.   ShortcutData = "";
  68. }
  69.   end;
  70. --
  71.   ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end;
  72. --
  73.   ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end;
  74. }
Во вложении он же в архиве.
Изменения:
  • изменён внешний вид, чтобы ещё больше приблизить его к списку поиска;
  • благодаря переработке внутренней логики теперь стандартно обрабатываются любые действия Far для панели;
  • в качестве побочного эффекта в панели вместо ".." отображается пустая строка (в статусной строке по-прежнему "..").
P. S.: Стоит ли пробовать допиливать, вручную заменяя пустую строку на ".."?
Attachments
TmpPanel.lua.0.4.7z
(1.22 KiB) Downloaded 44 times
Last edited by IgorZ on Mon 22 Apr, 2019 12:27, edited 1 time in total.

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

не обновляются атрибуты после редактирования найденных файлов

Post by MasterLogic »

Выводится только одна, первая, строка с именем папки и далее найденные файлы из всех подпапок. А ведь в окне результаты поиска (тому что хотим подражать) выводится каждая строка с путем перед найденными в этой папке файлами (даже если сами папки не ищем).
Пробовал на чистом FAR x86 3.0.5375 и 3.0.5387.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

не обновляются атрибуты после редактирования найденных файлов

Post by IgorZ »

MasterLogic wrote:
Mon 22 Apr, 2019 20:38
Выводится только одна, первая, строка с именем папки и далее найденные файлы из всех подпапок. А ведь в окне результаты поиска (тому что хотим подражать) выводится каждая строка с путем перед найденными в этой папке файлами (даже если сами папки не ищем).
Пробовал на чистом FAR x86 3.0.5375 и 3.0.5387.
Попробовал на чистом FAR x86 3.0.5387 (скачал с сайта, распаковал, профиль нулевой, . Всё нормально (результат ниже под спойлером). Единственное - первый, корневой, каталог неверно сформировался. Это посмотрю.
Last edited by IgorZ on Tue 23 Apr, 2019 06:40, edited 1 time in total.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

не обновляются атрибуты после редактирования найденных файлов

Post by Shmuel »

MasterLogic, чтобы выводились папки, надо в диалоге AltF7 установить [x] Искать папки.

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

не обновляются атрибуты после редактирования найденных файлов

Post by MasterLogic »

IgorZ, так а запрос какой? Если *.* и стоит галка Искать папки то да, все ок. Но если в той же папке искать к примеру *.txt - строка только одна.
Shmuel, и от этой галки, в таком случае, ничего не меняется.
Но в окне поиска (что и хотим сымитировать) папки выводятся всегда, в независимости от этой галки.
Вообщем у меня выходит так:
-ищем *.*, галка не стоит - папка только первая;
-ищем *.*, галка стоит - все ок как и надо;
-ищем *.txt, галка стоит или не стоит - папка только первая.
И везде в первой строке последний каталог дважды.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

не обновляются атрибуты после редактирования найденных файлов

Post by IgorZ »

Оказывается, Far передаёт список найденных файлов панели довольно неожиданно (по крайней мере, для меня), хоть и логично. Если искать с текущей папки, то текущую папку он не включает в список. И это я правил сразу (хоть и некорректно, как оказалось). Если же искать в отмеченных папках, то не включаются все отмеченные (корневые, так сказать). То же относится и к поиску по путям. В общем, вроде, новая версия должна работать корректно с любыми вариантами настроек.
  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.5";
  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) object.List = Items return true end;
  21. --
  22.   GetFindData=function (object)
  23. local Items,ldir = {},":"
  24. for _,PI in ipairs(object.List) do
  25.   local FT = win.FileTimeToSystemTime(win.FileTimeToLocalFileTime(PI.LastWriteTime))
  26.   local cdir = PI.FileAttributes:match("d") and PI.FileName or PI.FileName:match("^(.*)\\[^\\]*$")
  27.   if (not PI.FileAttributes:match("d")) and (cdir~=ldir) then
  28.     Items[#Items+1] = win.GetFileInfo(cdir)
  29.     Items[#Items].FileName,Items[#Items].CustomColumnData = cdir,{cdir}
  30.   end
  31.   ldir = cdir
  32.   Items[#Items+1] = {
  33.     LastWriteTime = PI.LastWriteTime,
  34.     LastAccessTime = PI.LastAccessTime,
  35.     CreationTime = PI.CreationTime,
  36.     ChangeTime = PI.ChangeTime,
  37.     FileSize = PI.FileSize,
  38.     AllocationSize = PI.AllocationSize,
  39.     FileName = PI.FileName,
  40.     AlternateFileName = PI.AlternateFileName,
  41.     FileAttributes = PI.FileAttributes,
  42.     Flags = PI.Flags,
  43.     NumberOfLinks = PI.NumberOfLinks,
  44.     CRC32 = PI.CRC32,
  45.     Description = PI.Description,
  46.     Owner = PI.Owner,
  47.     CustomColumnData = {PI.FileAttributes:match("d") and PI.FileName or ([[%7d.%02d.%4d%3d:%02d:%02d│%13d│%-6s│%s]]):
  48.       format(FT.wDay,FT.wMonth,FT.wYear,FT.wHour,FT.wMinute,FT.wSecond,PI.FileSize,PI.FileAttributes:upper(),PI.FileName:match("[^\\]*$"))},
  49.     UserData = PI.UserData,
  50.   }
  51. end
  52. return Items
  53.   end;
  54. --
  55.   GetOpenPanelInfo=function()
  56. return {
  57.   Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES;
  58.   PanelTitle = Title;
  59.   PanelModesArray = {{
  60.     ColumnTypes = "C0",
  61.     ColumnWidths = "0",
  62.     ColumnTitles = {"Found files:"},
  63.     StatusColumnTypes = "N",
  64.     StatusColumnWidths = "0",
  65.     Flags = F.PMFLAGS_FULLSCREEN,
  66.   }};
  67.   PanelModesNumber = 1;
  68.   StartPanelMode = "1";
  69.   StartSortMode = F.SM_UNSORTED;
  70.   StartSortOrder = 0;
  71.   ShortcutData = "";
  72. }
  73.   end;
  74. --
  75.   ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end;
  76. --
  77.   ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end;
  78. }
Во вложении он же в архиве.
Изменения:
  • переделана обработка каталогов.
Attachments
TmpPanel.0.5.7z
(1.26 KiB) Downloaded 32 times
Last edited by IgorZ on Tue 23 Apr, 2019 09:32, edited 1 time in total.

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

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

Post by MasterLogic »

Да, сейчас список строится правильно. Спасибо.
Желательно еще чтобы при нажатии кнопки Панель в окне результатов не только строить этот список, но и передавать параллельно его во Временную панель (как из коробки), чтобы он не потерялся и можно было копировать и т.д.
Это не сложно доделать?

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

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

Post by IgorZ »

MasterLogic wrote:
Tue 23 Apr, 2019 10:30
Да, сейчас список строится правильно. Спасибо.
Желательно еще чтобы при нажатии кнопки Панель в окне результатов не только строить этот список, но и передавать параллельно его во Временную панель (как из коробки), чтобы он не потерялся и можно было копировать и т.д.
Это не сложно доделать?
Не знаю. Посмотрю, но не гарантирую.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

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

Post by Shmuel »

MasterLogic wrote:
Tue 23 Apr, 2019 10:30
передавать параллельно его во Временную панель (как из коробки), чтобы он не потерялся и можно было копировать и т.д.
Можно создать файл-список, перейти на вторую панель и передать имя этого файла с комстроки: tmp:<имя файла>.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

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

Post by IgorZ »

Shmuel wrote:
Tue 23 Apr, 2019 11:18
MasterLogic wrote:
Tue 23 Apr, 2019 10:30
передавать параллельно его во Временную панель (как из коробки), чтобы он не потерялся и можно было копировать и т.д.
Можно создать файл-список, перейти на вторую панель и передать имя этого файла с комстроки: tmp:<имя файла>.
Собственно, уже.
  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.6";
  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) object.List = Items return true end;
  21. --
  22.   GetFindData=function (object)
  23. local Items,ldir = {},":"
  24. for _,PI in ipairs(object.List) do
  25.   local FT = win.FileTimeToSystemTime(win.FileTimeToLocalFileTime(PI.LastWriteTime))
  26.   local cdir = PI.FileAttributes:match("d") and PI.FileName or PI.FileName:match("^(.*)\\[^\\]*$")
  27.   if (not PI.FileAttributes:match("d")) and (cdir~=ldir) then
  28.     Items[#Items+1] = win.GetFileInfo(cdir)
  29.     Items[#Items].FileName,Items[#Items].CustomColumnData = cdir,{cdir}
  30.   end
  31.   ldir = cdir
  32.   Items[#Items+1] = {
  33.     LastWriteTime = PI.LastWriteTime,
  34.     LastAccessTime = PI.LastAccessTime,
  35.     CreationTime = PI.CreationTime,
  36.     ChangeTime = PI.ChangeTime,
  37.     FileSize = PI.FileSize,
  38.     AllocationSize = PI.AllocationSize,
  39.     FileName = PI.FileName,
  40.     AlternateFileName = PI.AlternateFileName,
  41.     FileAttributes = PI.FileAttributes,
  42.     Flags = PI.Flags,
  43.     NumberOfLinks = PI.NumberOfLinks,
  44.     CRC32 = PI.CRC32,
  45.     Description = PI.Description,
  46.     Owner = PI.Owner,
  47.     CustomColumnData = {PI.FileAttributes:match("d") and PI.FileName or ([[%7d.%02d.%4d%3d:%02d:%02d│%13d│%-6s│%s]]):
  48.       format(FT.wDay,FT.wMonth,FT.wYear,FT.wHour,FT.wMinute,FT.wSecond,PI.FileSize,PI.FileAttributes:upper(),PI.FileName:match("[^\\]*$"))},
  49.     UserData = PI.UserData,
  50.   }
  51. end
  52. local TPGuid,fn = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C",far.MkTemp()
  53. local h = io.open(fn,"w")
  54. for _,nm in ipairs(Items) do
  55.   h:write(nm.FileName.."\n")
  56. end
  57. h:close()
  58. far.MacroPost([[Keys("Tab") Plugin.Command("]]..TPGuid..[["," +replace -menu ]]..fn:gsub("\\","\\\\")..[[") Keys("Enter Tab")]])
  59. return Items
  60.   end;
  61. --
  62.   GetOpenPanelInfo=function()
  63. return {
  64.   Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES;
  65.   PanelTitle = Title;
  66.   PanelModesArray = {{
  67.     ColumnTypes = "C0",
  68.     ColumnWidths = "0",
  69.     ColumnTitles = {"Found files:"},
  70.     StatusColumnTypes = "N",
  71.     StatusColumnWidths = "0",
  72.     Flags = F.PMFLAGS_FULLSCREEN,
  73.   }};
  74.   PanelModesNumber = 1;
  75.   StartPanelMode = "1";
  76.   StartSortMode = F.SM_UNSORTED;
  77.   StartSortOrder = 0;
  78.   ShortcutData = "";
  79. }
  80.   end;
  81. --
  82.   ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end;
  83. --
  84.   ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end;
  85. }
Во вложении он же в архиве.
Изменения:
  • На пассивной панели открывается временная панель, куда копируется список файлов.
P. S. Похоже, так скоро дойдёт до релиза. И там уже придётся ещё и настройки влеплять. А то кому-то понравится последнее изменение, а кому-то помешает.
Attachments
TmpPanel.0.6.7z
(1.44 KiB) Downloaded 38 times
Last edited by IgorZ on Tue 23 Apr, 2019 12:30, edited 1 time in total.

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

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

Post by MasterLogic »

IgorZ wrote:
Tue 23 Apr, 2019 12:28
Собственно, уже.
В таком варианте на времен.панель попадают и папки, которые результатом поиска не являются (те что в основном открывающемся списке были для удобства). А передать данные во времен.панель никак кроме как в лоб, через внеш.файл нельзя, так как делалось фаром по дефолту?
Если нет, тогда возможно проще чтобы фар сам обрабатывал кнопку Панель, т.е. передал туда результаты поиска, а макрос вместо времен.панели выводил этот свой список.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

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

Post by IgorZ »

MasterLogic wrote:
Tue 23 Apr, 2019 14:04
IgorZ wrote:
Tue 23 Apr, 2019 12:28
Собственно, уже.
В таком варианте на времен.панель попадают и папки, которые результатом поиска не являются (те что в основном открывающемся списке были для удобства). А передать данные во времен.панель никак кроме как в лоб, через внеш.файл нельзя, так как делалось фаром по дефолту?
Образно говоря, Вам шашечки, или ехать? Данные передаются, а как это делается - какая Вам разница?
Папки могу не передавать - это несложно сделать.
MasterLogic wrote:
Tue 23 Apr, 2019 14:04
Если нет, тогда возможно проще чтобы фар сам обрабатывал кнопку Панель, т.е. передал туда результаты поиска, а макрос вместо времен.панели выводил этот свой список.
А это уже никак. Временная панель ничего не знает про сторонний скрипт, следовательно, ничего не сможет в него передать.
И ещё. Макрос - это то, что запускается по нажатию комбинации клавиш. То, что я сваял, является панельным модулем.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

IgorZ wrote:
Wed 24 Apr, 2019 04:54
Временная панель ничего не знает про сторонний скрипт, следовательно, ничего не сможет в него передать.
Разве скрипт не может сам получить с панели необходимые данные?

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 62 times

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

Post by IgorZ »

John Doe wrote:
Wed 24 Apr, 2019 06:56
IgorZ wrote:
Wed 24 Apr, 2019 04:54
Временная панель ничего не знает про сторонний скрипт, следовательно, ничего не сможет в него передать.
Разве скрипт не может сам получить с панели необходимые данные?
Ну, в принципе может, это я слегка неточно выразился. Временная панель не сможет после открытия автоматически запустить скрипт. То есть, нужно запускать скрипт (причём, существенно переписанный заново) вручную. Налицо существенное ухудшение удобства пользования. Зачем?

Post Reply

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