Менеджер закладок для папок

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Менеджер закладок для папок

Post by IgorZ »

Данный скрипт позволяет назначать на папки и файлы закладки (закладка может содержать ссылки как на одну, так и на несколько целей, для разных панелей; подробнее во встроенной справке скрипта) и переходить по ним (или запускать их средствами ОС), а также по переменным окружения, содержащим пути. Идея взята у Shell Bookmark (с) Max Rusov, текст написан с нуля.
Скрипт содержит три макроса.
  • Сохранение текущей папки в новой закладке.
    Клавиша вызова: RCtrl+Shift/RAlt+последовательность клавиш.
  • Переход по закладке.
    Клавиша вызова: RCtrl+последовательность клавиш.
  • Меню закладок и настроек.
    Клавиша вызова: RCtrl+/.

Требуемая версия Far 3.0.4324+.

Attachments
BookmarkManager.3.0.5.7z
(24.77 KiB) Downloaded 69 times
Last edited by IgorZ on Fri 22 May, 2020 07:34, edited 19 times in total.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

Latest post of the previous page:

IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)
IgorZ wrote:Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
Независимо от кэширования (это не главное).
Я не уверен что количество строк исходника можно существенно сократить, но код действительно упростился бы, если всю работу с настройками убрать в 2 функции, аналогичные mf.msave/mf.mload.
Собственно единственное чего тут не хватает в стандартных функциях, это возможности работать с локальным профилем.
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

John Doe wrote:
IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)
Допустим, у меня есть макрос сравнения двух файлов, назначенный на CtrlC, и закладка CONF, назначенная на %USERPROFILE%. Нажатие RCtrlC будет намедленно вызывать сравнение, и закладка будет недоступна (кроме как по RCtrl/). Сейчас же смогут благополучно отработать и то, и другое действие.
John Doe wrote:
IgorZ wrote:Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
Независимо от кэширования (это не главное).
Я не уверен что количество строк исходника можно существенно сократить, но код действительно упростился бы, если всю работу с настройками убрать в 2 функции, аналогичные mf.msave/mf.mload.
Собственно единственное чего тут не хватает в стандартных функциях, это возможности работать с локальным профилем.
Чтение/запись везде убраны в небольшие функции, там сворачивать уже практически некуда, да и незачем. Операции в разных местах происходит по разным алгоритмам. Да и реальный объём выполняемых скриптом действий возрастёт в разы, а то и на порядок. Нет, сейчас всё практически оптимально, разве что в следующей версии формирование меню соптимизирую. Но это уж когда какие-то ещё замечания/пожелания появятся.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

IgorZ wrote:
John Doe wrote:
IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)
Допустим, у меня есть макрос сравнения двух файлов, назначенный на CtrlC, и закладка CONF, назначенная на %USERPROFILE%. Нажатие RCtrlC будет намедленно вызывать сравнение, и закладка будет недоступна (кроме как по RCtrl/). Сейчас же смогут благополучно отработать и то, и другое действие.
Это другое дело. Приоритет макросов для закладок дейстствительно должен быть >50.
Меня смутило то, что он разный у двух макросов.
Чтение/запись везде убраны в небольшие функции, там сворачивать уже практически некуда, да и незачем.
По поводу "незачем" спорить не стану.
Что касается "некуда", то мне самому стало любопытно попробовать это при случае, из спортивного интереса.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Менеджер закладок для папок

Post by Max Rusov »

Хотелось бы еще поддержку плагинных панелей. Хотя бы в ограниченном объеме, типа:

R --> REG:\HKEY_CURRENT_USER\Software
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

При попытке вывести меню получаю ошибку

Code: Select all

...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua:228: attempt to concatenate field 'Delay' (a nil value)
stack traceback:
   ...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua: in function <...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua:146>
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

John Doe wrote:При попытке вывести меню получаю ошибку

Code: Select all

...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua:228: attempt to concatenate field 'Delay' (a nil value)
stack traceback:
   ...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua: in function <...ofile\Macros\scripts\BookmarkManager\BookmarkManager.lua:146>
В строку 228 нет упоминания поля Delay (такого поля вообще нет в скрипте), в строке 146 нет функции. Но в строке 146 стоит eval(<нажатая комбинация клавиш>,2), надо копать в эту сторону.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

Отбой. Скрипт обновил, да макросы не перегрузил...
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

Версия 1.0.4 - Небольшая оптимизация формирования меню, поддержка плагиновых панелей, мелкие правки.
Почему-то не переходит в SQLite database editor (просто встаёт в панели на файл, внутрь которого надо перейти), причём panel.SetPanelDirectory() возвращает true. Видимо, ошибка плагина? Остальные выборочно проверенные плагины поддерживаются нормально.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

LoadSettings() во всех condition это зря. По моему опыту использование Settings API сравнительно дорого обходится.
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

John Doe wrote:LoadSettings() во всех condition это зря. По моему опыту использование Settings API сравнительно дорого обходится.
На практике тормозов не замечено. А с точки зрения красоты и правильности работы алгоритма - там им самое место, поскольку в condition приходится проверять параметры конфигурации, которые могли измениться с прошлого запуска скрипта. Можно было бы ещё закинуть всё в глобальные переменные, но это, на мой взгляд, некрасивый подход.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

IgorZ wrote: Можно было бы ещё закинуть всё в глобальные переменные, но это, на мой взгляд, некрасивый подход.
Зачем в глобальные?
https://t.me/FarManager — Telegram чат
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

John Doe wrote:
IgorZ wrote: Можно было бы ещё закинуть всё в глобальные переменные, но это, на мой взгляд, некрасивый подход.
Зачем в глобальные?
Как альтернативу БД, для взаимодействия нескольких запущенных экземпляров. Хотя с точки зрения сохранности данных тоже не идеал, но работы с БД было бы меньше. Впрочем, в условиях, когда имеющийся алгоритм работает без нареканий (в т. ч., по скорости), это всё ненужная абстракция. Да и не люблю в глобальные переменные сорить без необходимости, как уже говорил.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

Глобальные переменные не разделяются разными экземплярами фара, поэтому база единственный вариант.

Мне казалось что кроме самих закладок синхронизировать между экземплярами нечего. Но теперь я вижу что вы действительно хотите синхронизировать все.
https://t.me/FarManager — Telegram чат
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

John Doe wrote:Глобальные переменные не разделяются разными экземплярами фара, поэтому база единственный вариант.
О, точно. Что-то меня переклинило.
John Doe wrote:Мне казалось что кроме самих закладок синхронизировать между экземплярами нечего. Но теперь я вижу что вы действительно хотите синхронизировать все.
Ну, вроде, логично. А что, есть другие предложения?
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Менеджер закладок для папок

Post by John Doe »

IgorZ wrote:
John Doe wrote:Мне казалось что кроме самих закладок синхронизировать между экземплярами нечего. Но теперь я вижу что вы действительно хотите синхронизировать все.
Ну, вроде, логично. А что, есть другие предложения?
Поскольку всё работает как задумано, то и предложений нет.
Изначально вопрос возник по причине того, что я считал достаточным считывать настройки при старте, т.е. однократно.
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Re: Менеджер закладок для папок

Post by IgorZ »

Версия 1.1 - Поддержка установки одновременно (или раздельно) активной и пассивной панели, мелкие правки. Экспериментально: изменён принцип хранания и загрузки языковых данных. Просьба отписаться в теме, который вариант лучше на Ваш взгляд. Если новый вариант понравится, внедрю его и в остальные свои скрипты с поддержкой настройки языка.
Post Reply

Return to “Полезные макросы и скрипты”