Данный скрипт позволяет назначать на папки и файлы закладки (закладка может содержать ссылки как на одну, так и на несколько целей, для разных панелей; подробнее во встроенной справке скрипта) и переходить по ним (или запускать их средствами ОС), а также по переменным окружения, содержащим пути. Идея взята у Shell Bookmark (с) Max Rusov, текст написан с нуля.
Не требуются дополнительные плагины, чистый lua-скрипт;
Если закладка не опознана, нажатые клавиши возвращаются Far-у;
Закладки могут храниться и в локальном, и в глобальном профиле;
Локализация;
Встроенная справка;
Настройки хранятся не в файле скрипта, а в профиле Far-а;
Скрипт добавляет себя в меню плагинов и дисков;
Если имя набрано частично, предлагается выбор из меню;
Позволяет переходить по путям из переменных окружения;
Если значение закладки/переменной указывает на несколько целей, можо выбрать одну с помощью меню;
Цель можно не только выбрать в панели Far, но и выполнить системные команды "открыть" и "редактировать";
Позволяет работать с закладками через префиксы командной строки;
При работе с префиксами командной строки позволяет добавлять после закладки относительный путь;
Скрипт можно вызывать как функцию (подробности в справке).
Скрипт содержит три макроса.
Сохранение текущей папки в новой закладке.
Клавиша вызова: RCtrl+Shift/RAlt+последовательность клавиш.
Переход по закладке.
Клавиша вызова: RCtrl+последовательность клавиш.
Меню закладок и настроек.
Клавиша вызова: RCtrl+/.
bm - перейти по закладке/переменной окружения;
bma - добавить закладку;
bmal - добавить локальную закладку;
bmag - добавить глобальную закладку;
bme - редактировать в диалоге закладку;
bmel - редактировать в диалоге локальную закладку;
bmeg - редактировать в диалоге глобальную закладку;
bmr - удалить закладку;
bmrl - удалить локальную закладку;
bmrg - удалить глобальную закладку;
bmhelp - вызов справки.
Требуемая версия Far 3.0.4324+.
Версия 1.0 - Первый релиз.
Версия 1.0.1 - Исправлена ошибка, когда скрипт не запускался, пока не вызовешь меню закладок, мелкие правки
Версия 1.0.2 - Локализация работы с настройками, более корректная обработка ситуации, когда локальный и глобальный профили совпадают и когда не совпадают, мелкие правки
Версия 1.0.3 - Сообщение при сохранении новой закладки, мелкие правки
Версия 1.0.4 - Небольшая оптимизация формирования меню, поддержка плагиновых панелей, мелкие правки
Версия 1.1 - Поддержка установки одновременно активной и пассивной панели, мелкие правки. Экспериментально: изменён принцип хранения и загрузки языковых данных. Просьба отписаться в теме, который вариант лучше на Ваш взгляд. Если новый вариант понравится, внедрю его и в остальные свои скрипты с поддержкой настройки языка.
Версия 1.1.1 - Корректная обработка пустой строки
Версия 1.1.2 - Исправлена ошибка с обращением к старым языковым файлам, мелкие правки
Версия 1.2 - Расширение формата каталога. Теперь можно указывать панели: активную, пассивную, левую, правую. Изгнание io.lines. Если языка нет, подгружается английский, при загрузке настроек язык не подгружается, если не менялся. Мелкие правки.
Версия 1.2.1 - Срабатывание быстрых клавиш в меню RCtrl+/, рефакторинг, добавим uid-ы в макросы и пункт в меню плагинов.
Версия 1.2.2 - "&" в меню отрабатывался как акселератор, а не символ. Запрет вводить символы, которые нельзя ввести в сочетании с Ctrl.
Версия 1.2.3 - В версии 1.2.1 была поломана загрузка части параметров, в результате чего при некоторых комбинациях настроек скрипт падал при попытке создать новую закладку.
Версия 1.2.4 - Скрипт зачем-то вызывался из любых меню. Исправлено. В целях унификации с другими скриптами автора изменен механизм языковой настройки. Исправлена ошибка с разной шириной столбца закладок для локальных и глобальных закладок. Теперь в менеджере закладок по F4 закладка не копируется при её изменении. Для копирования жать F5.
Версия 2.0.0 - Помимо закладок поддерживаются переменные окружения (только переход на папки). Если закладка или переменная набрана частично, выводится список всех, содержащих набранный фрагмент. Мелкие правки.
Версия 2.0.1 - Мелкие правки.
Версия 2.1.0 - Добавлена работа из командной строки через префиксы. Можно переходить по закладкам и переменным окружения, добавлять/редактировать в диалоге/удалять закладки. Рефакторинг. Исправление кучи внезапно обнаруженных ошибок.
Версия 2.1.1 - Сокращённые меню позволяют все те же действия, что и полное. Комбинации RCtrlЦифра передаются Far-у, если такой закладки или переменной нет. Не совпадающие даже частично ни с одной закладкой или переменной окружения, содержащей путь, тоже.
Версия 2.1.2 - При вызове через префикс несуществующая комбинация не возвращается в виде нажатий клавиатуры.
Версия 2.2.0 - Настройка вынесена в отдельный диалог. Улучшены диалоги для совпадающих локального и глобального профилей. Переработана справка. Добавлен префикс для вызова справки. Мелкие правки.
Версия 2.2.1 - Исправлена ошибка, из-за которой не показывалась справка.
Версия 2.3.0 - Теперь можно использовать в командной строке конструкции вида "bm:<метка><подкаталог>", к примеру, "bm:фильмы\Мульфильмы\Фиксики". Nfo. Смена места хранения данных. Разделение префиксов. При выводе справки используется язык справки фара. Улучшение быстрого позиционирования в главном меню. Мелкие правки.
Версия 2.3.1 - В прошлой версии забыл сменить uid на id в зависимости от версии LuaMacro. Изменено определение Info.
Версия 2.4.0 - Скрипт можно вызывать из меню дисков; показываются только актуальные пункты. Исправлены замеченные ошибки. Мелкие правки.
Версия 2.4.1 - Исправлены свежевыявленные ошибки.
Версия 2.4.2 - Исправлена ошибка с вызовом меню при пустом списке закладок. Исправлены свежевыявленные ошибки в справке.
Версия 2.5.0 - Изменён формат хранения закладок в БД. Старый формат пока поддерживается. Рефакторинг.
Версия 2.5.1 - Исправлены некоторые недоделки и упущения предыдущей версии.
Версия 2.5.2 - Исправлен вызов из меню дисков, там же изменена логика работы.
Версия 2.5.3 - Теперь можно указать с помощью модификатора "C" необходимость смены панели. Подробности в справке.
Версия 2.5.4 - Работа над ошибками.
Версия 3.0.0 - Если в качестве цели указан файл, не просто переходим в папку, но и позиционируемся на файле. Возможно не только переходить в папку или на файл, но и выполнять системные контекстные команды "открыть" (выполнить) и "редактировать"; можно указывать действие в параметрах закладки. Можно указывать маски для пути (включая маску имени локального диска); основа алгоритма разработана buniak_a_h. Если элемент пути не найден, ищем его же, но в обрамлении "*" (настраивается). Скрипт теперь можно вызывать как функцию, параметры как для префиксов. При наборе последовательности символов она опционально отображается на экране. При неполном наборе закладки/переменной, если подходит всего один вариант, меню может не выводиться (настраивается). Отдельная настройка для показа переменных окружения в меню. Рефакторинг.
Версия 3.0.1 - Исправление ошибки с переходом в сетевую папку. Исправление справки. Рефакторинг.
Версия 3.0.2 - При вызове скрипта как функции без параметров ошибка не выдаётся. Исправлена ошибка при переходе в плагин.
Версия 3.0.3 - Исправлена ошибка при нажатии клавиш в режиме активной фильтрации. Предпочтительное место хранения закладок теперь настраивается. Доработан вызов action-функций с учётом введённых в build 717 параметров для condition/action. Рефакторинг.
Версия 3.0.4 - Исправлена работа диалога настроек. Дополнена справка по диалогу настроек.
Версия 3.0.5 - Исправлена работа с закладкой на файл. Дополнена справка по закладкам.
Версия 3.0.6 - Исправлена ошибка с удалением несуществующей закладки. Рефакторинг.
Версия 3.0.7 - Исправлена ошибка с ненужными сообщениями об удалении несуществующей закладки. Исправлена опечатка в английском языковом файле.
Версия 3.0.8 - Исправлена ошибка с некорректной обработкой модификатора "C". Небольшой рефакторинг.
Версия 3.0.9 - Исправлена ошибка с выводом информации о новой папке при переходе для правой панели.
Версия 3.0.10- Исправлена ошибка, возникшая из-за изменения поведения Far.
Volodya wrote: Wed 18 Aug, 2021 18:45
Поставил версию 3.0.6
Вызываю меню по RCtrl/
Получаю
...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:542: bad argument #1 to 'find' (string expected, got table)
stack traceback:
[С]: in function 'find'
...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:542: in function 'prep_menu'
...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:565: in function <...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:511>
Far 3.0.5879.0 x86 Windows 64 10.0.22000.132
BookmarkManager 3.0.6.
Строка 542 (в которой, якобы, и происходит ошибка):
╔══════════════════════════════════════════════ LuaMacro ═══════════════════════════════════════════════╗
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:340: bad argument #1 to 'format' (number ║
║ expected, got string) ║
║ stack traceback: ║
║ [C]: in function 'format' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:340: in function 'DelBM' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:617: in function 'BMMenu' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:701: in function <...oft\Far\Profile\ ║
║ Macros\scripts\Shell_BookmarkManager.lua:701> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════╝
И самое неприятное - закладка не удаляется, остаётся.
Ну и при добавлении новых закладок (RCtrl+RShift+1) на девственно чистом профиле каждый раз вот это:
╔═════════════════ Bookmark manager ══════════════════╗
║ Bookmark "1" is not found or is not a real bookbark ║
╟─────────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════════╝
Может и не ошибка вовсе, а типо проверка\предупреждение, но сбивает с толку и возникает ощущение, что делаешь что-то неправильно. Хотя после нажатия ОК закладка успешно добавляется.
P.S. проверялось всё это на текущей ночной b5954 x64 + BookmarkManager 3.0.6.
Last edited by skipik on Sun 16 Jan, 2022 18:40, edited 2 times in total.
╔══════════════════════════════════════════════ LuaMacro ═══════════════════════════════════════════════╗
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:340: bad argument #1 to 'format' (number ║
║ expected, got string) ║
║ stack traceback: ║
║ [C]: in function 'format' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:340: in function 'DelBM' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:617: in function 'BMMenu' ║
║ ...oft\Far\Profile\Macros\scripts\Shell_BookmarkManager.lua:701: in function <...oft\Far\Profile\ ║
║ Macros\scripts\Shell_BookmarkManager.lua:701> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════╝
И самое неприятное - закладка не удаляется, остаётся.
Ну и при добавлении новых закладок (RCtrl+RShift+1) на девственно чистом профиле каждый раз вот это:
╔═════════════════ Bookmark manager ══════════════════╗
║ Bookmark "1" is not found or is not a real bookbark ║
╟─────────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════════╝
Может и не ошибка вовсе, а типо проверка\предупреждение, но сбивает с толку и возникает ощущение, что делаешь что-то неправильно. Хотя после нажатия ОК закладка успешно добавляется.
P.S. проверялось всё это на текущей ночной b5954 x64 + BookmarkManager 3.0.6.
Берём чистый фар с пустым профилем, я использовал b6102 x64
создаём пару закладок на папки с помощью RCtrlShift1, RCtrlShift2
пробуем созданные нами закладки с помощью RCtrl1, RCtrl2
Ожидаемое поведение:
и на левой, и на правой панели маленькое серое окошко с чёрным текстом (путь к папке) будет показываться
Актуальное поведение:
на левой панели маленькое серое окошко с чёрным текстом (путь к папке) показывается, а на правой -- почему-то нет. Вместо него некая сломанная версия окошка, маленькое и без текста.
Если это легко починить, ты может и автора не потребуется тревожить, и подскажут знающие люди...
Исправлена ошибка с невыводом информации о новой папке при переходе для правой панели. Даже не ошибка, а мелкая недоработка после смены логики перехода на более правильную.
Last edited by IgorZ on Fri 17 Feb, 2023 07:46, edited 1 time in total.
С определённого времени крашится FAR при попытке создать закладку.
Открываем выбор диска
BookmarkManager: menu
Путём клавиши Insert вызываем окно New bookmark
Начинаем вводить имя и получаем crash:
Exception: 0xC0000005 - STATUS_ACCESS_VIOLATION
Details: Memory at FFFF8006AB38FFFF LuaMacro.dll!<unknown> (get the pdb) could not be read
errno: 0x00000000 - No error
LastError: 0x00000000 - Операция успешно завершена.
NTSTATUS: 0xC0000034 - Объект с указанным именем не найден.
Address: 0x000E3E05 - Far.exe!Edit::ProcessKey(class Manager::Key const & __ptr64) __ptr64+0x1D45 (edit.obj)
Location: Open, plclass.cpp(917)
Module: C:\FAR\Plugins\LuaMacro\LuaMacro.dll
Plugin: LuaMacro 3.0.847.0 (Far macros in Lua, Shmuel Zeigerman & Far Group)
Far: 3.0.6364.0 x64 (11925f8)
Compiler: Microsoft Visual C++, version 19.41.33923.0
PE time: 2024-08-24 10:22:57.000
File time: 2024-08-24 10:23:02.000
Time: 2025-03-13 07:51:24.322
Local: 2025-03-13 12:51:24.322 +0500, RTZ 4 (зима)
Uptime: 00:03:30
OS: Windows NT Workstation 10.0.26100, 0x100/0x7D (Windows 10 Enterprise LTSC 2024, version 24H2, OS build 26100.3476)
Locale: ru-RU | LCID=00000419 (Lang=0419 (Primary=019 Sub=01) Sort=0 SortVersion=0) | ANSI=1251 OEM=866
Host: C:\Windows\System32\conhost.exe 10.0.26100.1 (WinBuild.160101.0800)
Parent: C:\Windows\explorer.exe 10.0.26100.1301 (WinBuild.160101.0800)
Command: "C:\FAR\Far.exe"
Access: User
Memory: 11.5 G out of 18.0 G free (63%); 27.4 M used by the process
BSB,
Это похоже проблема в Фаре, а не в скрипте.
Но можно её обойти, заменив в скрипте строку 430 с прежнего значения far.SetDlgItem(hDlg,Param1,Param2) -- скорректируем
на новое значение far.SendDlgMessage(hDlg,F.DM_SETTEXT,Param1,Param2[10])
Shmuel wrote: Thu 13 Mar, 2025 10:08BSB,
Это похоже проблема в Фаре, а не в скрипте.
Но можно её обойти, заменив в скрипте строку 430 с прежнего значения far.SetDlgItem(hDlg,Param1,Param2) -- скорректируем
на новое значение far.SendDlgMessage(hDlg,F.DM_SETTEXT,Param1,Param2[10])
Исправлена ошибка, возникшая из-за изменения поведения Far. Заодно, если честно, и правильнее стало: незачем изменять весь элемент, если нужно исправить одну только надпись.
Заодно поздравляю всех с днём числа π! А знаете ли вы, что если добавить в _macroinit.lua строчку if math.pi then math.π,math.pi = math.pi,nil end, то в программах можно будет писать что-то вроде S = math.π*r^2? Не знаю, правда, зачем это нужно, но почему бы и нет?