Скрипт является панельным модулем, предназначенным заменять временную панель при выводе результатов поиска файлов. Основные отличия:
- форма вывода информации приближёна к формату результатов поиска в диалоге поиска 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 - Исправлено чтение файлов с временной панели. Рефакторинг.
- Версия 1.3.0 - Работа с каталогами, если установлен флаг "Искать папки". Рефакторинг.
- Версия 1.3.1 - Исправлена ошибка с сохранением настроек.
- Версия 1.3.2 - Исправлена ошибка с перезаписью целевых файлов без запроса.
- Версия 1.3.3 - Переделаны копирование/перенос и удаление.
- Версия 1.3.4 - Обновление пассивной панели после операций копирования/переноса. Исправлена опечатка в английском языковом файле. Дополнена справка. Небольшой рефакторинг.
- Версия 1.3.5 - Поправлена ошибка со снятием выделения, если имя файла содержит ";". Небольшой рефакторинг.
В общем, чтоб не быть голословным (а если честно, просто самому захотелось попробовать сделать), я сляпал простейший панельный модулёк.
- 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