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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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 143 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Mon 14 Dec, 2020 07:40, edited 37 times in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Latest post of the previous page:

buniak_a_h wrote: Fri 10 Apr, 2020 10:21 1. Тупой вызов lua:far.RecursiveSearch([[C:\]], "*.*>>d", function() end, "FRS_RECUR") занимает 7 минут
У меня 25 секунд. Естественно, при втором и т.д. вызове.
Первый вызов хронометрировать не имеет смысла, ибо его результат не отражает быстродействие проверяемой функции.
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: Fri 10 Apr, 2020 10:28 Кстати, tree.exe от GNUWin32 работает чуть дольше 2-х минут. Т.е. в 3 раза дольше tree.com-а. Правда, на C: много Hidden-каталогов; возможно, tree.com работает быстрее за счёт пропуска таких папок.
Если нам нужен весь диск, то лучше всего использовать прямое чтение из $MSFT (база данных NTFS),
плагин NTFS info например умеет это делать, из внешних утилит умеет делать полулярный Everything
Кстати может быть Everything сам умеет строить дерево?
Если вы согласны будете включать внешнюю утилиту в поставку, то я проверю чтобы помочь
Далее, возможно надо попробовать заинтерфейсится к NTFS info,
если у него не будет АПИ или будет плого работать,
то можно попробовать обратиться к его суппортеру и чинителю wseven7 там в топике

Shmuel,
Можно попрбовать RecursiveSearch и с горячим запуском,
но я сомневаюсь что RecusiveSearch делает обращения к $MSFT, или .. ?
(на то он и рекурсивный - чтобы не уметь)
Все поиски "disk/volume wide" без чтения напрямую из $MSFT будут в разы пригрывать чтению из $MSFT
Я пдозреваю что tree.com умеет брать из $MSFT, поэтому результаты быстрее
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

DV wrote: Fri 10 Apr, 2020 11:09 Какой языковой файл не найден
Забыл включить англоязычный языковой файл, сорри. Чуть освобожусь - дошлю.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Shmuel wrote: Fri 10 Apr, 2020 11:21 У меня 25 секунд
2-й и последующие у меня 40 секунд работают.
Не очень понимаю, надо ли делать контроль зацикливания:
%USERPROFILE%\AppData\Local\Application Data → %USERPROFILE%\AppData\Local
В результате если строить дерево от C:\Users\PC\AppData, то может зациклиться.
far.RecursiveSearch с флагом FRS_RECUR не зацикливается, а если рекурсию организовать "вручную" (для каждого вложенного директория вызывать far.RecursiveSearch), то, есессно, зацикливается. (это я попробовал делать дерево таком образом. Увы!…)
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Fri 10 Apr, 2020 13:52 DV, ответил тут (фикс): viewtopic.php?p=160193#p160193
На самом деле это даже хорошо, что ошибка вылезает. Раз действительно нет языкового файла. Просто у меня язык ФАРа - English, а язык помощи - русский. Поэтому если не находит по одному, то ищет по другому и в результате находит.
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,
не думаю что дело в английском хелпе которого нет,
у меня например сейчас работает любой комбинации языков и совсем без русского,
я думаю дело в другом, посмотрите мой ответ в теме про GetMsg.
там типа как-то хитро задается Lua-Environmnet в модуле при инициализации,
причем так только на 32-битных компьютерах

Shmuel,
у меня стабильно RecursiveSearch (с вашим синтаксисом, спасибо) дает 62 секунды, а tree.com 23 секунды,
для разветвленного диска это очень даже неплохо, но все же ..

Code: Select all

lua:local c, t1 = 0, Far.UpTime;far.RecursiveSearch([[D:\]], "*.*>>d", function() c = c + 1 end, "FRS_RECUR");far.Message((Far.UpTime - t1).."miliseconds", c.."folders found")
Last edited by citRiks on Fri 10 Apr, 2020 15:40, edited 2 times in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

При построении дерева внутри архива и перемещении по нему автоматическое отображение содержимого на пассивной панели то ли не работает, то ли было отключено специально?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

DV wrote: Fri 10 Apr, 2020 15:39 При построении дерева внутри архива и перемещении по нему автоматическое отображение содержимого на пассивной панели то ли не работает, то ли было отключено специально?
Извините, не заметил сообщения. Впрочем, сайт подглючивает. Вложения пропадают…
Было отключено. Убрал это ограничение в 1.4.2. У меня, вроде, работает (только при открытии архива через ArcLite!).Если не заработает на 1.4.2, проверьте, зависит ли от архива (повторяется ли на других архивах) и если да - я готов поотлаживаться (вышлю Вам в личку вариант с отладочным выводом). А Вам потребуется что-нить типа DbgView.exe. Просто я уже сталкивался с тем, что panel.SetPanelDirectory не всегда работала. Кто-то из разработчиков просил дать им такой случай, но у меня с тех пор не повторяется (я даже думал, что исправили). И, кстати, укажите версию ФАРа. Что-то там точно менялось!
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

DV wrote: Fri 10 Apr, 2020 10:14 А зачем привязываться к утилите tree?
Разве средствами Lua нельзя или очень сложно пробежаться по структуре папок?
А действительно!
Посидел пару часиков и сделал построение дерева на базе функции far.RecursiveSearch. Работает на диске C:\ примерно вдвое дольше, чем утилита tree.com. Заодно появилась возможность получать и другие характеристики папки (атрибуты, дата-время, наличие файлов, наличие Descript.ion.DirInfo - это первое, что приходит в голову), а также сделать настройку, видеть ли Hidden-папки (да и вообще настроить фильтр папок, видимых дереву).

А теперь внимание, вопрос! (заинтересованным лицам):
Стоит ли ради ради указанных возможностей и самоизоляудовлетворения замедлить построение дерева и вообще огород городить?
Варианты ответа:
  • Безусловно да!
  • Нафик это надо?
  • По настройке (очень не хочется)
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,
Я думаю что надо все-таки взяться за RecursiveSearch,
он очень функциональный и в потенциале может дать немало бонусов.
То что он медленее tree.com, может более чем компенсироваться наличием закэшированных структур.
Т.е. я скорее за "Безусловно надо" получается, но в моем понимании это следует идти с с кэшем рука об руку.

В идеале же наверное надо было бы использовать что-то работающе с $MFT,
плагин NTFSI, или Everything, или даже свой Си-код,
но это настолько грандиозно было бы что стыдно упоминать дaже :)

User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

У Everything есть api
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

John Doe wrote: Sat 11 Apr, 2020 14:33 У Everything есть api
Если у вас уже есть какие-то ссылки и/или материалы/рекомендации по этой теме,
то буду счастлив если вы их где-то предоставите, думаю тут это будет уместно,
и кто-нибудь когда-нибудь может и доберется.
Не удержусь все же и спрошу, если кто-нибудь знает,
а из Луа легко будет заинтерфейсится к Everything?

и что вы или кто-нибудь думаете по поводу воспользоваться для той же цели фунцкионалом плагина NTFS info ?
он тоже работает с $MFT.

Оговорюсь что я не могу этим заниматься в скором времени,
но давайте, если не трудно, задокументируем чем располагаем на данный момент

Напишу уж по горячим следам в форум поддержки NTFS info может ли кто обяснить
viewtopic.php?p=160276#p160276
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Все материалы на офсайте.
Легко ли - смотря кому. Придётся работать через ffi.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Sat 11 Apr, 2020 16:08 Если у вас уже есть какие-то ссылки и/или материалы/рекомендации по этой теме,
то буду счастлив если вы их где-то предоставите, думаю тут это будет уместно,
и кто-нибудь когда-нибудь может и доберется.
Себе скачал и установил Everything после того, как в одной из веток форума прочитал про использование софта для быстрого поиска. Там был то ли скрипт, то ли плагин для использования Everything. Теперь уже не припомню, но то, что один человек нашёл на форуме, другой завсегда может повторить поиск.
По поводу чего-то другого:
1. Я не знаю вообще, что такое $MFT
2. Я считаю, что для подключения к некоей процедуре стороннего софта нужны более серьёзные аргументы, чем экономия 20 секунд на целом 200-ГБайтном диске.
3. Если всё же надо что-то подключать (это когда мне было неохота рисовать дерево), то предпочтение безусловно отдаётся стандартному софту (гарантированно имеющемуся у юзера).
4. По возможности придерживаться единства языка
Отсюда:
(a) Everything - отказать
(b) Дополнительный софт на СИ должен быть оформлен как часть LUA-скрипта (через ffi)
Всё остальное - без меня.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

Я за использование far.RecursiveSearch. Если можно обойтись одним инструментом, то зачем использовать два?
Post Reply

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