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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 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.6.
  1. Исправлен «снос» имени текущей папки в командную строку: теперь оно заменяет отмеченную часть командной строки или (если ничего не отмечено) вставляется в текущую позицию строки.
  2. Исправлена мелкая неточность: вопрос о пересоздании кэша задаётся только в том случае, если задан период актуализации кэша
TreePanel_2_6_6.7z
(31.08 KiB) Downloaded 144 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Mon 14 Dec, 2020 07:40, edited 37 times in total.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

citRiks wrote: Mon 30 Mar, 2020 18:24
buniak_a_h wrote: Mon 30 Mar, 2020 17:42 Вопрос: если кто знает, где Far сохраняет кэш, если в корне его нету?
я не помню точно где, может быть в профайле
Для диска D: файл сохраняется точно в корне D:\ (у меня!). И даже для SUBST-дисков - в корне.А вот где для диска C:\ - не могу найти! Поиск по всем дискам ничего не дал. Вряд ли в базе SQLite - уж больно объект большой. В корне хранить мне не очень хочется. Если кто-нить из разработчиков ответит на вопрос, сделаю аналогично. Ну или буду сохранять в %FarProfile%\Tree. Что не очень хочется… Диски уходят и приходят, а %FarProfile% остаётся …
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 12:53 buniak_a_h,
ВСЕ строковые сравнения делать не чувствительными к регистру.
вот например тут:
[сode]
local PathName,FarLang,HlpLang = (...):match("(.*)%.lua"),win.GetEnv("FARLANG"):sub(1,3),Far.GetConfig("Language.Help"):sub(1,3)
[/сode]
так как если расширение скрипта будет .Lua, или .LUA, то будут ненужные сюрпризы
Согласен, но дурацкая библиотека string не предполагает модификаторов /…/i (как regex). Т.е. в таких случаях надо каждый (!!!) символ заменять на [aA], это - кошмар! Вариант - переводить аргумент в lower() перед сравнением, но тогда и результат сравнения будет иной.
Конкретно в этом месте можно заменить string.match на mf.fsplit. Спасибо за указание
В случаях сравнения путей к папкам дерева нет смысла: там всегда обеспечено точное совпадение имён файлов (с учётом регистра). Это, кстати, может затруднить использование кэша.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Mon 30 Mar, 2020 19:39 Согласен, но дурацкая библиотека string не предполагает модификаторов /…/i (как regex). Т.е. в таких случаях надо каждый (!!!) символ заменять на [aA], это - кошмар! Вариант - переводить аргумент в lower() перед сравнением, но тогда и результат сравнения будет иной.
не совсем понял в чем проблема делать сравниваемым строкам :lower()?
почему будет иной?
и конкретно тут тоже замечательно сработает:

Code: Select all

local PathName,FarLang,HlpLang = (...):lower():match("(.*)%.lua"),win.GetEnv("FARLANG"):sub(1,3),Far.GetConfig("Language.Help"):sub(1,3)
buniak_a_h wrote: Mon 30 Mar, 2020 19:02 Если кто-нить из разработчиков ответит
я не знаю что считают разрабочики про это :)
но дерево когда не может записываыться в корень хранится в этом директории:
%LocalProfile%\tree3.cache\
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Mon 30 Mar, 2020 19:39 В случаях сравнения путей к папкам дерева нет смысла:
там всегда обеспечено точное совпадение имён файлов (с учётом регистра).
Это, кстати, может затруднить использование кэша.
я думаю что решаемо, и решаемо несколькими разными способами, т.е. не затруднит, разберемся :)
дa, в кэше пусть будут с реальными именами, пусть он будет, а далее - так или иначе решаемо
Last edited by citRiks on Mon 30 Mar, 2020 20:06, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h,
на всякий случай поправляю себя:
%FARLOCALPROFILE%\tree3.cache\
для сидюка например там создался файл с именем:
VS2015_PRO_ENU.BE34C841.CDFS.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 19:53 не совсем понял в чем проблема делать сравниваемым строкам :lower()?
почему будет иной?
1. Тупо поменять образец patt на patt:lower() нельзя: паттерн %A означает "не-буква", а %a - наоборот буква. И я это использую (%S - любой непробельный символ)
2. Можно, конечно, паттерны задавать ручками (строки всегда указывать в нижнем регистре), а перед проверкой :match переводить искомую строку в lower(), но тогда и найденное соответствие тоже будет в нижнем регистре. А изначально оно могло быть в любом. Вот это я и имел в виду под будет иной.
Я понимаю, что для имён файлов это непринципиально, но как-то некрасиво …
citRiks wrote: Mon 30 Mar, 2020 20:09 на всякий случай поправляю себя:
Уже нашёл. Имя файла - видимо, ID диска, не могу пока найти.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Mon 30 Mar, 2020 20:16 Имя файла - видимо, ID диска, не могу пока найти.
на всякий случай напишу из чего получается имя файла дерева:
<VolumeLabel>.<SerialNumber>.<FileSystemType>.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Mon 30 Mar, 2020 20:16 но тогда и найденное соответствие тоже будет в нижнем регистре. А изначально оно могло быть в любом. Вот это я и имел в виду под будет иной.
Понятнее теперь
Ну я бы все что не важно в каком регистре, при сравнении/поиске переводил бы в нижний регистр,
как в указанном примере с именем файла Луа.
А то что да важно каком регистре - то бы не переводил, но такого подавляющее меньшинство
Last edited by citRiks on Mon 30 Mar, 2020 21:45, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h,
как получить ЛАБЕЛь и ИД диска в одном флаконе:

Code: Select all

Y:\>label c:
Volume in drive C: is SDATA1
Volume Serial Number is 09D5-9319
а так еще лучше:

Code: Select all

Y:\>vol Y:
 Volume in drive Y is VS2015_PRO_ENU
 Volume Serial Number is BE34-C841
FileSystemType можно получить из Panel.DriveType, но надо перевести из номера, если это вызовет затруднения, то я вышлю таблицу
Last edited by citRiks on Mon 30 Mar, 2020 22:02, edited 3 times in total.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 11:35 Обсервер - это считайте то же самое что АркЛайт<…>
Вы не ответили на самый главный вопрос - как получить листинг. Я открыл Observer-ом msi-файл с вложенной структурой папок. Но 7z l <имя_файла> структуру папок не показывает. Как получить структуру??? Без этого не сформировать "зеркало" папок.
З.Ы. Попробовал получить листинг через 7z - я даже не понял, по какому признаку файлы включаются в список. И не в ближайшей папке, и не самые новые …
Last edited by buniak_a_h on Mon 30 Mar, 2020 23:47, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Mon 30 Mar, 2020 23:15 Вы не ответили на самый главный вопрос - как получить листинг.
Я думаю что именно тут пойти по пути наименьшего сопротивления - взять то что дает 7z l "<file>"
В дальнейшем кто-нибудь из нас или не из нас подскажет как воспользоваться более корректным листиногом обсервера
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Tue 31 Mar, 2020 12:22 взять то что дает 7z l "<file>"
Попробуйте на дистрибутиве Delphi-7 - будете сильно удивлены…
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Посмотрел, обычный МСИ

Code: Select all

                    .....          766          768  Binary.NewBinary7
                    .....        79872        79872  Binary.datgen.dll
                    .....       107008       107008  Binary.cleanup.dll
                    .....         3519         3520  Binary.NewBinary9
                    .....        89600        89600  Binary.merge1.dll
                    .....            8           64  !ISObjectProperty
                    .....           48           64  !AdminExecuteSequence
                    .....       265630       265728  Binary.billboard1.bmp
                    .....       295424       295424  Binary.createudl.exe
                    .....          306          320  !ModuleComponents
                    .....            6           64  !ModuleSignature
                    .....          760          768  !ControlCondition
                    .....          109          128  Binary.bdemerge.ini
                    .....        77824        77824  Binary.ISSELFREG.DLL
                    .....       401920       401920  Binary.borlndlm.dll
                    .....       200704       200704  Binary.BDEMMHelper.dll
                    .....         2820         2880  !FeatureComponents
                    .....          186          192  !InstallUISequence
                    .....       265630       265728  Binary.billboard3.bmp
                    .....       265630       265728  Binary.billboard2.bmp
                    .....       265630       265728  Binary.billboard4.bmp
                    .....       265630       265728  Binary.billboard5.bmp
                    .....          564          576  [5]SummaryInformation
                    .....         4710         5120  Icon.ARPPRODUCTICON.exe
                    .....           84          128  !AdvtExecuteSequence
                    .....          654          704  !InstallExecuteSequence
                    .....       540672       540672  Binary.New_Binary.E966F0CB_76B3_11D3_945B_00C04FB1760A
------------------- ----- ------------ ------------  ------------------------
                               5753348      5758400  87 files
где там беда? :)
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

то что 7Z не видит директорий в МСИ - так это нормально, говорили уже вроде об этом? пусть пока так
PS
я бы даже сказал что разборки с обсервером/листингами можно пока оставить, умный кэшинг приоритетнее
Last edited by citRiks on Tue 31 Mar, 2020 16:51, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Tue 31 Mar, 2020 16:42 то что 7Z не видит директорий в МСИ - так это нормально, говорили уже вроде об этом? пусть пока так
PS
я бы даже сказал что разборки с обсервером/листингами можно пока оставить, умный кэшинг приоритетнее
1. А смысл в дереве, если нет каталогов?
2. В списке 87 файлов. А на самом деле - 6027! И те, что есть в списке, совершенно не в корневой папке. Так что 7z никак не помогает.
В и-нете предлагают почему-то такую команду для распаковки файлов:
msiexec /a "<msi-файл>" /qb /targetdir=<куда_распаковать>/ Но у меня не распаковывается, а начинает устанавливаться, что мне ну совершенно не надо.
Так что 7z и msi абсолютно не дружат!
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

О кэшировани.
Оно имеет смысл только для всего диска (от корня). Так что доделываю открытие архивированных папок с переходом - а кэширование оставлю Вам.
Post Reply

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