Page 1 of 13

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

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

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


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

Posted: Fri 24 Jan, 2014 09:52
by IgorZ
Просьба знатоков английского проверить английский текст справки. Я в нём не очень силён.

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

Posted: Fri 24 Jan, 2014 11:40
by John Doe
Что-то ничего не заработало, кроме меню.

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

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

Posted: Fri 24 Jan, 2014 14:41
by John Doe
Странно, помимо меня скачало ещё семеро, и все молчат. Неужто про запас качают.
У меня запоминание работает, а восстановление - нет.
Причём до первого вызова меню закладок - макрос перехода вообще не активируется.
После - активируется, но не переходит.

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

Posted: Fri 24 Jan, 2014 14:59
by Max Rusov
Да, что-то глючит. Я посмотрел, и откатился на свой. Надеюсь, автор доработает - еще посмотрю.

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

Posted: Fri 24 Jan, 2014 15:01
by John Doe
Причина неперехода найдена: опечатка в строке 122 - русская 'п'

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

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

Posted: Mon 27 Jan, 2014 03:37
by IgorZ
Версия 1.0.1 - Исправлена ошибка, когда скрипт не запускался, пока не вызовешь меню закладок, мелкие правки.
Это нашёл за выходные, что тормозит, посмотрю позже.

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

Posted: Mon 27 Jan, 2014 04:11
by IgorZ
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() для одного объекта выполняются за одинаковое время. Проверено.

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

Posted: Mon 27 Jan, 2014 08:25
by John Doe
Исполнение самого скрипта действительно не тормозит.
А тормозит перезагрузка макросов в целом.

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 единственный скрипт.

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

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

Posted: Mon 27 Jan, 2014 11:38
by IgorZ
Версия 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:Если ничего не путаю, то наблюдал такую проблему в случае когда настройки не были корректно закрыты.
В вашем случае судить не берусь, т.к. работа с настройками размазана по всему скрипту (Можете считать это критикой)
Всё перепроверил, незакрытых настроек не нашёл. В новой версии более строго локализовал участки, где идёт работа с настройками. Жду результатов проверки.

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

Posted: Mon 27 Jan, 2014 11:56
by John Doe
Проблема действительно ушла (возможно ещё в 1.01, её я не проверял)

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

Posted: Mon 27 Jan, 2014 12:46
by Shmuel
IgorZ
В вашем скрипте два BOM'а. Это работает только благодаря дефекту в LuaFAR'е, который может быть вскоре исправлен, и тогда ваш скрипт перестанет работать.

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

Posted: Mon 27 Jan, 2014 16:45
by John Doe
John Doe wrote:А звезда тут для чего /RCtrl\\w*/ ?
Вижу вы убрали её из регэкспа.
Подозреваю что шаманство с приоритетами теперь тоже ни к чему, ведь этот макрос больше не конфликтует с макросом на "/RCtrlShift\\w/"
IgorZ wrote:В новой версии более строго локализовал участки, где идёт работа с настройками
Всё что касается настроек можно упростить радикально, если кэшировать закладки в таблице.
Минус: при этом вновь созданные закладки не будут моментально доступны в других экземплярах фара.
Плюс: в 2 раза меньше кода (и ошибок с ним связанных)

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

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

Posted: Tue 28 Jan, 2014 04:24
by IgorZ
Версия 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с достаточно)
Сделал.

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

Posted: Tue 28 Jan, 2014 09:09
by John Doe
IgorZ wrote:Частично нужно. Иначе приоритет макроса получается 1 или 0, и все другие, назначенные на Ctrl+буква, его перебивают.
Не будут перебивать, если указать в регекспе ^ и $ (в ряде случаев это также может несколько улучшить скорость работы регекспа)
IgorZ wrote:Можно, конечно, кэшировать только чтение, но тогда о сокращении кода можно забыть.
Независимо от кэширования (это не главное).
Я не уверен что количество строк исходника можно существенно сократить, но код действительно упростился бы, если всю работу с настройками убрать в 2 функции, аналогичные mf.msave/mf.mload.
Собственно единственное чего тут не хватает в стандартных функциях, это возможности работать с локальным профилем.