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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 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 - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.



Чего может не хватать:
  • обновления дерева (по таймеру, например);
  • удаления поддерева
  • вывода характеристик (суммарный размер поддерева, дата создания папки, самого нового файла, количество файлов, атрибуты папки).
  • Что ещё - не знаю.
Если кому-нить это интересно, перечисленные недоделки я по возможности доделаю. Также принимаются предложения, чего может ещё не хватать для нормальной работы. Но так-то вроде вполне удобненько получилось … :-)
Опять же если будут добровольцы - локализацию и перевод хелпа были бы полезны. Если скрипт кому-нить покажется полезным …
Версия 1.3.1
  1. Сделано извещение о формировании дерева
  2. Рефакторинг, исправлены мелкие неточности:
    1. Корневая папка не раскрывается и не сворачивается
    2. Исправлен выход по CtrlPgDn (раньше при выходе было позиционирование на текущей папке дерева; теперь переход в неё)
  3. В командной строке реализована передача корневой папки дерева
  4. Реализовано взаимодействие с макросом поиска/фильтрации. Для этого добавлено два хоткея: CtrlF - поиск и CtrlShiftF - фильтр. Сам макрос можно скачать по адресу: viewtopic.php?p=159786
Версия 1.3.2
  1. Исправлена несовместимость с версией LuaFAR-а ранее 736
Версия 1.3.3
  1. запрещено занесение "проходных" папок в историю при включенной автоматической установке текущей папки на пассивной панели (см. пожелание от DV)
Версия 1.3.4
  1. Исправлена ошибка определения папки возврата при запуске из МЕНЮ плагинов (F11)
TreePanel_1_3_4.7z
(9.58 KiB) Downloaded 10 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Thu 26 Mar, 2020 17:35, edited 10 times in total.

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 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: 5769
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 141 times
Contact:

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

Post by zg »

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

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 times
Contact:

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

Post by buniak_a_h »

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

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 times
Contact:

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

Post by buniak_a_h »

zg, исправил …

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 times
Contact:

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

Post by buniak_a_h »

zg wrote:
Sun 15 Mar, 2020 00:48
скрипт показывает дерево того, что находится на левой панели при вызове из меню (возможно там более сложная логика)
При вызове из меню дисков корневой каталог берётся действительно из противоположной панели (если меню открывается на правой, корень берётся с левой; если на левой - с правой). Мне показалось это логичным. Единственно что, имеет смысл, наверно, и переходить сразу в дерево (если оно открывается на пассивной панели).
А при вызове дерева из меню плагинов или с командной строки корень дерева берётся с активной панели, и дерево тоже открывается на активной панели.

citRiks
Posts: 417
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 133 times
Been thanked: 38 times

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

Post by citRiks »

что-то тут не так? :)
image.png
image.png (4.02 KiB) Viewed 311 times

citRiks
Posts: 417
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 133 times
Been thanked: 38 times

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

Post by citRiks »

Спасибо, радуюсь что выросло наконец норм. дерево.
Давайте сравним с оригинальным деревом
Во-первых, много плюсов по сравнению с оригиналом, открытость кода позовляет допиливание.
Минусы по сравнению с оригиналом:
1.) Изза отсутствия кэша в той или иной форме,
каждый раз на больших дисках получаются тормоза, в оригинале - нет.
2.) Отсутсвие перехода в папку выше (оставаясь в режиме дерева)

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 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.) Из-за отсутствия кэша в той или иной форме,
каждый раз на больших дисках получаются тормоза, в оригинале - нет.
Насколько я понял, именно наличие этого кэша было главной причиной "отказаться" (ну, почти) от дерева. Надо этот кэш поддерживать; я не совсем представляю, например, как он актуализируется, если папки создаются и уничтожаются сторонними продуктами … Вряд ли там вешается резидентный хук на дисковое событие … У нас когда-то был такой функционал - его все антивирусы блокировали. :-)
Вопрос: а зачем? Этот модуль и был задуман для работы с каталогом. А для работы с дисками есть стандартное ФАРовское дерево.

citRiks
Posts: 417
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 133 times
Been thanked: 38 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: 679
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 56 times

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

Post by IgorZ »

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

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 times
Contact:

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

Post by buniak_a_h »

Опубликована версия 1.3.1. Предусмотрено взаимодействие со скриптом BAX_Search, реализующим поиск и фильтрацию по панели.

DV
Posts: 394
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 15 times
Been thanked: 14 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 }                                                       ║
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 times
Contact:

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

Post by buniak_a_h »

DV, на сайте уже нету такой версии… Может, скинете куда-нить в доступное место?

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 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: 394
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 15 times
Been thanked: 14 times

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

Post by DV »

Не уверен, что проблема в работе со строками. Выложил Far30b5355.x86.20190122.7z здесь: https://easyupload.io/gvt1x1

buniak_a_h
Posts: 1577
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 107 times
Been thanked: 137 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 “Обсуждение макросов”