IgorZ wrote: ↑Wed 17 Apr, 2019 12:26 Описание:
Скрипт является панельным модулем, предназначенным заменять временную панель при выводе результатов поиска файлов. Основные отличия
- форма вывода информации приближёна к формату результатов поиска в диалоге поиска Far.
- функциональность скрипта, в отличие от стандартной временной панели, ограничена реальными файлами.
- вызов путём нажатия на кнопку
[ Панель ]
диалога поиска файлов (обычно с последующим выбором пунктаLuaMacro
из меню). В этом режиме файлы из диалога результатов поиска копируются в данную панель и, опционально, во временную панель Far, которая в этом случае опционально может быть открыта на пассивной панели Far.- вызов путём выбора пункта
Панель результатов поиска файлов
из меню плагинов/дисков Far
или с помощью клавиатурной комбинацииAltShiftF6
(только при активной временной панели). Данный способ работает, если на активной панели Far открыта временная панель (при этом в панель копируются файлы из временной панели, и данная панель открывается в активной панели Far вместо временной), или если данная панель уже открывалась и была закрыта(открывается на активной панели с предыдущим содержимым).
Требуемая версия Far 3.0.5182+.
Замечание: скрипт передаёт список содержимого плагину "Временная панель" через файл. Сборки плагина 107-109 при заполнении Временной панели содержимым из файла для каждого элемента заполняютAPanel.UNCPath
полным именем (включая абсолютный путь) файла-списка. Если это может сломать работу Ваших скриптов, используйте сборку Временной панели 106 от более ранней версии Far, а лучше перейдите на Far 3.0.5641+, содержащий Временную панель сборки 110+ с устранённой вышеописанной особенностью.
- Предрелизные версии можно найти в данной теме ниже.
- Версия 1.0.0 - Первый релиз.
- Версия 1.0.1 - Исправлена ошибка в языковых файлах. Добавлена независимость от расширения файла.
- Версия 1.1.0 - Добавлена стандартная обработка F5/ShiftF5/F6/ShiftF6/F8/ShiftF8/ShiftDel/AltDel/Enter/CtrlPgDn. Добавлена обработка AltShiftF3 (перейти на файл под курсором в пассивной панели), AltF5 (скопировать на пассивную панель с учётом путей), AltF6 (перенести на пассивную панель с учётом путей), AltShiftF5 (скопировать содержимое панели на временную и открыть её на пассивной панели), AltShiftF6 (скопировать содержимое панели на временную и открыть её активной панели вместо данной), F7 (убрать файл с панели, не трогать на диске). При выделении каталога вместо него выделяются все файлы в нём и его подкаталогах. После закрытия список файлов сохраняется и восстанавливается при повторном открытии через меню дисков/плагинов. Добавлен неполноэкранный режим панели. Пункт добавлен в меню дисков. Рефакторинг.
- Версия 1.1.1 - Исправлены две обнаруженные ошибки.
- Версия 1.2.0 - Показываются результаты поиска в архиве.
- Версия 1.2.1 - Настройка использования 7zip. Обработка F3/F4/F5/F6/F7/F8/Del в архивах. Исправление обнаруженных ошибок. Рефакторинг.
- Версия 1.2.2 - Опциональная принудительная настройка колонок для списка результатов поиска. Рефакторинг.
- Версия 1.2.3 - Исправлено чтение файлов с временной панели. Рефакторинг.
В общем, чтоб не быть голословным (а если честно, просто самому захотелось попробовать сделать), я сляпал простейший панельный модулёк.Во вложении он же в архиве.
local F = far.Flags local Title ="TmpPanel" local DirSortMode PanelModule{ Info={ Guid=win.Uuid("BA461384-095B-4D0F-AA87-07365A0E2AF6"); Title=Title; Description="Временная панель, как окно поиска"; Version="0.1"; Author="IgorZ"; }; -- Open=function(OpenFrom) if OpenFrom==F.OPEN_FINDLIST then DirSortMode = band(panel.GetPanelInfo(nil,1).Flags,F.PFLAGS_DIRECTORIESFIRST)~=0 return {} end end; -- SetFindList=function(object,_,Items) object.List = Items return true end; -- GetFindData=function (object) local Items = {win.GetFileInfo(object.List[1].FileName:match("^(.*)\\[^\\]*$"))} Items[1].FileName = far.ConvertPath(Items[1].FileName,F.CPM_FULL) for _,PI in ipairs(object.List) do Items[#Items+1] = { LastWriteTime = PI.LastWriteTime, LastAccessTime = PI.LastAccessTime, CreationTime = PI.CreationTime, ChangeTime = PI.ChangeTime, FileSize = PI.FileSize, AllocationSize = PI.AllocationSize, FileName = PI.FileAttributes:match("d") and PI.FileName or " "..PI.FileName:match("[^\\]*$"), AlternateFileName = PI.AlternateFileName, FileAttributes = PI.FileAttributes, Flags = PI.Flags, NumberOfLinks = PI.NumberOfLinks, CRC32 = PI.CRC32, Description = PI.Description, Owner = PI.Owner, CustomColumnData = PI.CustomColumnData, UserData = PI.UserData, } end return Items end; -- GetOpenPanelInfo=function() return { Flags = F.OPIF_DISABLEFILTER+F.OPIF_DISABLESORTGROUPS+F.OPIF_ADDDOTS+F.OPIF_REALNAMES; PanelTitle = Title; PanelModesArray = {{ ColumnTypes = "D,T,S,A,N"; ColumnWidths = "10,8,0,0,0"; StatusColumnTypes = "N"; StatusColumnWidths = "0"; Flags = F.PMFLAGS_FULLSCREEN; }}; PanelModesNumber = 1; StartPanelMode = "1"; StartSortMode = F.SM_UNSORTED; StartSortOrder = 0; ShortcutData = ""; } end; -- ProcessPanelEvent=function(_,_,Event) if Event==F.FE_GOTFOCUS then panel.SetDirectoriesFirst(nil,1) end return false end; -- ProcessPanelInput=function(object,_,rec) if rec.EventType== F.KEY_EVENT and APanel.CurPos>2 and not object.List[APanel.CurPos-2].FileAttributes:match("d") then if rec.VirtualKeyCode==0x73 and band(rec.ControlKeyState,0x1f)==0 then local fn = object.List[APanel.CurPos-2].FileName editor.Editor(fn) object.List[APanel.CurPos-2] = win.GetFileInfo(fn) panel.UpdatePanel(nil,1,true) return true end end return false end; -- ClosePanel=function() panel.SetDirectoriesFirst(nil,1,DirSortMode) end; }GeSHi © Codebox Plus Extension
Как использовать: кладём в папку scripts, перезапускаем Far (или просто перезагружаем макросы), набираем в нужном каталогеAltF7
, после завершения сканирования жмём[Панель]
, выбираем плагин LuaMacro и получаем результат. В данной версии предусмотрено только редактирование файлов поF4
, это, по сути, демка.
TmpPanel.lua.7z
Панель для результатов поиска файлов
Панель для результатов поиска файлов
IgorZ wrote: ↑Wed 17 Apr, 2019 12:26 Описание:
Скрипт является панельным модулем, предназначенным заменять временную панель при выводе результатов поиска файлов. Основные отличия
- форма вывода информации приближёна к формату результатов поиска в диалоге поиска Far.
- функциональность скрипта, в отличие от стандартной временной панели, ограничена реальными файлами.
Требуемая версия Far 3.0.5182+.
Замечание: скрипт передаёт список содержимого плагину "Временная панель" через файл. Сборки плагина 107-109 при заполнении Временной панели содержимым из файла для каждого элемента заполняютAPanel.UNCPath
полным именем (включая абсолютный путь) файла-списка. Если это может сломать работу Ваших скриптов, используйте сборку Временной панели 106 от более ранней версии Far, а лучше перейдите на Far 3.0.5641+, содержащий Временную панель сборки 110+ с устранённой вышеописанной особенностью.
- Attachments
-
- TmpPanel.1.2.3.7z
- (12.73 KiB) Downloaded 101 times
Last edited by IgorZ on Tue 18 Aug, 2020 07:14, edited 16 times in total.
Панель для результатов поиска файлов
Latest post of the previous page:
у меня такого нету

version 3.0.5687.0 x86
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
skipik, Хоть и не меня спрашивали,
но проверил удаление с панели найденной папки,
(результаты поиска направлены в ТемпПанель Игоря).
Что-то у меня все нормально
но проверил удаление с панели найденной папки,
(результаты поиска направлены в ТемпПанель Игоря).
Что-то у меня все нормально
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
skipik, если дашь remote desktop/team viewer, то смогу тебя продебаггировать,
но это чисто на твое усмотрение.
может IgorZ сам что нибудь придумает когда найдется
но это чисто на твое усмотрение.
может IgorZ сам что нибудь придумает когда найдется
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
citRiks, попробуйте у себя так:
1. Скачать и распаковать: https://www.dropbox.com/s/qa0pkbxp9kf6i ... 9.zip?dl=1
2. Зайти внутрь этой папки
3. Alt+F7 -> *.nfo -> enter
4. Панель
5. Курсор на верхнюю папку, F8, Enter, Enter
Фар у меня - последняя ночная сборка.
1. Скачать и распаковать: https://www.dropbox.com/s/qa0pkbxp9kf6i ... 9.zip?dl=1
2. Зайти внутрь этой папки
3. Alt+F7 -> *.nfo -> enter
4. Панель
5. Курсор на верхнюю папку, F8, Enter, Enter
Фар у меня - последняя ночная сборка.
Панель для результатов поиска файлов
skipik, замечательно буду пробовать
надеюсь не очень срочно?
а то навалилось на сегодня кое-что на весь день похоже что
надеюсь не очень срочно?
а то навалилось на сегодня кое-что на весь день похоже что

А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
skipik,
твой это ТмпПанель модуль такой же как в архиве v1.2.3, без малейших изменений?
Если же нет, то попробуй для начала с ним
твой это ТмпПанель модуль такой же как в архиве v1.2.3, без малейших изменений?
Если же нет, то попробуй для начала с ним
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
citRiks, да, без изменений, ошибка стабильная.
Фар тоже без настроек, просто распакованная ночная сборка.
Фар тоже без настроек, просто распакованная ночная сборка.
Last edited by skipik on Sat 09 Jan, 2021 18:15, edited 1 time in total.
Панель для результатов поиска файлов
skipik,
Круто, кстати начало воспроизводится
надо действительно, чтобы громко упало, удалить именно первую папку.
но на самом деле недоработка есть и не только тут,
проблемы с удалением любой папки, поскольку при не вычищаются файлы принадлежащие этой папке.
Но громко падает на первой, потому что следующий (первый в подсписке) файл с ней становится совсем осиротевший
Если же удалять не первую папку, то осиротевшие файлы ошибочно считаются принадлежащими уже не свой папке,
но громкого падения от этого не случается.
Т.е., проблема не сложная сама по себе,
просто при удалении папки надо еще вычищать файлы ей принадлежащие из списка.
я многу приделать и костыль просто заглушающий падение, но смысла в этом наверное нет,
вам же надо при удалении папки просто перестать видеть ее файлы, которые же естественно тоже удалены.
Но оригинальный авторский модуль этого не предусматривает.
Предусмотреть все же несложно, это банальная очистка из таблицы списка, "table.remove(object.List, j)"
Но это все-таки будет уже некоторый редизайн, и лучше чтобы автор сам его сделал себе,
там могут быть варианты, может автор например предпочтет не удалять записи, а помечать их как удаленные.
Или же предпочтет при удалении папки просто перезагрузит список заново.
Поэтому лучше оставить это автору, где-то раз в месяц он заходит к нам
а там посмотрим
Круто, кстати начало воспроизводится
надо действительно, чтобы громко упало, удалить именно первую папку.
но на самом деле недоработка есть и не только тут,
проблемы с удалением любой папки, поскольку при не вычищаются файлы принадлежащие этой папке.
Но громко падает на первой, потому что следующий (первый в подсписке) файл с ней становится совсем осиротевший
Если же удалять не первую папку, то осиротевшие файлы ошибочно считаются принадлежащими уже не свой папке,
но громкого падения от этого не случается.
Т.е., проблема не сложная сама по себе,
просто при удалении папки надо еще вычищать файлы ей принадлежащие из списка.
я многу приделать и костыль просто заглушающий падение, но смысла в этом наверное нет,
вам же надо при удалении папки просто перестать видеть ее файлы, которые же естественно тоже удалены.
Но оригинальный авторский модуль этого не предусматривает.
Предусмотреть все же несложно, это банальная очистка из таблицы списка, "table.remove(object.List, j)"
Но это все-таки будет уже некоторый редизайн, и лучше чтобы автор сам его сделал себе,
там могут быть варианты, может автор например предпочтет не удалять записи, а помечать их как удаленные.
Или же предпочтет при удалении папки просто перезагрузит список заново.
Поэтому лучше оставить это автору, где-то раз в месяц он заходит к нам

А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Панель для результатов поиска файлов
Поправлю. Возможно, не сразу, а чуть позже - со временем сейчас не очень.
Панель для результатов поиска файлов
IgorZ, хорошо, спасибо. Это даже к лучшему, т.к. я нашёл ещё ошибку или, возможно, так задумано - не знаю.
Воспроизведение:
1. Стою в активной панели в папке C:\Soft\fardev\farplugs
2. Делаю поиск папок с именем _Release-x64 (Alt+F7 | с текущей папки)
3. Найдена одна папка или несколько - без разницы
4. Перехожу в панель (ваш макрос)
5. В панели нажимаю Alt+Shift+F5, т.к. в вашем скрипте нет возможности выделить все папки кнопкой "*" и удалить их разом, только по одной
6. Справа открылась временная панель фара, курсор на "..", нажимаю кнопку "*" и клавишу F8, на запрос о перемещении нажимаю "Переместить"
---
Вот тут вопрос - появляется ещё один запрос, где фар хочет переместить в корзину не мои выделенные папки, а C:\Users\<USERNAME> - это баг или что?
Надеюсь, что понятно описал.
Если кто-то ещё проверит и подтвердит|опровергнет, то будет хорошо. Может я чего-то не понимаю и так задумано, хотя и странно.
Воспроизведение:
1. Стою в активной панели в папке C:\Soft\fardev\farplugs
2. Делаю поиск папок с именем _Release-x64 (Alt+F7 | с текущей папки)
3. Найдена одна папка или несколько - без разницы
4. Перехожу в панель (ваш макрос)
5. В панели нажимаю Alt+Shift+F5, т.к. в вашем скрипте нет возможности выделить все папки кнопкой "*" и удалить их разом, только по одной
6. Справа открылась временная панель фара, курсор на "..", нажимаю кнопку "*" и клавишу F8, на запрос о перемещении нажимаю "Переместить"
---
Вот тут вопрос - появляется ещё один запрос, где фар хочет переместить в корзину не мои выделенные папки, а C:\Users\<USERNAME> - это баг или что?
Надеюсь, что понятно описал.
Если кто-то ещё проверит и подтвердит|опровергнет, то будет хорошо. Может я чего-то не понимаю и так задумано, хотя и странно.
Панель для результатов поиска файлов
Пока было немного времени, поглядел. Ситуация такая:
Скрипт копирует внешний вид панели результатов поиска файлов. То есть, помимо найденных элементов показывает и папки (можно считать, что это заголовки групп, где каждая группа - файлы, найденные в одной папке). Но при этом должны были обрабатываться только найденные элементы. В процессе доработки скрипта алгоритм удаления поделился на два варианта. Если на панели есть файлы в архивах, то идёт обработка "вручную". Если же таких файлов нет, то идёт просто передача обработки Far. Но я не учёл, что во втором случае Far не знает, что папки задуманы как чисто декоративный элемент, и позволяет работать и с ними так же, как и с элементами списка. Чем Вы и пользовались.
Теперь я не знаю, как лучше поступить. Идеологически правильно обеспечить идентичность работы независимо от того, есть ли в найденном файлы в архивах. Проще обеспечить это, просто всегда работая своим алгоритмом, не перекладывая работу на Far. Но тогда Вы уже не сможете удалять папки, в которых лежат найденные файлы. Точнее, для этого надо будет проделать ряд действий вручную: перейти на элемент в этой папке, подняться на уровень вверх, удалить папку под курсором и вернуться в панель скрипта (к примеру, такая последовательность действий:
P. S. Да, чуть не забыл. Вторая, якобы, ошибка - именно задуманное поведение (если я правильно понял описание), в отличие от удаления папок, которое, как я уже описал - багофича.
Скрипт копирует внешний вид панели результатов поиска файлов. То есть, помимо найденных элементов показывает и папки (можно считать, что это заголовки групп, где каждая группа - файлы, найденные в одной папке). Но при этом должны были обрабатываться только найденные элементы. В процессе доработки скрипта алгоритм удаления поделился на два варианта. Если на панели есть файлы в архивах, то идёт обработка "вручную". Если же таких файлов нет, то идёт просто передача обработки Far. Но я не учёл, что во втором случае Far не знает, что папки задуманы как чисто декоративный элемент, и позволяет работать и с ними так же, как и с элементами списка. Чем Вы и пользовались.
Теперь я не знаю, как лучше поступить. Идеологически правильно обеспечить идентичность работы независимо от того, есть ли в найденном файлы в архивах. Проще обеспечить это, просто всегда работая своим алгоритмом, не перекладывая работу на Far. Но тогда Вы уже не сможете удалять папки, в которых лежат найденные файлы. Точнее, для этого надо будет проделать ряд действий вручную: перейти на элемент в этой папке, подняться на уровень вверх, удалить папку под курсором и вернуться в панель скрипта (к примеру, такая последовательность действий:
AltShiftF3 Tab CtrlPgUp F8 Enter (дополнительные действия, если есть подкаталоги или файлы с атрибутом RO) Tab
). Или можно доработать свой алгоритм, чтобы он мог работать и с папками, ранее содержавшимися в списке просто для наглядности и красоты. Но это дольше (насколько - сейчас не скажу, явно надо будет продумывать кучу неочевидных деталей) и несколько нарушает общую идеологию (что может привести к каскаду изменений во всех остальных частях скрипта).P. S. Да, чуть не забыл. Вторая, якобы, ошибка - именно задуманное поведение (если я правильно понял описание), в отличие от удаления папок, которое, как я уже описал - багофича.
Last edited by IgorZ on Fri 22 Jan, 2021 08:00, edited 1 time in total.