gotar wrote: ↑Thu 25 Jun, 2020 11:37
В каком месте надо поменять этот скрипт, чтобы при смене каталога он загружал lua скрипты из этого каталога?
Что-то я затупил…
1. А Вы уверены, что Вам надо именно загружать макросы, а не выполнить некий скрипт, описанный в файле в новой папке?
2. Если Вам надо повесить некий скрипт, зависящий от папки, на одну и ту же клавишу, то это делается проще: пишете один макрос, в condition указываете наличие файла (напр., FolderScript.lua), а в execute - выполнение скрипта, указанного в файле (например, через LoadFile('FolderScript.lua')([параметры])).
Как известно, самая точная документация к программе - это ее исходные тексты.
У меня в каталоге %FARPROFILE%\Macros\scripts несколько экранов файлов. Для большинства из этих файлов я не помню наизусть ни какие макросы в них описываются, ни какие горячие клавиши они используют. Однако, если внимательно посмотреть на такой файл, то можно увидеть что макросы в нем полезны, просто используются не слишком часто, в каких то специфических случаях. мое предположение состоит в том, что макросы которые будут использоваться, зависят от каталога в котором находятся редактируемые файлы. В одном каталоге я программирую - нужны одни макросы, в другом анализирую логи - нужны другие макросы, в третьем пишу пишу письма - и нужен новый вариант макросов. Для того чтобы воспользоваться обработчиком событий из моего предыдущего сообщения нужно переместить файлы из каталога %FARPROFILE%\Macros\scripts в другой каталог, оставив в этом каталоге только наиболее используемые файлы, которыми Вы пользуйтесь каждый день и о предназначении которых Вы всегда помните. У меня таких файлов оказалось 14 штук. Когда Вы используйте каталог для определенной работы Вы создаете в нем подкатолог Macros и переписываете в него дополнительные макросы, нужные для работы в этом каталоге. Теперь, когда Вы будете редактировать файлы макросы каталога редактируемого файла будут автоматически подгружаться, при редактировании файла из другого каталога эти макросы забудутся и загружатся макросы нового каталога.
Last edited by gotar on Tue 11 Aug, 2020 07:23, edited 1 time in total.
gotar,
И эта задача "контекстных" макросов решена вами полностью на данный момент?
Я решал похожую задачу и решил несколькими разными способами.
Например, еще один вариант помимо перезагрузки макросов, это не перезагружать макросы,
а делать контекстные действия через dofile() который будет браться в зависимости от контекста.
И еще.
Это навеяло мне про могучий-навороченный в прошлом но забытый сейчас комплекс из LuaFar_Context + RH + FL +++...
Там довольно интересная реализация, и сложная для не-авторов, видимо потому и оказалось заброшкой.
Но в результате там есть действтельно воможность именно контекстных действий, в зависимости от типа файла, места где.
В этой версии вылечены пара детских болезней, предыдущая удаляется
если у кого-то что не так, непонятно, не работает - сообщайте <удалено, актуальную версию смотреть в конце темы>
Last edited by citRiks on Mon 05 Oct, 2020 19:19, edited 1 time in total.
Починено куча багов, плюс ввиду некоторых произошедших изменений на уровне ФАРа, следующая версия, старая удляется
Искаропки просто сохраняет текущие расположения директорий и курсор в панелях, чтобы при перезапуске ФАРа это восстановилось.
Для "Не-искаропки" пишем в эту функцию что-нибудь полезное-нужное:
Логическия значения chg_* означают что изменилось, т.е. послужило триггером евента.
Евент со всеми chg_* = false и не придет, т.к. это было бы холостое срабатывание.
Так мы знаем что конкретно изменилось, если поменялся просто активный элемент без смены директории,
то например ничего не будем делать, а если сменилась сама директория, то может и захотим что-нибудь сделать
items - это активные панельные элементы, по одному справа и слева. chg_actv_P - фокус перешел, справа налево или справа налево, третьего недано.
Остальные значение Curr_* и Prev_* означают "было" и "стало", по сравению с предыдущим евентом.
Как например, Prev_RghtItem это какой был предыдущий активный элемент.
Пишу это так как хочу надеятся что еще есть и будут люди которые возьмутся за ФАР-скриптинг.
Общая рекоммендация - без Lua Explorer Advanced авторства @JohnDoe,
даже не суйтесь в фаровский скриптинг, даже в самое простейшее.
Далее, если есть серьезное желание скриптить не пропало, то сначала научиться в ZerоBraneStudio,
на форуме есть как настроить, оформлял тот же @JohnDoe.
Эти две темы Lua Explorer Advanced и ZerоBraneStudio должны быть первыми и основными темами для тех кто желает скриптить ФАР.
Понятно что для Hello World это не нужно, но для всего остального - нужно и обязательно.
отдельные гениальные личности здесь на форуме, которые успешно скриптят ФАР без этого,
начали бы это делать еще успешнее с этими инструментами, чем без оных.
seriously
PS Пока ничего не качать, залил кривую версию
залил нормальную версию, можно и нужно скачивать
удалено, актуальную версию смотреть в конце темы
Last edited by citRiks on Mon 05 Oct, 2020 21:31, edited 5 times in total.
Особенности реализации
1.) Минимальная потребность в таймере, может быть использовано без таймера.
Таймер включается/отключается параметром USE_TIMER в самом скрипте, в начале скрипта.
2.) Проверяются, но, боже упаси, не перехватываются,
ХотКеи свидетельствующие о смене дириктории - Tab, Enter, CtrlU, CtrlF1, CtrlF2,
этим достигается мгновенность реакции и при отсутствии таймера.
3.) Мгновенная, корректная, гарантированная реакция БЕЗ таймера достигается добавлением какого-нибудь любого content column,
можно пустого фэйкового в один символ, можно в "status" (который статус текущего файла внизу под панелью).
В скрипте есть однако полезный односимвольный content column,
но для его использования его нужно добавить в file panel modes, например:
image.png (7.24 KiB) Viewed 2481 times
Что дает прилагаемый Content column кроме обеспечания событийности:
* В одном символе показывает или hardlink если он есть, или symbolic линк если он есть, или выставленный archive bit если он есть.
Если ничего этого нет, то остается пустым, чтобы не загружать лишней информацией
* Если время сканирования на эти атрибуты файлов в директории слишком длинное и превзошло 5 секунд, то сканирование останавливается
Актуально для сетевых дисков или любых других медленных дисков, чтобы не тормозило
Last edited by citRiks on Mon 05 Oct, 2020 19:36, edited 1 time in total.
На всякий случай еще раз упоминаю, что скрипт ЗАВИСИТ от Sqlite3.exe, увы.
Лучше бы не зависел, так как чем меньше зависимостей тем лучше,
но руки все не доходят, а производительность вполне Ок и на моих совсем дохлых компьютерах тоже.
В приаттаченном REG-файле - избавление от некоторых побочных эффектов связанных с запусками sqlite3.exe,
причем без добавления других побочных эффектов
только страх опозориться перед потомками заставляет меня делать нормальный QA.
Добавлена функциональность позволяющая различать смену физической директории,
и директории в плагине, в архиве например.
Баги починены, перезалито.
citRiks wrote: ↑Mon 05 Oct, 2020 16:53items - это активные панельные элементы, по одному справа и слева
А для чего они? Те, что можно получить прямо от Фара, чем-то плохи? Я-то скриптом не пользуюсь, но другим может оказаться полезно знать.
citRiks wrote: ↑Mon 05 Oct, 2020 19:30
В одном символе показывает или hardlink если он есть, или symbolic линк если он есть, или выставленный archive bit если он есть.
HaRT wrote: ↑Tue 06 Oct, 2020 00:25А для чего они? Те, что можно получить прямо от Фара, чем-то плохи?
По многим причинам, но наверное все эти причины исходят из, как минимум, полезности консистентности, а как максимум - необходимости консистентности.
Если в двух словах - на момент обработки события текущие предметы (айтемы) курсор, и даже директории, могут уже отличаться от обрабатываемового события,
событие оно на то и событие чтобы быть несколько асинхронным, даже если рассинхрон всего лишь несколько милисекунд.
курсор может и за милисекунду уехать куда угодно, а нам надо на момент события где он был, а не где он сейчас.
Но и кроме консистентности, вопрос что эффективнее.
Т.е., например, создателю скрипта полезнее держать все данные в одной структуре, чтобы не бегать по разным углам пересобирая и обрабатывая данные.
Но, это полезно не только скриптописателю, но еще и самому ЦПУ, меньше пересобирать все, и больше делать чего-то может быть, более полезного.
Далее, получить набор данных вместе сразу в одной табличке полезно не только лишь всем, но еще и тому кому придется расширять возможности этого скрипта, для чего он и написан.
HaRT wrote: ↑Tue 06 Oct, 2020 00:25
В одном знакоместе можно довольно наглядно показывать любую комбинацию значений 5 атрибутов/флагов.
Да интересно, надо будет разобраться. я правда забыл упомянуть что в моем контент-колумне показываются пустые папки, большая буква Е - папака совсем пустая, малеьнкая буква Е - с другими пустыми директориями