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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 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.5
  1. Исправлена ошибка, возникавшая при перестроении всего дерева по клавише Ctrl+R (обновить). Кроме того, по этой клавише возможно обновление кэша.
  2. При выходе из дерева состояние другой панели теперь восстанавливается только в случае, если включено немедленное открытие текущего каталога на противоположной панели.
  3. Добавлен минимальный контроль актуальности данных о папке в кэше: если в корневой папке имеются подпапки, а дерево формируется пустым, то выводится сообщение о критической неактуальности кэша и предлагается его перестроить. В случае отказа только перестраивается в памяти ветка корневого каталога дерева.
  4. При обновлении дерева по Ctrl+R также предлагается обновить кэш диска.
  5. Экспериментально!] При смене каталога на другой (не_древесной) панели (если она активна) указатель в дереве переносится на соответствующий узел дерева; при этом он помечается символом «►».
TreePanel_2_6_5.7z
(30.63 KiB) Downloaded 14 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Tue 17 Nov, 2020 18:12, edited 35 times in total.
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 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: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

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

Post by citRiks »

DV,
У меня происходит быстро закрытие всего ФАРа и самого дерева,
память да, ФАР становится ~650 МБ (открывал по диску "Це")
Ну вопечм, "переходите на х64"
Архитектурно вся луа-таблица держится в памяти, поэтому улучшений в этом плане видимо не предвидится.
А я ведь предупреждал что лучше в sqlite держать базу :)
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 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: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

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

Post by citRiks »

buniak_a_h wrote: Tue 28 Jul, 2020 10:42 Я читаю в переменную и во второй раз уже не читаю диска (если не вышел срок годности или юзер не потребовал обновить). Поэтому насчёт "повторного чтения" я не совсем понял. Может, ошибка вкралась…
Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Tue 28 Jul, 2020 10:45 Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
Не-не, я так и понял. Если один рав кэш читался с диска, то он запоминается в переменной и с диска (именно кэш!) не читается.
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 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: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

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

Post by Shmuel »

DV wrote: Tue 28 Jul, 2020 12:08 6. Выходим из панели дерева, запускаем macro:load.
Попробуйте вместо macro:load запустить lua:collectgarbage("collect")
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 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: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

Вышла версия 2.4.1. Основная новость - возможность обновления текущей ветки дерева (перестроение списка папок). Актуально, если не видно папок, появившихся после последнего сохранения кэша. Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую … :P
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 times
Been thanked: 15 times

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

Post by DV »

buniak_a_h wrote: Thu 30 Jul, 2020 05:41Вышла версия 2.4.1
Фантастика!
Диалог с детализацией текущих операций - это лучшее, что я видел на эту тему!
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

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

Post by citRiks »

buniak_a_h,
Спасибо, и потреблениэ памяти значительно меньше
200МБ на большой диск C: всего лишь, ранее это был порядка 400МБ кажется
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 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 Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую …
Оказалось, что эта "странность" - симптом ошибки (из-за регистронезависимой сортировки и регистрозависимого бинарного поиска последний оканчивался неудачей, и в этом случае срабатывала «соломка» - список папок для ветки перечитывался с диска). Исправлено :-)
DV
Posts: 437
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 23 times
Been thanked: 15 times

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

Post by DV »

Открыл для себя сочетание Ctrl+F6 (Expand All) - и обнаружил, что оно не только разворачивает все узлы, но также меняет режим сортировки с "u" на "s", что в некоторых случаях приводит к чудесам отображения дерева.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

DV, спасибо. Я для ExpandAll использую синоним Ctrl+Shift+Right. Исправление - строчка return true перед строкой key == 'CtrlShiftLeft'. На неделе заменю скрипт…
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

Вышла версия 2.6.1:
  1. Реализован вызов дерева на пассивной панели. При этом "стартовым" каталогом является текущий каталог активной панели.
    ¹) Вызов дерева происходит по горячей клавише Ctrl+T в случае, если стандартное дерево FAR-а выключено.
  2. Добавлена настройка «Показывать дерево от корня». Если настройка включена, то по Ctrl+T выводится дерево, начиная от корневой папки диска; указатель позиционируется на текущей папке активной панели.
  3. Исправлены некоторые неточности. Например, можно было развернуть папку, а затем обновить содержимое панели (Ctrl+R); при этом папка снова становится свёрнутой.
buniak_a_h
Posts: 2132
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

Вышла версия 2.6.2. В этой версии:
  1. Изменены некоторые хоткеи. В частности, CtrlEnter теперь не открывает текущую папку на пассивной панели, а сносит имя текущей папки в командную строку (стандартное действие для панели); CtrlF не открывает диалог поиска, а сносит полный путь к текущей папке в командную строку (тоже стандартное действие), а поиск начинается по клавише F7.
  2. Исправлены неточности первоначального позиционирования в дереве.
  3. Панели плагинов MultiArc и Observer приравнены (с точки зрения ограничения) к панели плагина ArcLite.
  4. Рефакторинг.
Post Reply

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