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

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

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

Post by IgorZ »

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

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

Attachments
BookmarkManager.3.0.9.7z
(25.26 KiB) Downloaded 142 times
Last edited by IgorZ on Fri 17 Feb, 2023 07:41, edited 24 times in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Latest post of the previous page:

John Doe wrote:
IgorZ wrote:это быстрее исполняется
В данном конкретном случае разницу заметить невозможно, т.к. время выполнения ничтожно мало.
А если в вашем варианте избавиться от построчного чтения из файла, то наверно никакой разницы и вовсе не будет.
Ради интереса попробовал заменить io.line на чтение всего файла целиком и затем лущение полученной строки с помощью gmatch. io.line работает даже чуть быстрее (примерно на 10%). Издержки интерпретации, однако...
Smitis wrote:
IgorZ wrote:Потому что во втором мы имеем исполняемый файл, который условно назвали файлом данных. Так что фактически идёт разделение одного исполняемого файла на две исполняемые части. Это проще, это легче, это быстрее исполняется, но мне такой код не особо нравится, это "низкий класс" согласно моим привычкам.
А если закрыть глаза и представить, что это действительно файл данных... но просто очень продвинутый (с поддержкой выражений, условных операторов, циклов и др.)? :)
В конце концов, макросы ФАРа когда-то тоже были "конфигурационными" и представляли просто последовательность нажимаемых клавиш + некоторые параметры (область действия и т.п.)
К сожалению, моё воображение тоже разбирается в программировании и разделяет мои взгляды на "хороший стиль программирования". :) С нашей общей точки зрения данные должны быть пассивны, ну, в крайнем случае, восклицать: "Ещё! Прочитай меня ещё! Да! Да!! А теперь запиши!" ;)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

IgorZ wrote:
John Doe wrote:К сожалению, моё воображение тоже разбирается в программировании и разделяет мои взгляды на "хороший стиль программирования". :)
Богатое у тебя воображение :)
И придётся изобретать очередной велосипед (точно такой же, как все, но другой) ;)
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

IgorZ wrote:
John Doe wrote:
IgorZ wrote:это быстрее исполняется
В данном конкретном случае разницу заметить невозможно, т.к. время выполнения ничтожно мало.
А если в вашем варианте избавиться от построчного чтения из файла, то наверно никакой разницы и вовсе не будет.
Ради интереса попробовал заменить io.line на чтение всего файла целиком и затем лущение полученной строки с помощью gmatch. io.line работает даже чуть быстрее (примерно на 10%). Издержки интерпретации, однако...
Интересно. Из PIL можно сделать другие выводы. Полноценно тестировать лень, и в любом случае для мелких файлов разницы не будет.

А разницу во времени выполнения dofile и вашей новой функции вы измеряли?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:
IgorZ wrote:Ради интереса попробовал заменить io.line на чтение всего файла целиком и затем лущение полученной строки с помощью gmatch. io.line работает даже чуть быстрее (примерно на 10%). Издержки интерпретации, однако...
Интересно. Из PIL можно сделать другие выводы. Полноценно тестировать лень, и в любом случае для мелких файлов разницы не будет.
А разницу во времени выполнения dofile и вашей новой функции вы измеряли?
Через dofile примерно в 15 раз быстрее. Но и то, и другое порядка 1 мс.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Насчёт io.lines(file) - она не закрывает хэндл файла после выхода из цикла. Это сделает только сборщик мусора, причём неизвестно когда. В результате и файл, и папка scripts, и папка Macros оказываются залоченными, их нельзя даже переименовать.

Поэтому: открывайте файл с помощью io.open, читайте строки с помощью метода lines, затем закрывайте методом close.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Shmuel wrote:Насчёт io.lines(file) - она не закрывает хэндл файла после выхода из цикла. Это сделает только сборщик мусора, причём неизвестно когда. В результате и файл, и папка scripts, и папка Macros оказываются залоченными, их нельзя даже переименовать.

Поэтому: открывайте файл с помощью io.open, читайте строки с помощью метода lines, затем закрывайте методом close.
Понял, спасибо, переделаю. Заодно ещё кое-что добавлю, до чего руки не доходили.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 1.2 - Расширение формата каталога. Теперь можно явно указывать панели: активную, пассивную, левую, правую (подробности в справке по F1 в диалоге редактирования закладки). Если текущего языка Far-а в локализациях скрипта нет, подгружается английский, при загрузке настроек язык не подгружается, если не менялся. Изгнание io.lines и другие мелкие правки.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Перед Новым Годом привожу выкладки в порядок.
Версия 1.2.1 - Срабатывание быстрых клавиш в меню RCtrl+/ (то есть, набираем RCtrl+<нужная последовательность>), рефакторинг, добавим uid-ы в макросы и пункт в меню плагинов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote:Версия 1.2.1
Замечательно! Похоже, что данный менеджер закладок с учётом всех предоставляемых им пользователю удобств становится наиболее предпочтительным.

IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 1.2.2 - "&" в меню отрабатывался как акселератор, а не символ. Запрет вводить символы, которые нельзя ввести в сочетании с Ctrl.

sToLp wrote:а) меню, вызываемое по RCtrl+/, редактируется и через него можно добавлять закладки. Но по RCtrl+Shift/RAlt+последовательность клавиш вылезает ошибка:

Code: Select all

╔══════════════════════════════════════ LuaMacro ═══════════════════════════════════════╗
║ ...киВпанелях[BookmarkManager1.2.1](IgorZ)she.lua:178: invalid flag combination       ║
║ stack traceback:                                                                      ║
║    [C]: in function 'CreateSettings'                                                  ║
║    ...киВпанелях[BookmarkManager1.2.1](IgorZ)she.lua:178: in function <...киВпанелях[ ║
║ BookmarkManager1.2.1](IgorZ)she.lua:164>                                              ║
╟───────────────────────────────────────────────────────────────────────────────────────╢
║                                        { OK }                                         ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝
Ни разу не удалось повторить. Более того, строка 178, в которой якобы происходит ошибка, в версии 1.2.1 содержит только комментарий, так что либо речь идёт о старой версии, либо Вы модифицировали скрипт самостоятельно, либо нарушили нормальную работу системы каким-то способом. Во всех этих случаях претензии - не к скрипту и не ко мне.
sToLp wrote:б) небольшой нюанс касательно использования в меню менеджера амперсанда & для обозначения хоткеев — кажется он учитывается при сортировке шорткатов и занимаемое им знакоместо идёт в зачёт размера шортката.
в) шорткаты вводятся в меню только в верхнем регистре. А хотелось бы, чтобы можно было вводить и в нижнем регистре тоже. Тогда проще будет различить раскладки.
По обеим пунктам. В комбинации с Ctrl любая клавиша вводит только латиницу в верхнем регистре или цифру. Поэтому другие символы (в том числе и "&") в закладке недопустимы. То, что их можно было вводить - ошибка. В новой версии она исправлена.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

Хотел перейти на данный скрипт с ansi-шного HotDir, но вылазит та же ошибка, что и у sToLp: invalid flag combination.. Версия скрипта 1.2.2. Версия фара последняя ночная 4260. Проверил еще на Far30b4230 - история та же.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Подтверждаю, ошибка в строке 178:

Code: Select all

obj = far.CreateSettings(nil,UseLocal and UseGlobal and DefaultBMProfile or UseLocal or UseGlobal) -- откроем настройки
Проявляется в случае когда не задана отдельная папка для локального профиля.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 1.2.3 - В версии 1.2.1 была поломана загрузка части параметров, в результате чего при некоторых комбинациях настроек скрипт падал при попытке создать новую закладку.

Приношу извинения тем, кому не поверил сразу, но действительно только сейчас сумел воспроизвести ошибку и, соответственно, разобраться в проблеме.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Если в любом меню нажать F11, то там зачем-то будет пункт "BookmarkManager: menu".
BFDA
Posts: 19
Joined: Tue 04 Jul, 2006 10:21
Location: Москва

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

Post by BFDA »

Версия 1.2.3. При попытки добавить закладку падает :(

...g\Far Manager\Profile\Macros\scripts\BookmarkManager.lua:308: bad argument #1 to 'Set' (number expected, got nil)
stack traceback:
: in function 'Set'
...g\Far Manager\Profile\Macros\scripts\BookmarkManager.lua:308: in function 'edit_bm'
...g\Far Manager\Profile\Macros\scripts\BookmarkManager.lua:336: in function <...g\Far Manager\Profile\Macros\scripts\BookmarkManager.lua:235>
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

BFDA, не воспроизводится.
Приведите точную последовательность шагов, приводящую к проблеме.
Post Reply

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