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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4259
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 143 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: 4259
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:

О кэшировани.
Оно имеет смысл только для всего диска (от корня). Так что доделываю открытие архивированных папок с переходом - а кэширование оставлю Вам.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Ещё о кэшировании (у нынешнего нативного дерева):
При наличии кэша в %FARLOCALPROFILE%\tree3.cache\ удаление папки в каталоге %Temp% занимает 3 секунды ! ПУСТОЙ папки! Кошмар... А я думал - подхвалил короновирус типа time… Удалил кэш дерева - всё полетело. :-)
Вывод: либо отказываться от кэширования, лбо не поддерживать в актуальном состоянии.
Last edited by buniak_a_h on Tue 31 Mar, 2020 20:04, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

buniak_a_h wrote: Tue 31 Mar, 2020 20:02Ещё о кэшировании (у нынешнего нативного дерева):
При наличии кэша в %FARLOCALPROFILE%\tree3.cache\ удаление папки в каталоге %Temp% занимает 3 секунды ! ПУСТОЙ папки! Кошмар...
поэтому дерево по умолчанию отключено.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

zg wrote: Tue 31 Mar, 2020 21:15 поэтому дерево по умолчанию отключено.
Да я уж догадался. Хотя это похоже на топор как средство от головной боли. Можно было бы, например, сделать настройку на частоту актуализации (раз в неделю или по CtrlR, например). Тормозит также при удалении даже не папки, а файла - а тут-то дерево при чём? Хранить дату папки в кэше и обновлять только устаревшие.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

zg,
не лучше ли было отключить перестроение дерева при создании/переименовании/удалении директориев?
И добавить иницированное перестроение (если его нет?), например находясь на дереве делая CtrlShiftR
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Такая вот странность: нативное дерево отключили как раз из-за кэширования, я сделал "компромиссный вариант) - дерево, но без кэширования - тут же просят сделать кэширование. Ну, получат такие же тормоза... (камешек в огород citRiks-а)
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, вы не правы, и я устал обьяснять.
если есть желание, то попробуйте еще раз перечитать что я писал на эту тему, но я не настаиваю.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Вышла версия 1.45.2. Основные изменения:
  • Полностью реализован функционал при работе с деревом плагина ArcLite (открытие текущей папки на пассивной панели, выход из дерева с переходом на текущую папку)
  • Очередная попытка навести порядок с корневой папкой при старте модуля и с папкой возврата.
  • Реализовано восстановление позиций как активной, так и пассивной панелей.
  • Для плагиновой (ArcLite) панели реализовано автоматическое открытие пути от корневой папки к текущей и позиционирование на ней при старте дерева.
  • Изменена логика открытия узлов дерева при старте: "свёрнутыми" делаются не только узлы заданного уровня вложенности, но и все, входящие в них.
  • При вызове по префиксу с указанием корневого пути (например, ptree:C:\%TEMP%), если текущая папка является вложенной по отношению к указанной в командной строке, дерево автоматически позиционируется на текущей папке.
  • Добавлена возможность "косвенного" указания дерева в командной строке:
    ptree:@"<имя_файла_дерева>"
    где имя_файла_дерева - имя файла - результата вывода системной утилиты tree.com *)

*) Этот синтаксис делает возможным использование кэша. В полуавтоматическом режиме : выдаёте команду
tree C:\ >%FARPROFILE%\TreePanel\C.Tree
и в дальнейшем открываете дерево командой
ptree:@"%FARPROFILE%\TreePanel\C.Tree"
При необходимости обновляете файл.
При желании несложно сделать макрос, обновляющий кэш по интервалу (ежедневно, раз в неделю и т.п.).
P/S. Уважаемые знатоки! Если кто знает команду tree (утилиту tree.com), не подскажете, можно ли сделать так, чтобы в дерево включались скрытые папки? А то получилось, что самые интересные (папка %APPDATA%, в которую входит как раз %FARPROFILE%, и %LOCALAPPDATA% с %FARLOCALPROFILE%) не видны в дереве…
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,
Гнувин32овский tree, думаю что полностью решит.
В виндуском можно посмотреть его " /?" и увидеть что почти ничего там нет,
хакать его (как и большинство виндовского искоропочного) думаю что нет смысла,
надо работать с нормальными вполне стандартными утилитами - tree, grep, sed, curl, more/less, etc.
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: Thu 09 Apr, 2020 14:33 При желании несложно сделать макрос, обновляющий кэш по интервалу (ежедневно, раз в неделю и т.п.).
вот это правильно, спасибо :)
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

А зачем привязываться к утилите tree?
Разве средствами Lua нельзя или очень сложно пробежаться по структуре папок?
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

DV wrote: Fri 10 Apr, 2020 10:14 А зачем привязываться к утилите tree?
Разве средствами Lua нельзя или очень сложно пробежаться по структуре папок?
1. Тупой вызов lua:far.RecursiveSearch([[C:\]], "*.*>>d", function() end, "FRS_RECUR") занимает 7 минут, а tree.com отрабатывает 40 секунд (у меня).
2. Неохота было программировать грид дерева (см. самое начало темы).
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Кстати, tree.exe от GNUWin32 работает чуть дольше 2-х минут. Т.е. в 3 раза дольше tree.com-а. Правда, на C: много Hidden-каталогов; возможно, tree.com работает быстрее за счёт пропуска таких папок.
Last edited by buniak_a_h on Fri 10 Apr, 2020 10:29, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

У меня в FAR выбран ангийский язык для интерфейса и для справки.
Не могу подружиться с модулем GetMsg. Распаковал его в папку Profile\Macros\modules\BAX.
Перезапускаю FAR - и вижу сообщение от GetMsg: "Не найдено языковых файлов, соответствующих маске".
Какой языковой файл не найден, для какого языка - непонятно.
Сделал копию TreePanelRus.lng, дав ей имя TreePanelEng.lng, - получаю ту же ошибку...
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

buniak_a_h wrote: Fri 10 Apr, 2020 10:21 1. Тупой вызов lua:far.RecursiveSearch([[C:\]], "*.*>>d", function() end, "FRS_RECUR") занимает 7 минут
У меня 25 секунд. Естественно, при втором и т.д. вызове.
Первый вызов хронометрировать не имеет смысла, ибо его результат не отражает быстродействие проверяемой функции.
Post Reply

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