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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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.6.
  1. Исправлен «снос» имени текущей папки в командную строку: теперь оно заменяет отмеченную часть командной строки или (если ничего не отмечено) вставляется в текущую позицию строки.
  2. Исправлена мелкая неточность: вопрос о пересоздании кэша задаётся только в том случае, если задан период актуализации кэша
TreePanel_2_6_6.7z
(31.08 KiB) Downloaded 143 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Mon 14 Dec, 2020 07:40, edited 37 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

citRiks,
1. Полный список мне не нужен - мне ж только папки нужны
2. По Esc функция снимается, но возвращает nil, а не тот список, что к моменту снятия накоплен.
3. В некоторых случаях структура, передаваемая в бэккол-функцию RecursiveSearch первым параметром, содержит больше информации, чем win.GetFileInfo. В результате я заменил последнюю на свою. Я не проверил, как заполняет эту структуру GetDirList.
4. Пока я всё это пишу, работает (уже минут 5, не засёк) far.GetDirList([[C:\]]). По-моему, моя сейчас быстрее строит дерево всего диска.
P/S. Уже минут 10… Думаю, она зациклилась из-за циклических линков на диске C:
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks, я же не зря "зафиксировал" рабочую версию. Пишу абсолютно другую технологию:
1. Сначала читаются папки от корневой, вложенностью не более заданной в настройках. Каждой конечной из таких папок присваивается признак "не завершена".
2. При попытке открыть незавершённую папку происходит чтение папок на 1 уровень.
3. Вижу две проблемы:
3.1. "Распахнуть все" возможен только если все папки завершены
3.2. Поиск по вложенным - аналогично. Но тут, видимо, придётся запрашивать согласие на дочитывание папок.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Добавочка:
С такой технологией станет возможным построение дерева для "медленных" плагинов (NetBox, Network browser и т.п.)
P/S. far.GetDirList у меня ещё работает. Видимо, зациклилась.
Last edited by buniak_a_h on Sat 19 Dec, 2020 20:08, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h,
За Ctrl-T искаропки спасибо, так гораздо удобнее.
А нельзя сделать в дереве сортировки, не ломая структуру дерева?
Ну например по имени, Ctrl-F3.
Чтобы каждый уровень сортировался бы только внутри самого себя,
надеюсь что понятно обьяснил что имею ввиду
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

При делании обратно CtrlT, активная панель, которая не дерево,
уходит обратно в ту папку которая была при открытии дерева,
что как мне кажется не очень правильно.
Можно ли, сделать так, чтобы при выходе из дерева,
оставлять активную не-деревянную панель там где она есть?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Sat 19 Dec, 2020 21:25 А нельзя сделать в дереве сортировки, не ломая структуру дерева?
Мне казалось, sibling-и сортируются. Я делал, кажется. Общая сортировка, конечно, невозможна - она сломает структуру дерева.
citRiks wrote: Sat 19 Dec, 2020 21:29 Можно ли, сделать так, чтобы при выходе из дерева,
оставлять активную не-деревянную панель там где она есть?
Ну да, я думал об этом. Остановился "на полпути": восстанавливаю не-древесную панель только если включено автооткрытие панели. Логика такая: если на не-древесной панели явно папку не меняли (а она менялась только из-за открытия той, что текущая в дереве), то это не надо запоминать. На самом деле всё упирается в отсутствие ивентов для панелей: я бы повесил обработку (а) изменения папки на не-древесной панели и (б) изменение активности панели. Короче, я не знаю, как лучше. А когда не знаешь - либо делай настройку, либо при разный способах выхода делай разное восстановление. Подумаю.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Sat 19 Dec, 2020 19:26 А еще есть LuaFileSystem, там полный комплект для работы с файлами,
Не нашёл никакого упоминания. Это - таблица или функция? Поподробнее, плииз.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h,
А вариант "вообще не трогать недеревянную панель" чем плох?
Сделать такую галочку в настройках, и усе ... не ?

еще как вариант, - есть один скрипт для событий "смена панели/фокуса/активного элемента панелей",
у меня работает безупречно, сохраняя текущее расположение для восстановления после перезапуска.
viewtopic.php?p=162460#p162460
Last edited by citRiks on Sat 19 Dec, 2020 22:54, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Sat 19 Dec, 2020 22:45
citRiks wrote: Sat 19 Dec, 2020 19:26 А еще есть LuaFileSystem, там полный комплект для работы с файлами,
Не нашёл никакого упоминания. Это - таблица или функция? Поподробнее, плииз.
ну это практически стандартная библиотека для работы с файлами для всех луа-водов.
у фаро-водов не используется, потому что в ФАРе есть другие встроенные стредства.
но может, функции там будут как-то лучше чем-то, не знаю.
приаттачил, DLL класть в %FARPROFILE%\Macros\lib32\
есть оберточный модуль на луа ext.lua, а также тестовый скрипт и описание
Attachments
LFS.7z
(10 KiB) Downloaded 43 times
Last edited by citRiks on Sat 19 Dec, 2020 23:02, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Sat 19 Dec, 2020 22:53 А вариант "вообще не трогать недеревянную панель" чем плох?
Сделать такую галочку в настройках, и усе ... не ?
Противоречит настройке "Автоматически открывать текущую папку на пассивной панели". Т.е. если автооткрытие включено, то "не трогать" не получится.
citRiks wrote: Sat 19 Dec, 2020 22:53 есть один скрипт для событий "смена панели/фокуса/активного элемента панелей"
Если посмотрите, у меня он тоже есть. В упрощённом виде. Используется для позиционирования в дереве на узел, соответствующий папке, открытой на не-древесной панели. Увы, переключение панелей я не придумал, как отследить. Обратите внимание: кроме Tab-а и CtrlU есть ещё и переключение мышкой. Вот если бы у панели был свой уникальный хендл, как у редактора, можно было бы. Но для плагиновых панелей хендл - это хендл плагна.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

buniak_a_h wrote: Sat 19 Dec, 2020 23:22 Обратите внимание: кроме Tab-а и CtrlU есть ещё и переключение мышкой. Вот если бы у панели был свой уникальный хендл, как у редактора, можно было бы. Но для плагиновых панелей хендл - это хендл плагна.
у меня в этом скрипте все прекрасно отслеживается, вот сейчас проверил еще раз.
Да, все. о чем вы могли подумать, я уже там подумал и сделал :)
попробуйте, может пригодится.
Для запоминания - нужен sqlite3.exe только, но если запоминать ничего не нужно,
а только реагировать в сессии на события, то sqlite3.exe не нужен
Post Reply

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