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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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 - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.



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

Версия 1.4.2
  1. Полностью реализован функционал при работе с деревом плагина ArcLite (открытие текущей папки на пассивной панели, выход из дерева с переходом на текущую папку)
  2. Очередная попытка навести порядок с корневой папкой при старте модуля и с папкой возврата.
  3. Реализовано восстановление позиций как активной, так и пассивной панелей.
  4. Для плагиновой (ArcLite) панели реализовано автоматическое открытие пути от корневой папки к текущей и позиционирование на ней при старте дерева.
  5. Изменена логика открытия узлов дерева при старте: "свёрнутыми" делаются не только узлы заданного уровня вложенности, но и все, входящие в них.
  6. При вызове по префиксу с указанием корневого пути (например, ptree:C:\%TEMP%), если текущая папка является вложенной по отношению к указанной в командной строке, дерево автоматически позиционируется на текущей папке.
  7. Добавлена возможность "косвенного" указания дерева в командной строке:
    ptree:@"<имя_файла_дерева>"
    где имя_файла_дерева - имя файла - результата вывода системной утилиты tree.com.
    *) Этот синтаксис делает возможным использование кэша… Ну, правда, пока только в полуавтоматическом режиме.
TreePanel_1_4_2.7z
(11.96 KiB) Downloaded 8 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Fri 10 Apr, 2020 15:36, edited 13 times in total.

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

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

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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: 5817
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 147 times
Contact:

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

Post by zg »

buniak_a_h wrote:
Tue 31 Mar, 2020 20:02
Ещё о кэшировании (у нынешнего нативного дерева):
При наличии кэша в %FARLOCALPROFILE%\tree3.cache\ удаление папки в каталоге %Temp% занимает 3 секунды ! ПУСТОЙ папки! Кошмар...
поэтому дерево по умолчанию отключено.

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

zg wrote:
Tue 31 Mar, 2020 21:15
поэтому дерево по умолчанию отключено.
Да я уж догадался. Хотя это похоже на топор как средство от головной боли. Можно было бы, например, сделать настройку на частоту актуализации (раз в неделю или по CtrlR, например). Тормозит также при удалении даже не папки, а файла - а тут-то дерево при чём? Хранить дату папки в кэше и обновлять только устаревшие.

citRiks
Posts: 637
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 42 times

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

Post by citRiks »

zg,
не лучше ли было отключить перестроение дерева при создании/переименовании/удалении директориев?
И добавить иницированное перестроение (если его нет?), например находясь на дереве делая CtrlShiftR

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

Такая вот странность: нативное дерево отключили как раз из-за кэширования, я сделал "компромиссный вариант) - дерево, но без кэширования - тут же просят сделать кэширование. Ну, получат такие же тормоза... (камешек в огород citRiks-а)

citRiks
Posts: 637
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 42 times

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

Post by citRiks »

buniak_a_h, вы не правы, и я устал обьяснять.
если есть желание, то попробуйте еще раз перечитать что я писал на эту тему, но я не настаиваю.

citRiks
Posts: 637
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 42 times

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

Post by citRiks »

DEL
Last edited by citRiks on Wed 01 Apr, 2020 15:38, edited 1 time in total.

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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%) не видны в дереве…

citRiks
Posts: 637
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 42 times

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

Post by citRiks »

buniak_a_h,
Гнувин32овский tree, думаю что полностью решит.
В виндуском можно посмотреть его " /?" и увидеть что почти ничего там нет,
хакать его (как и большинство виндовского искоропочного) думаю что нет смысла,
надо работать с нормальными вполне стандартными утилитами - tree, grep, sed, curl, more/less, etc.

citRiks
Posts: 637
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 42 times

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

Post by citRiks »

buniak_a_h wrote:
Thu 09 Apr, 2020 14:33
При желании несложно сделать макрос, обновляющий кэш по интервалу (ежедневно, раз в неделю и т.п.).
вот это правильно, спасибо :)

DV
Posts: 415
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 18 times
Been thanked: 14 times

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

Post by DV »

А зачем привязываться к утилите tree?
Разве средствами Lua нельзя или очень сложно пробежаться по структуре папок?

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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. Неохота было программировать грид дерева (см. самое начало темы).

buniak_a_h
Posts: 1843
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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: 415
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 18 times
Been thanked: 14 times

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

Post by DV »

У меня в FAR выбран ангийский язык для интерфейса и для справки.
Не могу подружиться с модулем GetMsg. Распаковал его в папку Profile\Macros\modules\BAX.
Перезапускаю FAR - и вижу сообщение от GetMsg: "Не найдено языковых файлов, соответствующих маске".
Какой языковой файл не найден, для какого языка - непонятно.
Сделал копию TreePanelRus.lng, дав ей имя TreePanelEng.lng, - получаю ту же ошибку...

Shmuel
Posts: 6122
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 308 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 “Обсуждение макросов”