buniak_a_h wrote: ↑Sat 07 Mar, 2020 19:41
Я начинал делать дерево в виде панельного модуля. Вот это мне показалось наиболее удобным. Но… Отвлекли на работе.
ну положите куда-нибудь на видное место если там есть хоть что-то полезное, может кто-нибудь продолжит
Спасибо citRiks-у за наводку на tree.com - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.
Чего может не хватать:
обновления дерева (по таймеру, например);
вывода характеристик (суммарный размер поддерева, самого нового файла, количество файлов).
Что ещё - не знаю.
Если кому-нить это интересно, перечисленные недоделки я по возможности доделаю. Также принимаются предложения, чего может ещё не хватать для нормальной работы. Но так-то вроде вполне удобненько получилось …
Опять же если будут добровольцы - локализацию и перевод хелпа были бы полезны. Если скрипт кому-нить покажется полезным …
Версия 2.6.6.
Исправлен «снос» имени текущей папки в командную строку: теперь оно заменяет отмеченную часть командной строки или (если ничего не отмечено) вставляется в текущую позицию строки.
Исправлена мелкая неточность: вопрос о пересоздании кэша задаётся только в том случае, если задан период актуализации кэша
Изменена логика получения "корневого1)" каталога дерева. При вызове модуля из меню выбора диска в качестве корневого берётся папка "противоположной" панели; при вызове модуля из меню плагинов и из командной строки дерево открывается на активной панели, отображает состояние пассивной панели.
Добавлена возможность смены корневой папки дерева
Добавлены кнопки для «Expand all» и «Collapse all» (CtrlShift→ и CtrlShift← соответственно)
Добавлен вызов настройки прямо из панели-дерева (кнопка [Shift+F9])
Изменён символ-признак наличия скрытого поддерева (■ заменён на ╥)
Версия 1.2.1:
Изменено управление при помощи стрелок.
Добавлена возможность "перехода на уровень вверх"
Реазизована строка "нижнего" меню с подсказками по функциональным клавишам.
Реализована установка "текущего" каталога в соответствии с текущим узлом дерева. Т.е. команды ОС и программы будут выполняться в контексте папки, соответствующей текущему узлу дерева.
Версия 1.2.2:
Исправлена ошибка, приводившая к вылету на каталогах без вложенных
Версия 1.3.1
Сделано извещение о формировании дерева
Рефакторинг, исправлены мелкие неточности:
Корневая папка не раскрывается и не сворачивается
Исправлен выход по CtrlPgDn (раньше при выходе было позиционирование на текущей папке дерева; теперь переход в неё)
В командной строке реализована передача корневой папки дерева
Реализовано взаимодействие с макросом поиска/фильтрации. Для этого добавлено два хоткея: CtrlF - поиск и CtrlShiftF - фильтр. Сам макрос можно скачать по адресу: viewtopic.php?p=159786
Версия 1.3.2
Исправлена несовместимость с версией LuaFAR-а ранее 736
Версия 1.3.3
запрещено занесение "проходных" папок в историю при включенной автоматической установке текущей папки на пассивной панели (см. пожелание от DV)
Версия 1.3.4
Исправлена ошибка определения папки возврата при запуске из МЕНЮ плагинов (F11)
Версия 1.4.1
Реализовано построение дерева при вызове из панели плагина ArcLite (с некоторыми ограничениями)
Очередная попытка навести порядок с корневой папкой при старте модуля и с папкой возврата.
Положено начало локализации скрипта. Для этого требуется модуль BAX.GetMsg (обсуждение)
Версия 1.4.2
Полностью реализован функционал при работе с деревом плагина ArcLite (открытие текущей папки на пассивной панели, выход из дерева с переходом на текущую папку)
Очередная попытка навести порядок с корневой папкой при старте модуля и с папкой возврата.
Реализовано восстановление позиций как активной, так и пассивной панелей.
Для плагиновой (ArcLite) панели реализовано автоматическое открытие пути от корневой папки к текущей и позиционирование на ней при старте дерева.
Изменена логика открытия узлов дерева при старте: "свёрнутыми" делаются не только узлы заданного уровня вложенности, но и все, входящие в них.
При вызове по префиксу с указанием корневого пути (например, ptree:C:\%TEMP%), если текущая папка является вложенной по отношению к указанной в командной строке, дерево автоматически позиционируется на текущей папке.
Добавлена возможность "косвенного" указания дерева в командной строке: ptree:@"<имя_файла_дерева>"
где имя_файла_дерева - имя файла - результата вывода системной утилиты tree.com.
*) Этот синтаксис делает возможным использование кэша… Ну, правда, пока только в полуавтоматическом режиме.
Версия 2.1.1 (экспериментально)
Полностью убрано использование утилиты tree.com. Составление дерева реализовано средствами языка LUA. Также при составлении дерева архива исключено создание временной папки со структурой каталогов архива.
Версия 2.1.2 - убран отладочный вывод (извините, забыл сразу) Версия 2.2.1
Отменён запрет на немедленный переход на каталог внутри архива.
Добавлена возможность показа времени изменения каталога.
Предусмотрены несколько режимов показа панели дерева. В некоторых режимах добавлен столбец "Время/дата изменения каталога". В некоторых режимах время изменения каталога выводится в формате ЧЧ:мм; в других - в формате ЧЧ:мм:сс (с секундами). В статусной строке также предусмотрен показ времени модификации.
Предусмотрена защита от переключения режима панели дерева в непредусмотренный вид (кроме пользовательских режимов). Также на время показа дерева выключается настройка Каталоги вперёд (Show directories first). Сделано для показа дерева папок внутри архива (чтобы имя архива было выше дерева папок).
5. Глубокий рефакторинг.
Исправлена ошибка, проявлявшаяся при чтении из кэша (появилась в версии 2.3.1)
Версия 2.4.1
В сообщении о неактуальности списка папок (кэша) добавлена возможность перестроить его для всего диска.
Реализована возможность обновления текущей ветки дерева (по клавише CtrlR). При этом читаются папки, вложенные в текущую, заменяют те, что сохранены в кэше, новый список папок сохраняется на диск.
Значительно переработан интерфейс. Предусмотрено более подробное отображение процессов.
Перед составлением и чтением списка папок с диска освобождается память переменной, занятой этим списком. Вызывается сборщик мусора.
Версия 2.5.1
Добавлена возможность удаления ветки дерева. Ошибки удаления пока не обрабатываются (кроме сообщения об ошибке).
Исправлены ошибки:
Вылет при обновлении ветки, если кэш не создавался и не читался с диска.
Обновление корневой ветки по Ctrl+R.
Сортировка и поиск папок были в некоторых местах регистрозависимыми (!).
Рефакторинг
Версия 2.6.1
Реализован вызов дерева на пассивной панели. При этом "стартовым" каталогом является текущий каталог активной панели.
*) Вызов дерева происходит по горячей клавише Ctrl+T в случае, если стандартное дерево FAR-а выключено.
Добавлена настройка "Показывать дерево от корня". Если настройка включена, то по Ctrl+T выводится дерево, начиная от корневой папки диска; указатель позиционируется на текущей папке активной панели.
Исправлены некоторые неточности. Например, можно было развернуть папку, а затем обновить содержимое панели (Ctrl+R); при этом папка снова становилась свёрнутой.
Версия 2.6.2.
Изменены некоторые хоткеи. В частности, CtrlEnter теперь не открывает текущую папку на пассивной панели, а сносит имя текущей папки в командную строку (стандартное действие для панели); CtrlF не открывает диалог поиска, а сносит полный путь к текущей папке в командную строку (тоже стандартное действие), а поиск начинается по клавише F7.
Исправлены неточности первоначального позиционирования в дереве.
Панели плагинов MultiArc и Observer приравнены (с точки зрения ограничения) к панели плагина ArcLite.
Рефакторинг.
Версия 2.6.3.:
Исправлена ошибка, приводившая к вылету при активном фильтре и попытке выйти на узел верхнего уровня,
если он (узел) не виден из-за наложенного фильтра. Ошибка описана тут.
Реализовано составление дерева для контейнеров, не поддерживаемых утилитой 7z. Проверено для случаев: контейнер - msi-пакет и виртуальный диск для vmware; открыты плагином Observer (отдельная благодарность citRiks-у за напоминание о far.Host)
Реализовано закрытие дерева по повторному нажатию Ctrl+T (если дерево уже открыто)
Оптимизация, рефакторинг
Версия 2.6.4.
Реализована возможность копирования файла в папку, соответствующую текущему узлу дерева. Имя папки назначения подставляется в диалог копирования вместо имени формата папки плагина.
Реализован переход на узел того же уровня, имеющий того же предка (sibling node). Для этого предусмотрены клавиши Alt+↑ и Alt+↓
Добавлена возможность выводить столбец с количеством файлов в папке, соответствующей узлу дерева.
Версия 2.6.5
Исправлена ошибка, возникавшая при перестроении всего дерева по клавише Ctrl+R (обновить). Кроме того, по этой клавише возможно обновление кэша.
При выходе из дерева состояние другой панели теперь восстанавливается только в случае, если включено немедленное открытие текущего каталога на противоположной панели.
Добавлен минимальный контроль актуальности данных о папке в кэше: если в корневой папке имеются подпапки, а дерево формируется пустым, то выводится сообщение о критической неактуальности кэша и предлагается его перестроить. В случае отказа только перестраивается в памяти ветка корневого каталога дерева.
При обновлении дерева по Ctrl+R также предлагается обновить кэш диска.
Экспериментально!] При смене каталога на другой (не_древесной) панели (если она активна) указатель в дереве переносится на соответствующий узел дерева; при этом он помечается символом «►».
1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Mon 14 Dec, 2020 07:40, edited 37 times in total.
Спасибо!
Несколько пожеланий касательно дружественности к пользователю:
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.
DV,
У меня происходит быстро закрытие всего ФАРа и самого дерева,
память да, ФАР становится ~650 МБ (открывал по диску "Це")
Ну вопечм, "переходите на х64"
Архитектурно вся луа-таблица держится в памяти, поэтому улучшений в этом плане видимо не предвидится.
А я ведь предупреждал что лучше в sqlite держать базу
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 - тормоза снимаются?
buniak_a_h wrote: ↑Tue 28 Jul, 2020 10:42
Я читаю в переменную и во второй раз уже не читаю диска (если не вышел срок годности или юзер не потребовал обновить). Поэтому насчёт "повторного чтения" я не совсем понял. Может, ошибка вкралась…
Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
citRiks wrote: ↑Tue 28 Jul, 2020 10:45
Он неудачно высказался, да, но я думаю он имел ввиду "при повторном чтении (уже) ИЗ КЭША".
тогда опять загружается таблица в память конечно же
Не-не, я так и понял. Если один рав кэш читался с диска, то он запоминается в переменной и с диска (именно кэш!) не читается.
Привожу детали всего эксперимента:
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.
Вышла версия 2.4.1. Основная новость - возможность обновления текущей ветки дерева (перестроение списка папок). Актуально, если не видно папок, появившихся после последнего сохранения кэша. Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую …
Вышла версия 2.5.1.
Что в ней:
1. Добавлена возможность удаления ветки дерева. Ошибки удаления пока не обрабатываются
(кроме сообщения об ошибке).
2. Исправлены ошибки:
2.1. Вылет при обновлении ветки, если кэш не создавался и не читался с диска.
2.2. Обновление корневой ветки по Ctrl+R.
2.3. Сортировка и поиск папок были в некоторых местах регистрозависимыми (! - см. ниже).
3. Рефакторинг
buniak_a_h wrote: ↑Thu 30 Jul, 2020 05:41
Почему-то удалённые папки и так не отображаются в дереве. Пока не могу найти, почему так. Но бороться с этим не планирую …
Оказалось, что эта "странность" - симптом ошибки (из-за регистронезависимой сортировки и регистрозависимого бинарного поиска последний оканчивался неудачей, и в этом случае срабатывала «соломка» - список папок для ветки перечитывался с диска). Исправлено
Открыл для себя сочетание Ctrl+F6 (Expand All) - и обнаружил, что оно не только разворачивает все узлы, но также меняет режим сортировки с "u" на "s", что в некоторых случаях приводит к чудесам отображения дерева.
Реализован вызов дерева на пассивной панели. При этом "стартовым" каталогом является текущий каталог активной панели. ¹) Вызов дерева происходит по горячей клавише Ctrl+T в случае, если стандартное дерево FAR-а выключено.
Добавлена настройка «Показывать дерево от корня». Если настройка включена, то по Ctrl+T выводится дерево, начиная от корневой папки диска; указатель позиционируется на текущей папке активной панели.
Исправлены некоторые неточности. Например, можно было развернуть папку, а затем обновить содержимое панели (Ctrl+R); при этом папка снова становится свёрнутой.
Изменены некоторые хоткеи. В частности, CtrlEnter теперь не открывает текущую папку на пассивной панели, а сносит имя текущей папки в командную строку (стандартное действие для панели); CtrlF не открывает диалог поиска, а сносит полный путь к текущей папке в командную строку (тоже стандартное действие), а поиск начинается по клавише F7.
Исправлены неточности первоначального позиционирования в дереве.
Панели плагинов MultiArc и Observer приравнены (с точки зрения ограничения) к панели плагина ArcLite.