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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 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.5.1
  1. Добавлена возможность удаления ветки дерева. Ошибки удаления пока не обрабатываются (кроме сообщения об ошибке).
  2. Исправлены ошибки:
    1. Вылет при обновлении ветки, если кэш не создавался и не читался с диска.
    2. Обновление корневой ветки по Ctrl+R.
    3. Сортировка и поиск папок были в некоторых местах регистрозависимыми (!).
  3. Рефакторинг
TreePanel_2_5_1.7z
(25.95 KiB) Downloaded 5 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Sun 02 Aug, 2020 01:00, edited 27 times in total.

DV
Posts: 425
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 22 times
Been thanked: 15 times

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

Post by DV »

Latest post of the previous page:

Спасибо!
Несколько пожеланий касательно дружественности к пользователю:
1. Построение дерева для всего диска занимает порядка полутора минут для не самого большого SSD-диска (300 ГБ в моём случае). Всё это время FAR Manager не подаёт никаких признаков жизни. Лучше было бы показать диалог с текстом "Прочитано %u папок" подобно тому, как это делалось в стандартной панели дерева.
2. При чтении дерева из кеша Far Manager выделяет порядка 350 МБ памяти (размер файла кеша - 85 МБ). При повторном чтении дерева из кеша опять выделяется 350 МБ. И, согласно Process Explorer, эта память не освобождается!
3. Закрытие Far Manager при этом (с деревом в памяти) происходит достаточно долго (порядка 20-30 секунд).
Last edited by DV on Tue 28 Jul, 2020 10:13, edited 1 time in total.

citRiks
Posts: 702
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 210 times
Been thanked: 44 times

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

Post by citRiks »

DV,
У меня происходит быстро закрытие всего ФАРа и самого дерева,
память да, ФАР становится ~650 МБ (открывал по диску "Це")
Ну вопечм, "переходите на х64"
Архитектурно вся луа-таблица держится в памяти, поэтому улучшений в этом плане видимо не предвидится.
А я ведь предупреждал что лучше в sqlite держать базу :)
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

DV wrote:
Tue 28 Jul, 2020 10:06
Спасибо!
Несколько пожеланий касательно дружественности к пользователю:
1. Построение дерева для всего диска занимает порядка полутора минут для не самого большого SSD-диска (300 ГБ в моём случае). Всё это время FAR Manager не подаёт никаких признаков жизни. Лучше было бы показать диалог с текстом "Прочитано %u папок" подобно тому, как это делалось в стандартной панели дерева.
Ок, сделаю.
DV wrote:
Tue 28 Jul, 2020 10:06
2. При чтении дерева из кеша Far Manager выделяет порядка 350 МБ памяти (размер файла кеша - 85 МБ). При повторном чтении дерева из кеша опять выделяется 350 МБ. И, согласно Process Explorer, эта память не освобождается!
Я читаю в переменную и во второй раз уже не читаю диска (если не вышел срок годности или юзер не потребовал обновить). Поэтому насчёт "повторного чтения" я не совсем понял. Может, ошибка вкралась…
DV wrote:
Tue 28 Jul, 2020 10:06
3. Закрытие Far Manager при этом (с деревом в памяти) происходит достаточно долго (порядка 20-30 секунд).
По идее, эта память освобождается при перезагрузке макросов. Если перед закрытием сделать macro:load - тормоза снимаются?

citRiks
Posts: 702
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 210 times
Been thanked: 44 times

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

Post by citRiks »

buniak_a_h wrote:
Tue 28 Jul, 2020 10:42
Я читаю в переменную и во второй раз уже не читаю диска (если не вышел срок годности или юзер не потребовал обновить). Поэтому насчёт "повторного чтения" я не совсем понял. Может, ошибка вкралась…
Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

citRiks wrote:
Tue 28 Jul, 2020 10:45
Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
Не-не, я так и понял. Если один рав кэш читался с диска, то он запоминается в переменной и с диска (именно кэш!) не читается.

DV
Posts: 425
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 22 times
Been thanked: 15 times

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

Post by DV »

Привожу детали всего эксперимента:
1. Запускаем Far Manager. Потребление памяти процессом Far.exe - 20 МБ.
2. Запускаем скрипт из корня диска C без предварительно созданного Tree.Cache: проходит 2 мин 30 сек - и дерево создано. Потребление памяти процессом Far.exe - 442 МБ.
3. Выходим из панели дерева обратно на файловую панель. Потребление памяти - 442 МБ.
4. Снова запускаем скрипт из корня диска C (теперь уже с созданным Tree.Cache): проходит 14 секунд - и дерево показано. Потребление памяти - 617 МБ.
5. Повторяем шаги 3 и 4 (выход из дерева, показ дерева из корня диска C): проходит 14 секунд - и дерево показано. Потребление памяти - 592 МБ. Что меньше 617 МБ, но гораздо больше, чем 442 МБ.
6. Выходим из панели дерева, запускаем macro:load. Ждём минуту (на всякий случай), ходим по папкам в файловой панели туда-сюда - потребление памяти остаётся 592 МБ.
7. Выходим из Far Manager по нажатию F10. Процесс Far.exe завершается через 16 секунд.
Last edited by DV on Tue 28 Jul, 2020 12:11, edited 2 times in total.

Shmuel
Posts: 6144
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 318 times

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

Post by Shmuel »

DV wrote:
Tue 28 Jul, 2020 12:08
6. Выходим из панели дерева, запускаем macro:load.
Попробуйте вместо macro:load запустить lua:collectgarbage("collect")

buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

Shmuel wrote:
Tue 28 Jul, 2020 12:16
DV wrote:
Tue 28 Jul, 2020 12:08
6. Выходим из панели дерева, запускаем macro:load.
Попробуйте вместо macro:load запустить lua:collectgarbage("collect")
Уже вставил в скрипт. Не опубликовал ещё - там много добавлено…

buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

Вышла версия 2.4.1. Основная новость - возможность обновления текущей ветки дерева (перестроение списка папок). Актуально, если не видно папок, появившихся после последнего сохранения кэша. Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую … :P

DV
Posts: 425
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 22 times
Been thanked: 15 times

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

Post by DV »

buniak_a_h wrote:
Thu 30 Jul, 2020 05:41
Вышла версия 2.4.1
Фантастика!
Диалог с детализацией текущих операций - это лучшее, что я видел на эту тему!

citRiks
Posts: 702
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 210 times
Been thanked: 44 times

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

Post by citRiks »

buniak_a_h,
Спасибо, и потреблениэ памяти значительно меньше
200МБ на большой диск C: всего лишь, ранее это был порядка 400МБ кажется
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

buniak_a_h
Posts: 1921
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

Вышла версия 2.5.1.
Что в ней:
1. Добавлена возможность удаления ветки дерева. Ошибки удаления пока не обрабатываются
(кроме сообщения об ошибке).
2. Исправлены ошибки:
2.1. Вылет при обновлении ветки, если кэш не создавался и не читался с диска.
2.2. Обновление корневой ветки по Ctrl+R.
2.3. Сортировка и поиск папок были в некоторых местах регистрозависимыми (! - см. ниже).
3. Рефакторинг
buniak_a_h wrote:
Thu 30 Jul, 2020 05:41
Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую …
Оказалось, что эта "странность" - симптом ошибки (из-за регистронезависимой сортировки и регистрозависимого бинарного поиска последний оканчивался неудачей, и в этом случае срабатывала «соломка» - список папок для ветки перечитывался с диска). Исправлено :-)

Post Reply

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