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)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Реализовать дерево директорий панельным модулем на Луа
Posted: Fri 13 Mar, 2020 14:57
by citRiks
Latest post of the previous page:
buniak_a_h wrote: ↑Fri 13 Mar, 2020 14:40
В предлагаемом bat-нике во временной папке создается зеркальная структура папок и далее всё делается с ней.
ну пустые папки в ТЕМПе - это приблизительно ноль ресурсов компа, а потом они стираются..
buniak_a_h wrote: ↑Fri 13 Mar, 2020 14:40
Можно. Есть arclite, в него по моей просьбе добавлен функционал для удобства использования в макросах. Судя по скорости реакции автора, он не против обоснованных пожеланий.
не очень понимаю как это делать через arclite, но если вы понимаете и реализуете, то буду счастлив и этим
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 12:09
by Novichok 13
Всем привет! Поддерживаю идею создания этой фичи. Я тоже считаю что очень стоит сделать дерево для архивов,
и временные пустые директории не выглядят сверх-нагрузкой. Всем спасибо !
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 15:24
by buniak_a_h
У меня возник вопрос (проблема выбора):
1. Если в FileName пихать полный путь, то при переходах по папкам (узлам дерева) меняется текущая папка; т.е. запуск внешних команд происходит из той папки. НО! Не работает QuickSearch.
2 Если в FileName пихать только имя папки, то - наоборот - работает поиск по панели, зато не выставляется текущий каталог.
Разрешить это противоречие я не могу; надо выбирать. Если есть заинтересованные - что посоветуете?
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 15:38
by HaRT
buniak_a_h wrote: ↑Sat 14 Mar, 2020 15:24
проблема выбора
А что в том и другом случае будет с фильтром панели?
Реализовать дерево директорий панельным модулем на Луа
buniak_a_h wrote: ↑Sat 14 Mar, 2020 15:24
проблема выбора
А что в том и другом случае будет с фильтром панели?
1. Это не новичок, это я писал
2. Это намёк, что для панели дерева надо установить флаг OPIF_DISABLEFILTER ? Логично, спасибо. Действительно, фильтрация полностью поломает древовидную структуру. Для сокрытия внутренностей есть другой способ.
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 15:47
by HaRT
buniak_a_h wrote: ↑Sat 14 Mar, 2020 15:43
Это не новичок, это я писал
Это не я, это форум глючит с мобильника, известная проблема, потом с компа исправлю (а вы у себя, надеюсь, можете исправить уже сейчас). 18:00 MSK Я исправил и там, и там.
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 15:53
by HaRT
buniak_a_h wrote: ↑Sat 14 Mar, 2020 15:43
фильтрация полностью поломает древовидную структуру
Зато быстрым фильтром отлично заменяется быстрый поиск. Поэтому если фильтр работает, пусть и с нарушением дерева, то я за то, чтобы оставить фильтр и текущую директорию, пожертвовав быстрым поиском.
Реализовать дерево директорий панельным модулем на Луа
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 16:24
by buniak_a_h
HaRT, понятно.
Не пробовал. Я какой-то из них ставил, мне не понравилось (по-моему, просто непривычными хоткеями).
--
Неприятно, что быстрый поиск по образцу вида *a тоже не работает; почему - непонятно мне. Если знаете, в чём дело - напишите (после публикации версии 1.2.1 - там будет полный путь). Если нет - я разбираться, наверно, не буду. Легче сваять свой быстрый поиск …
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 23:20
by buniak_a_h
Выпустил версию 1.2.1.
Основное внутреннее отличие: в поле FileName теперь записан полный путь к соответствующему каталогу.
Внешнее отличие: управление стрелками, как принято в деревьях; переход на каталог выше; строка подсказки функциональных клавиш. Дописан хелп.
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 23:46
by zg
если нет анси плагинов, текущая папка процесса всегда будет %FARHOME%, соответственно дерево — всегда папка фара.
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 23:54
by buniak_a_h
Возможно, я чего-то не понимаю. Но … Просто тупо сделал dpr из одной строчки:
и в последней версии получаю именно папку, соответствующую узлу дерева, а не %FarHome%. ЧТД.
Реализовать дерево директорий панельным модулем на Луа
Posted: Sat 14 Mar, 2020 23:58
by zg
buniak_a_h wrote: ↑Sat 14 Mar, 2020 23:54Возможно, я чего-то не понимаю.
ваш макрос запускается как внешний процесс фаром?
Реализовать дерево директорий панельным модулем на Луа
Posted: Sun 15 Mar, 2020 00:09
by buniak_a_h
Какой макрос?
dpr - это файл программы на структурном паскале (на Delphi). Я сделал маленький тестик в одну строчку. Получил exe-шник. Именно его я запускаю из командной строки во время работы панельного модуля. И он отрабатывает правильно (т.е. в соответствии с ожиданием): выводит имя папки, которой соответствует текущий узел дерева.
Я не силён в формулировках; Вы мне уже писали, что переназначить текущий каталог системы невозможно. Но (а) в виндах уже нет такого понятия, как текущий каталог, есть стартовый каталог процесса и (б) я именно имел в виду "запуск внешнего процесса в контексте папки" (по-моему, я именно так и сформулировал). И этот тест показывает, что поведение именно то, что требуется. Так что всё же скорее не я чего-то не понимаю, а Вы.
Реализовать дерево директорий панельным модулем на Луа
У скрипта PanelAutoFilter мне не удалось вызвать фильтр ни для обычной панели, ни для дерева. Уж очень экзотические там хоткеи.Конфликтуют даже с PuntoSwitcher-ом!
Фильтр PanelFilter, наверно, можно сделать. Проблнма у меня в том, что при его вызове (у меня - CtrlP)вызывается диалог установки фильтра, а тогда в нём нет смысла. Но фильтрацию узлов дерева с учётом обычного фильтра я, наверно, сделаю (пока особых проблем не вижу).