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

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

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

Postby IgorZ » Fri 24 Jan, 2014 09:51

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

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

Attachments
Bookmarkmanager.2.3.1.7z
(17.88 KiB) Downloaded 60 times
Last edited by IgorZ on Thu 27 Oct, 2016 06:31, edited 27 times in total.

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Fri 24 Jan, 2014 09:52

Просьба знатоков английского проверить английский текст справки. Я в нём не очень силён.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Fri 24 Jan, 2014 11:40

Что-то ничего не заработало, кроме меню.

P.S
А звезда тут для чего /RCtrl\\w*/ ?

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Fri 24 Jan, 2014 14:41

Странно, помимо меня скачало ещё семеро, и все молчат. Неужто про запас качают.
У меня запоминание работает, а восстановление - нет.
Причём до первого вызова меню закладок - макрос перехода вообще не активируется.
После - активируется, но не переходит.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Fri 24 Jan, 2014 14:59

Да, что-то глючит. Я посмотрел, и откатился на свой. Надеюсь, автор доработает - еще посмотрю.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Fri 24 Jan, 2014 15:01

Причина неперехода найдена: опечатка в строке 122 - русская 'п'

Ещё заметил что перезагрузка макросов стала заметно дольше, подозреваю что работа с настройками неоптимальна
Может far.FreeSettings() тормозит, неясно кстати зачем он вообще при наличии obj:Free()

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Mon 27 Jan, 2014 03:37

Версия 1.0.1 - Исправлена ошибка, когда скрипт не запускался, пока не вызовешь меню закладок, мелкие правки.
Это нашёл за выходные, что тормозит, посмотрю позже.

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Mon 27 Jan, 2014 04:11

John Doe wrote:Ещё заметил что перезагрузка макросов стала заметно дольше, подозреваю что работа с настройками неоптимальна

Потестировал исполнение тела скрипта, выбросив Macro{...} (поскольку там, как я понимаю, ничего не может тормозить, да и не ко мне эта часть загрузки). Тысяча циклов исполняется за 2.3 секунды (новая, свежая версия) или 0.6 секунды (старая версия 1.0). Вряд ли 0.0023 (а тем более, 0.0006) секунды может быть ощутимо заметна. Может, проблема (если есть) кроется в чём-то другом?
John Doe wrote:Может far.FreeSettings() тормозит, неясно кстати зачем он вообще при наличии obj:Free()

far.FreeSettings() и obj:Free() для одного объекта выполняются за одинаковое время. Проверено.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Mon 27 Jan, 2014 08:25

Исполнение самого скрипта действительно не тормозит.
А тормозит перезагрузка макросов в целом.

Code: Select all

lm:post local a = Far.UpTime; far.MacroLoadAll(); msgbox("",(Far.UpTime - a)/1000)

Без BookmarkManager.lua - 0.1..0.2 секунды
С BookmarkManager.lua - почти всегда 1.1 и выше
Пробовал также запускать на чистом профиле где BookmarkManager.lua единственный скрипт.

Если ничего не путаю, то наблюдал такую проблему в случае когда настройки не были корректно закрыты.
В вашем случае судить не берусь, т.к. работа с настройками размазана по всему скрипту (Можете считать это критикой)

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Mon 27 Jan, 2014 11:38

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

John Doe wrote:Исполнение самого скрипта действительно не тормозит.
А тормозит перезагрузка макросов в целом.

Code: Select all

lm:post local a = Far.UpTime; far.MacroLoadAll(); msgbox("",(Far.UpTime - a)/1000)

Без BookmarkManager.lua - 0.1..0.2 секунды
С BookmarkManager.lua - почти всегда 1.1 и выше
Пробовал также запускать на чистом профиле где BookmarkManager.lua единственный скрипт.

Сколько ни пробовал, добиться подобного результата не смог. Всегда в районе 18мс.
John Doe wrote:Если ничего не путаю, то наблюдал такую проблему в случае когда настройки не были корректно закрыты.
В вашем случае судить не берусь, т.к. работа с настройками размазана по всему скрипту (Можете считать это критикой)

Всё перепроверил, незакрытых настроек не нашёл. В новой версии более строго локализовал участки, где идёт работа с настройками. Жду результатов проверки.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Mon 27 Jan, 2014 11:56

Проблема действительно ушла (возможно ещё в 1.01, её я не проверял)

Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

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

Postby Shmuel » Mon 27 Jan, 2014 12:46

IgorZ
В вашем скрипте два BOM'а. Это работает только благодаря дефекту в LuaFAR'е, который может быть вскоре исправлен, и тогда ваш скрипт перестанет работать.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Mon 27 Jan, 2014 16:45

John Doe wrote:А звезда тут для чего /RCtrl\\w*/ ?
Вижу вы убрали её из регэкспа.
Подозреваю что шаманство с приоритетами теперь тоже ни к чему, ведь этот макрос больше не конфликтует с макросом на "/RCtrlShift\\w/"

IgorZ wrote:В новой версии более строго локализовал участки, где идёт работа с настройками
Всё что касается настроек можно упростить радикально, если кэшировать закладки в таблице.
Минус: при этом вновь созданные закладки не будут моментально доступны в других экземплярах фара.
Плюс: в 2 раза меньше кода (и ошибок с ним связанных)

Дальше имхо:
Умолчание в 2с для длительности сообщение при переходе в папку великовато
Впрочем я бы наверно его вообще отключил, ведь и так невооружённым глазом видно что переход удался.
А вот при создании закладки сообщение не предусмотрено, хотят тут оно вполне уместно (0.5с достаточно)

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Tue 28 Jan, 2014 04:24

Версия 1.0.3 - Сообщение при сохранении новой закладки, мелкие правки.

John Doe wrote:
John Doe wrote:А звезда тут для чего /RCtrl\\w*/ ?
Вижу вы убрали её из регэкспа.
Подозреваю что шаманство с приоритетами теперь тоже ни к чему, ведь этот макрос больше не конфликтует с макросом на "/RCtrlShift\\w/"

Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
John Doe wrote:
IgorZ wrote:В новой версии более строго локализовал участки, где идёт работа с настройками
Всё что касается настроек можно упростить радикально, если кэшировать закладки в таблице.
Минус: при этом вновь созданные закладки не будут моментально доступны в других экземплярах фара.
Плюс: в 2 раза меньше кода (и ошибок с ним связанных)

Плюс количественный, минусы качественные. Думал я над таким вариантом. Реальный выигрыш незаметен при работе, а при написании я разберусь. Есть, кстати, и ещё минус: если Far слетит (а периодически мне, к примеру, удаётся его завесить или уронить), изменения потеряются в случае кэширования. Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
John Doe wrote:Дальше имхо:
Умолчание в 2с для длительности сообщение при переходе в папку великовато
Впрочем я бы наверно его вообще отключил, ведь и так невооружённым глазом видно что переход удался.

Так настраивается же... (F1 в меню)
John Doe wrote:А вот при создании закладки сообщение не предусмотрено, хотят тут оно вполне уместно (0.5с достаточно)

Сделал.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Tue 28 Jan, 2014 09:09

IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)

IgorZ wrote:Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
Независимо от кэширования (это не главное).
Я не уверен что количество строк исходника можно существенно сократить, но код действительно упростился бы, если всю работу с настройками убрать в 2 функции, аналогичные mf.msave/mf.mload.
Собственно единственное чего тут не хватает в стандартных функциях, это возможности работать с локальным профилем.

IgorZ
Posts: 416
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 5 times

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

Postby IgorZ » Tue 28 Jan, 2014 10:58

John Doe wrote:
IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)

Допустим, у меня есть макрос сравнения двух файлов, назначенный на CtrlC, и закладка CONF, назначенная на %USERPROFILE%. Нажатие RCtrlC будет намедленно вызывать сравнение, и закладка будет недоступна (кроме как по RCtrl/). Сейчас же смогут благополучно отработать и то, и другое действие.
John Doe wrote:
IgorZ wrote:Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
Независимо от кэширования (это не главное).
Я не уверен что количество строк исходника можно существенно сократить, но код действительно упростился бы, если всю работу с настройками убрать в 2 функции, аналогичные mf.msave/mf.mload.
Собственно единственное чего тут не хватает в стандартных функциях, это возможности работать с локальным профилем.

Чтение/запись везде убраны в небольшие функции, там сворачивать уже практически некуда, да и незачем. Операции в разных местах происходит по разным алгоритмам. Да и реальный объём выполняемых скриптом действий возрастёт в разы, а то и на порядок. Нет, сейчас всё практически оптимально, разве что в следующей версии формирование меню соптимизирую. Но это уж когда какие-то ещё замечания/пожелания появятся.


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

Who is online

Users browsing this forum: No registered users and 2 guests