Реализовать дерево директорий панельным модулем на Луа

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Sun 08 Mar, 2020 21:37
buniak_a_h wrote: Sat 07 Mar, 2020 19:41 Я начинал делать дерево в виде панельного модуля. Вот это мне показалось наиболее удобным. Но… Отвлекли на работе.
ну положите куда-нибудь на видное место если там есть хоть что-то полезное, может кто-нибудь продолжит
Спасибо citRiks-у за наводку на tree.com - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.



Чего может не хватать:
  • обновления дерева (по таймеру, например);
  • вывода характеристик (суммарный размер поддерева, самого нового файла, количество файлов).
  • Что ещё - не знаю.
Если кому-нить это интересно, перечисленные недоделки я по возможности доделаю. Также принимаются предложения, чего может ещё не хватать для нормальной работы. Но так-то вроде вполне удобненько получилось … :-)
Опять же если будут добровольцы - локализацию и перевод хелпа были бы полезны. Если скрипт кому-нить покажется полезным …

Версия 2.6.5
  1. Исправлена ошибка, возникавшая при перестроении всего дерева по клавише Ctrl+R (обновить). Кроме того, по этой клавише возможно обновление кэша.
  2. При выходе из дерева состояние другой панели теперь восстанавливается только в случае, если включено немедленное открытие текущего каталога на противоположной панели.
  3. Добавлен минимальный контроль актуальности данных о папке в кэше: если в корневой папке имеются подпапки, а дерево формируется пустым, то выводится сообщение о критической неактуальности кэша и предлагается его перестроить. В случае отказа только перестраивается в памяти ветка корневого каталога дерева.
  4. При обновлении дерева по Ctrl+R также предлагается обновить кэш диска.
  5. Экспериментально!] При смене каталога на другой (не_древесной) панели (если она активна) указатель в дереве переносится на соответствующий узел дерева; при этом он помечается символом «►».
TreePanel_2_6_5.7z
(30.63 KiB) Downloaded 14 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Tue 17 Nov, 2020 18:12, edited 35 times in total.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

Latest post of the previous page:

DV, извините, не заметил слов "внутри архива". Да, я эту настройку для случая внутри архива специально когда-то не учитывал (переход во временной папке, которая к тому же может быть уже удалена, смысла не имел). Теперь это можно вернуть. Сделаю (заодно и параметры папок - времена созданий/модификаций).
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

Вышла версия 2.2.1. Что нового:
1. Отменён запрет на немедленный переход на каталог внутри архива.
2. Добавлена возможность показа времени изменения каталога.
3. Предусмотрены несколько режимов показа панели дерева. В некоторых режимах добавлен столбец
"Время/дата изменения каталога". В некоторых режимах время изменения каталога выводится в
формате ЧЧ:мм; в других - в формате ЧЧ:мм:сс (с секундами). В статусной строке также предусмотрен
показ времени модификации.
4. Предусмотрена защита от переключения режима панели дерева в непредусмотренный вид (кроме
пользовательских режимов). Также на время показа дерева выключается настройка «Каталоги
вперёд» («Show directories first»). Сделано для показа дерева папок внутри архива (чтобы
имя архива было выше дерева папок).
5. Глубокий рефакторинг.

При редактировании первой записи темы произошёл сбой, в результате которого прикреплённые ранее файлы пропали. Отсюда вывод: сохраните свои файлы перед скачиванием версии 2.2.1 .
Я, вроде, проверил, но всё же… Если кто будет юзать и найдёт багу - пишите сразу. А также пожелания…
Last edited by buniak_a_h on Sun 19 Jul, 2020 00:17, edited 1 time in total.
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

Чудесно, спасибо!
А почему Ф3 не работает в деревьях архивов?
В хелпе написано что и не должно работать, но почему бы не?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Sun 19 Jul, 2020 18:17 А почему Ф3 не работает в деревьях архивов?
ФЗ - это F3?
1. А в дисковых деревьях (не архивов) работает? Я, вроде, не делал…
2. А что предлагаете делать? Размер и количество файлов в каталоге? Если да - сейчас этим занимаюсь. Но с размером есть проблемы: две хардлинки на один файл не различимы; в результате суммарный размер некорректно вычисляется. Впрочем, пока я на это забил. Тем более, что для архивов это вообще не актуально.
P/S. Следующий шаг после количества и суммарного объема вложенных файлов у меня запланировано (наконец) кэширование дисковых каталогов, если заказано дерево от корня. Ну или построение полного дерева диска в фоне по клавише/кнопке в настройках. Тут тоже есть вопрос: обновлять ли подпапки при чтении из кэша, если оказывается, что они устарели или делать по доп. запросу или по времени (например, раз в неделю, по настройке).
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks!
Я узнал (совершенно неожиданно! ;-) ), что делает F3. Это - просмотр текущей папки на пассивной панели. Давно я не занимался этой штукой…
1. Т.к. появилась возможность подсчитывать количество и объём вложенных файлов, а по стандарту этот функционал закреплён за клавишей F3, то я, скорее всего, перенесу просмотр на другую кнопку. Кстати, как думаете, F4 подойдёт для этой цели? F7 и F8 не хотелось бы: может быть, сделаю создание и удаление подкаталога (не для архива).
2. Пока (в версии 2.2.2) я просто сделал эту фишку для архивов. Подкорректирую и выложу (уже не прям-щас).
User avatar
HaRT
Moderator
Posts: 9601
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 114 times
Been thanked: 233 times

Реализовать дерево директорий панельным модулем на Луа

Post by HaRT »

buniak_a_h wrote: Mon 20 Jul, 2020 03:45 перенесу просмотр на другую кнопку. Кстати, как думаете, F4 подойдёт для этой цели?
Не лучше ли AltShiftF3 по аналогии с Временной панелью? Или я неправильно понял, что за «просмотр текущей папки на пассивной панели»?
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

HaRT, спасибо, поняли правильно и это - правильно. Я не знал про AltShifrF3. И, как оказалось, в скрипте "Редактор плагинов" это сочетание задействовано (вот же засада!). Собирался делать CtrlShiftF3 :)
Last edited by buniak_a_h on Mon 20 Jul, 2020 09:58, edited 1 time in total.
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 times
Been thanked: 15 times

Реализовать дерево директорий панельным модулем на Луа

Post by DV »

Всё забываю попросить: можете в "шапку" этой темы добавить "инструкцию для маленьких", как настроить дополнительный скрипт BAX_QSearch.lua для возможности поиска в дереве по нажатию Alt+буквы?
Я этот скрипт уже и в Macros\modules помещал, и в Macros\scripts - и ничего у меня не получается...
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

DV wrote: Mon 20 Jul, 2020 10:42 Всё забываю попросить: можете в "шапку" этой темы добавить "инструкцию для маленьких", как настроить дополнительный скрипт BAX_QSearch.lua для возможности поиска в дереве по нажатию Alt+буквы?
Я этот скрипт уже и в Macros\modules помещал, и в Macros\scripts - и ничего у меня не получается...
Может, я чего-то не понимаю…
1. Ставить как любой макрос в любой подкаталог Macros\scripts
2. Если Вы хотите, чтоб поиск в дереве работал по CtrlF, и при этом в обычных панелях он не вызывался вообще, удалите для макро с id=53287666-DEF2-4EF3-9DBF-9F82FB2E62B1 строку key=…. В противном случае он (макрос BAX_QSearch.lua) заменит стандартный быстрый Alt-поиск как в панелях, так и в дереве. Т.е. вызов поиска - по нажатию Alt (возможно, с символом).
3. Фильтрация вызывается по CtrlShiftF (хотя на самом деле это не обязательно: можно вызвать поиск по Alt или CtrlF, а затем переключиться в режим фильтрации). Этот хоткей конфликтует с макросом lfsearcfh и становится недоступен. Ну, или надо поменять его в дереве, или пользоваться Att-поиском, а затем переключаться в режим фильтрации.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

DV, P/S.
1. Макросы после изменения надо, есессно, перезагрузить…
2. Если у Вас не работает, я вставлю отладочный вывод (в OutputDebugString). Сможете получить этот вывод через нечто типа DbgView или DebugView++ ?
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 times
Been thanked: 15 times

Реализовать дерево директорий панельным модулем на Луа

Post by DV »

buniak_a_h wrote: Mon 20 Jul, 2020 13:081. Ставить как любой макрос в любой подкаталог Macros\scripts
2. Если Вы хотите, чтоб поиск в дереве работал по CtrlF, и при этом в обычных панелях он не вызывался вообще, удалите для макро с id=53287666-DEF2-4EF3-9DBF-9F82FB2E62B1 строку key=…. В противном случае он (макрос BAX_QSearch.lua) заменит стандартный быстрый Alt-поиск как в панелях, так и в дереве. Т.е. вызов поиска - по нажатию Alt (возможно, с символом).
3. Фильтрация вызывается по CtrlShiftF (хотя на самом деле это не обязательно: можно вызвать поиск по Alt или CtrlF, а затем переключиться в режим фильтрации). Этот хоткей конфликтует с макросом lfsearcfh и становится недоступен. Ну, или надо поменять его в дереве, или пользоваться Att-поиском, а затем переключаться в режим фильтрации.
Вот этой инструкции мне и не хватало :) Спасибо, теперь работает!
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

buniak_a_h wrote: Sun 19 Jul, 2020 19:35 Следующий шаг после количества и суммарного объема вложенных файлов у меня запланировано (наконец) кэширование дисковых каталогов, если заказано дерево от корня
Да, это была бы сильная функциональность.
Как мне кажется, если уж считать количества и обьемы, то будет разумно сохранять в кеше оное,
и еще туда же в кэш раз заодно время изменения, другие времена.
Я бы правда предпочел бы называть и относится как этот кэш базой данных.
Где и как планируете хранить кэш/базу?
Логично было бы в CSV, наверное, или в sqlite.
ну или какой-нибудь кастомный формат тоже впрочем Ок был бы.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Mon 20 Jul, 2020 14:39
buniak_a_h wrote: Sun 19 Jul, 2020 19:35 Следующий шаг после количества и суммарного объема вложенных файлов у меня запланировано (наконец) кэширование дисковых каталогов, если заказано дерево от корня
Да, это была бы сильная функциональность.
Как мне кажется, если уж считать количества и обьемы, то будет разумно сохранять в кеше оное,
Ну, есессо.
citRiks wrote: Mon 20 Jul, 2020 14:39 и еще туда же в кэш раз заодно время изменения, другие времена.
На самом деле сейчас создаётся структура, отражающая вложенность папок. Каждой папке там соответствует таблица аналогичная той, что получается по win.GetFileInfo (точнее, её формирует far.RecursiveSearch). Именно в эти "простейшие" таблицы я и собираюсь писать количественные характеристики. Ну, плюс нечто типа индекса для ускорения доступа к произвольной папке.
citRiks wrote: Mon 20 Jul, 2020 14:39 Я бы правда предпочел бы называть и относится как этот кэш базой данных.
Где и как планируете хранить кэш/базу?
citRiks wrote: Mon 20 Jul, 2020 14:39 Логично было бы в CSV, наверное, или в sqlite.
Вы, кажется (или уже не помню кто) в этой теме писал мне, где хранится кэш стандартного дерева в случае невозможности записи в корень диска. Это где-то то ли в %FARLOCALPROFILE%, то ли в %FARPROFILE%. Вот там же файл, в котором хранить таблицу в виде, возвращаемом mf.serialize
citRiks wrote: Mon 20 Jul, 2020 14:39 ну или какой-нибудь кастомный формат тоже впрочем Ок был бы.
Про mf.serialize я писал…
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

buniak_a_h,
mf.serialize() хорош лишь тем что создает Луа код, и ничем больше.
Поэтому и неэффективный в плане занимаемого места так и скорости чтения.
И так как сценарий кэша/базы актуален как раз на больших папках,
то думаю что не очень подходит.
думаю что в идеале это CSV - потому что читабельность,
или json потому что компактность и относительная читабельность тоже.
или же XML такого рода:

Code: Select all

<d n="folder1">
	<f n="file1.ext" />
	<f n="file2.ext" />
	<d n="folder1-2" />
</d>
<d n="folder2">
	<f n="file3.ext" />
</d>
А может лучше кастомный формат типа:

Code: Select all

folder1\
2020-07-07;<other attribs>
folder1\folder1-2\
2020-07-08;<other attribs>
folder2\
2020-07-09;<other attribs>
Если xml или json, то уже есть готовыe библиотеки эффективной работы с большими файлами
если sqlite, то по идее эффективно, хоть и не читабельно человеком без проги/плагина для чтения,
нo может и фик с ним в угоду производительности
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

buniak_a_h,
Но в целом соглашусь, что проще и можно начать с читалки-сохранялки mf.serialize(), посмотреть как пойдет.
если что, то можно потом поменять читалку, - не принцииально ни разу
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Mon 20 Jul, 2020 17:38 CSV - потому что читабельность
citRiks, а что такое CSV?
citRiks wrote: Mon 20 Jul, 2020 17:38 json потому что компактность и относительная читабельность тоже
Я не знаю json, и нет никакого желания изучать.
citRiks wrote: Mon 20 Jul, 2020 17:38 если sqlite, то по идее эффективно, хоть и не читабельно
Если сохранять в БД SQLite при помощи mf.msave, то таблица сохраняется в виде строки, возвращаемой mf.serialize. Т.е. разница только в том, сохранять в базу или в виде отдельного файла. При этом с файлом легче работать (проверять, обновлять).
Post Reply

Return to “Обсуждение макросов”