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

Здесь обсуждается всё, что касается макросов.
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:

HaRT wrote: Sat 14 Mar, 2020 16:11
buniak_a_h wrote: Sat 14 Mar, 2020 15:59 Что такое "быстрый фильтр"?
Я имел в виду скрипты «Автофильтр» или «Фильтр панели».
У скрипта PanelAutoFilter мне не удалось вызвать фильтр ни для обычной панели, ни для дерева. Уж очень экзотические там хоткеи.Конфликтуют даже с PuntoSwitcher-ом!
Фильтр PanelFilter, наверно, можно сделать. Проблнма у меня в том, что при его вызове (у меня - CtrlP)вызывается диалог установки фильтра, а тогда в нём нет смысла. Но фильтрацию узлов дерева с учётом обычного фильтра я, наверно, сделаю (пока особых проблем не вижу).
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

buniak_a_h wrote: Sun 15 Mar, 2020 00:09Так что всё же скорее не я чего-то не понимаю, а Вы.
действительно, я видимо поспешил с выводами. но когда на обеих панелях корень диска, на котором установлен фар, при вызове скрипта, неважно меню диска или из меню плагинов — показывается папка фара. так как скрипт показывает дерево того, что находится на левой панели при вызове из меню (возможно там более сложная логика), это меня сбило с толку.
и если вызвать в папке, в которой нет других папок — падает в 338 строке.
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 »

zg wrote: Sun 15 Mar, 2020 00:48 и если вызвать в папке, в которой нет других папок — падает в 338 строке.
Была такая беда; я исправлял. Снова сломалось. Спасибо.
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 »

zg, исправил …
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 »

zg wrote: Sun 15 Mar, 2020 00:48 скрипт показывает дерево того, что находится на левой панели при вызове из меню (возможно там более сложная логика)
При вызове из меню дисков корневой каталог берётся действительно из противоположной панели (если меню открывается на правой, корень берётся с левой; если на левой - с правой). Мне показалось это логичным. Единственно что, имеет смысл, наверно, и переходить сразу в дерево (если оно открывается на пассивной панели).
А при вызове дерева из меню плагинов или с командной строки корень дерева берётся с активной панели, и дерево тоже открывается на активной панели.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Спасибо, радуюсь что выросло наконец норм. дерево.
Давайте сравним с оригинальным деревом
Во-первых, много плюсов по сравнению с оригиналом, открытость кода позовляет допиливание.
Минусы по сравнению с оригиналом:
1.) Изза отсутствия кэша в той или иной форме,
каждый раз на больших дисках получаются тормоза, в оригинале - нет.
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 »

citRiks wrote: Sun 15 Mar, 2020 19:40 2.) Отсутсвие перехода в папку выше (оставаясь в режиме дерева)
Есть. CtrlShiftPgUp. Просто CtrlPgUp я поначалу сделал, но быстро понял, что у меня есть привычка так выходить из плагиновой панели, и я решил переделать на то же, но с Shift-ом.
В опубликованную версию закралась ошибка: при переходе по CtrlShiftPgUp в корневой каталог диска я случайно убираю конечный слэш; в результате отражается не корень, а фих знает что.
citRiks wrote: Sun 15 Mar, 2020 19:40 1.) Из-за отсутствия кэша в той или иной форме,
каждый раз на больших дисках получаются тормоза, в оригинале - нет.
Насколько я понял, именно наличие этого кэша было главной причиной "отказаться" (ну, почти) от дерева. Надо этот кэш поддерживать; я не совсем представляю, например, как он актуализируется, если папки создаются и уничтожаются сторонними продуктами … Вряд ли там вешается резидентный хук на дисковое событие … У нас когда-то был такой функционал - его все антивирусы блокировали. :-)
Вопрос: а зачем? Этот модуль и был задуман для работы с каталогом. А для работы с дисками есть стандартное ФАРовское дерево.
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: Sun 15 Mar, 2020 21:57 В опубликованную версию закралась ошибка: при переходе по CtrlShiftPgUp в корневой каталог диска я случайно убираю конечный слэш; в результате отражается не корень, а фих знает что.
Сейчас попробовал CtrlShiftPageUp, или ничего не поисходит, или действительно фиг знает что :)
И мне кажется лучше чтобы по обычному Enter (..) было бы
чинится?
buniak_a_h wrote: Sun 15 Mar, 2020 21:57 Насколько я понял, именно наличие этого кэша было главной причиной "отказаться" (ну, почти) от дерева. Надо этот кэш поддерживать; я не совсем представляю, например, как он актуализируется, если папки создаются и уничтожаются сторонними продуктами …
ну можно сделать чтобы НЕ обновлялось автоматически, только по инициативе юзера, по какому-нибудь CtrShiftR например
Вопрос: а зачем? Этот модуль и был задуман для работы с каталогом. А для работы с дисками есть стандартное ФАРовское дерево.
чтобы было удобно, т.е. меньше лишних нажатий юзеру, переключений на другое дерево, редаткирований пути (как сейчас у вас в AltF4)
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

buniak_a_h wrote: Sun 15 Mar, 2020 21:57 Насколько я понял, именно наличие этого кэша было главной причиной "отказаться" (ну, почти) от дерева. Надо этот кэш поддерживать; я не совсем представляю, например, как он актуализируется, если папки создаются и уничтожаются сторонними продуктами …
Никак не актуализировался. Если структура папок изменялясь кем-то, кроме Far, надо было нажимать CtrlR, чтобы пересканировать дерево.
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 »

Опубликована версия 1.3.1. Предусмотрено взаимодействие со скриптом BAX_Search, реализующим поиск и фильтрацию по панели.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

Голос из прошлого: для FAR 3.0 build 5355 x86 скрипт версии 1.3.1 выдаёт:

Code: Select all

╔══════════════════════════════════════════════════════ Error ════════════════════════════════════════════════╗
║ C:\FAR3\Plugins\LuaMacro\LuaMacro.dll:                                                                      ║
║ C:\FAR3\Profile\Macros\scripts\TreePanel.lua:231: attempt to concatenate a nil value                        ║
║ stack traceback:                                                                                            ║
║    C:\FAR3\Profile\Macros\scripts\TreePanel.lua:231: in function 'TreeToFileList'                           ║
║    C:\FAR3\Profile\Macros\scripts\TreePanel.lua:261: in function 'TreeToObject'                             ║
║    C:\FAR3\Profile\Macros\scripts\TreePanel.lua:553: in function 'action'                                   ║
║    C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:492: in function <C:\FAR3\Plugins\LuaMacro\LuaMacro.lua:441>       ║
╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                { OK }                                                       ║
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
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 »

DV, на сайте уже нету такой версии… Может, скинете куда-нить в доступное место?
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 »

DV, некоторое время назад была исправлена ошибка работы со строками, содержащими не-ANSI символы. Изменения были сделаны с моей подачи. Я думаю, дело в этом. Увы, переделывать скрипт для учёта той "особенности" я затруднюсь. Если дело в этом.
App
Я посмотрел историю. Исправления были внесены в версию 5459. Видимо, надо добавить ограничение … Извините.
Last edited by buniak_a_h on Tue 24 Mar, 2020 13:56, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

Не уверен, что проблема в работе со строками. Выложил Far30b5355.x86.20190122.7z здесь: https://easyupload.io/gvt1x1
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 »

DV wrote: Tue 24 Mar, 2020 15:58 Не уверен, что проблема в работе со строками.
Посмотрел на старом ФАРе.
Дело, конечно, в строках. Уровень вложенности узла я определяю по количеству символов псевдографики перед именем папки. А до LuaFAR-а версии 736 разбор строк, содержащих двухбайтовые символы, вместо позиции символа выдавал номер байта. В результате у первой папки уровень вложенности вместо "1" получается "3", а путь для 3-го уровня ещё не сформирован. Я добавил контроль, уж очень не хочется синтаксический разбор строк переделывать в расчёте на странную библиотеку Selene Unicode, которая путается в символах и байтах.
Ура разработчикам, вняли моим доводам и заменили эту библиотеку на luautf8 (если я правильно понял суть исправления).
Post Reply

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