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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 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: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

citRiks wrote: Mon 30 Mar, 2020 11:22 не думать "ок сейчас я в файловой панели, значит такое нажатие, а сейчас я в архиве - значит другое нажатие делать"
1. Я - не думаю. У меня Alt вызывает мой поиск. Но если это мешает (хотите пользоваться стандартным Atl-поиском), добавьте в condition условие, что работает только в дереве (пример, как определить, панель дерева или нет, есть в TreePanel.lua, функция IsPanelModule).
2. Перехватить одиночное нажатие ALt-а, на которое назначен макрос (искаробочный AltSearch.lua) невозможно. Перехватить Alt+букву тоже. Париться с ещё одним макросом - думаю, очень накладно будет. А стандартный Alt-поиск на дереве у меня не заработал.
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: Mon 30 Mar, 2020 11:38 1. ..
2. ..
Ок.. когда-нибудь гляну нельзя ли GetFindData получать фильтр по имени и раскрывать скрытые папки, или действительно в архивах буду вашим серчем пользоваться
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 11:18 Невьехал, какой статус-кво? выделенные файлы?
Не-не! Просто вернуться в ту же папку. Не всегда получалось.
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: Mon 30 Mar, 2020 11:44 Не-не! Просто вернуться в ту же папку. Не всегда получалось.
не сказал бы что это особо странно, после множества всяких postmacro, сетпаф и сетпанельдир, и чего еще там может.
наверное просто сохранить где были, и туда вовращаться, как вы наверное и сделали
PS
ааа.. дошло
вы и сохраняли в этой таблице, но СетПанельДир(<таблица-куда-идти>) не срабатывал?
таблица точно никак случайно не обнулялaсь в процессе?
Last edited by citRiks on Mon 30 Mar, 2020 11:50, edited 3 times 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: Mon 30 Mar, 2020 10:43 citRiks писал(а): ↑
Пн 30 мар, 2020 12:18
Из дальнейших предложений это сделать кэшинг.

В экспериментах сделано формирование дерева не сразу на все подпапки, а только на первые пару уровней. А достраивать при открытии узла. Это решает проблему "долгого" построения дерева (у меня tree.com на диске работает почти минуту) и делает кэшинг ненужным.
Не убежден в эффективности, в любом случае постоянное перечитывание, а если искать из корьня большого диска, то можно идти пить кофе пока вырастет дерево.
я бы сказал так:
1.) Изначально ничего нет никаких кэшей/сохранненого
2.) Юзер сделал в какой-то папке "Видеть Дерево
2.1.) Скрипт cохранил "tree_bax.txt" в этой папке, юзер получил дерево
3.) Юзер ушел погулять, вернулся, вызвал дерево на той же папке
3.1.) Скрипт видит что уже есть "tree_bax.txt", и ничего не перечитывает, работает с этим прежним файлом, юзер получил дерево
4.) Юзер ушел погулять, вернулся, вызвал дерево В ПОПДПАПКЕ той же папки
4.1.) Скрипт не видит в этой папке "tree_bax.txt", но проверяет есть ли "tree_bax.txt" во всех для него верхних (родительских) папках
4.2.) Если находит там "tree_bax.txt", то радостно вычленяет из него нужное, юзер получает свое дерево
4.3.) Если не находит, то строит дерево как в пункте (2.1.), юзер получил дерево

это в простейшем случае, дополнения могут быть такими
5.) Есть нажатие по которому юзер обновляет дерево
6.) Скрипт достаточно умный (и сделать это достаточно просто) чтобы выбрать из имеющихся в иерархии "tree_bax.txt" самый новый
и менее новые заменить на извлеченное из этого нового.

В этом сценарии все будет происходить мгновенно на дисках любого размера и любой тормознутости, или по тормознутой сети
для тормознутой сети, или там где нет permissions создавать кэши-файлы, можно локальные кэши создавать

PS
А можно и вообще все кэши (и для удлаенных/сетевых дисков тоже) хранить только на локальнном диске для быстроты , независимости, или просто для единого подхода
Last edited by citRiks on Mon 30 Mar, 2020 12:11, edited 3 times in total.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 12:04 постоянное перечитывание
Не-не! Перечитывание только в самом начале на малую глубину (миллисекунды) и при открытии узла, если он не помечен как конечный (ещё меньше). То, что заполнено - то заполнено; в процессе работы с деревом я не планирую его перестраивать.
Беда только при "развернуть все" на корне большого диска. Ну, тут уж "сам дурак" … И, кстати, в этом случае можно будет прервать по Esc!
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,
ну посмотрим как оно пойдет, попробую на большом диске с вашим поиском
тормозит, увы, просто сделал "дерево" на корне большого сетевого диска, но без каких-либо раскрываний

PS
или он все таки сохранит что-то на диск, а потом будет брать оттуда?
дождусь когда закончится, и попробую еще раз
Last edited by citRiks on Mon 30 Mar, 2020 12:20, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Mon 30 Mar, 2020 12:13 ну посмотрим как оно пойдет, попробую на большом диске с вашим поиском
тормозит, увы, просто сделал "дерево" на корне большого сетевого диска, но без каких-либо раскрываний
А что тормозит-то? Поиск или составление дерева?
Составление дерева не менялось.
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,
Вот еще что я бы мог предложить если можно :)
ВСЕ строковые сравнения делать не чувствительными к регистру.
вот например тут:
[сode]
local PathName,FarLang,HlpLang = (...):match("(.*)%.lua"),win.GetEnv("FARLANG"):sub(1,3),Far.GetConfig("Language.Help"):sub(1,3)
[/сode]
(что тут с форматированием?)
так как если расширение скрипта будет .Lua, или .LUA, то будут ненужные сюрпризы
Last edited by citRiks on Mon 30 Mar, 2020 12:55, edited 3 times 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: Mon 30 Mar, 2020 12:30 А что тормозит-то? Поиск или составление дерева?
Составление дерева не менялось.
а, ок, да, пока построение (все еще)
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,
не, это неправильно все таки,на любой большой папке каждый раз строим подолгу
довольно таки убивает идею, дерево ведь нужнее всего чтобы быстр ориентрироваться как раз в разветвленных больших таких
надо кэшировать, так есть это у вас планах или как?
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 30 Mar, 2020 10:56 код был бы намного проще, если бы функция panel.SetPanelDirectory работала всегда. У меня она не всегда работает. В частности, на не-плагиновых пнелях (и в некоторых плагинах, в частности MultiArc). [...]
Я писал, просил исправить (очень на баг похоже) - очень давно; увы - нет ответа.
Где это вы писали?
Для работы SetPanelDirectory необходима поддержка со стороны плагина: в информации о панели (GetPanelInfo) есть поле Flags, и если плагин поддерживает команду, то флаг PFLAGS_PLUGIN будет установлен.
buniak_a_h wrote: Mon 30 Mar, 2020 11:30 систему не понял, но иногда SetPanelDirectory то работает, то нет.
Систему я вам описал.
Возможно, в некоторых случаях получится и для неподдерживаемых плагинов как-то обойти, если что найдёте - делитесь, я в MultiPanel аналогичную задачу решаю.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 30 Mar, 2020 10:43 В экспериментах сделано формирование дерева не сразу на все подпапки, а только на первые пару уровней. А достраивать при открытии узла. Это решает проблему "долгого" построения дерева (у меня tree.com на диске работает почти минуту) и делает кэшинг ненужным.
Кэширование имеет смысл, поскольку позволяет открыть дерево мгновенно (а в фоне можно и обновление запустить).
Пару уровней для отображения это может быть и суперудобно для чего-то, но например не позволит реализовать функцию аналогичную штатной FindFolder.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 30 Mar, 2020 16:06 Где это вы писали?
Уже не припомню. Скорее всего на форуме. Давно было - во время разработки ClickToTitleDir. Пара моих замечаний на мантисе, причём исправление одной из моих ошибок Shmuel написал (исправление в исходники). Но в версию так и не вошло … :-(
John Doe wrote: Mon 30 Mar, 2020 16:06 Возможно, в некоторых случаях получится и для неподдерживаемых плагинов как-то обойти, если что найдёте - делитесь, я в MultiPanel аналогичную задачу решаю.
В упомянутом ClickToTitleDir переход в плагине (например, в MultiArc-е) реализован через последовательность PgUp / PgDn с позиционированием между ними…
John Doe, citRiks, по поводу кэширования. Есть же стандартное дерево, чем оно не устраивает? Точнее так: чего в нём нет того, что есть в TreePanel такого, ради чего нужен мой модуль?
Делал как раз чтоб от кэша не зависеть.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Чо-т у меня стандартное дерево уже минут 5 строится … Не в курсе так и должно быть?
Post Reply

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