Данный скрипт позволяет назначать на папки и файлы закладки (закладка может содержать ссылки как на одну, так и на несколько целей, для разных панелей; подробнее во встроенной справке скрипта) и переходить по ним (или запускать их средствами ОС), а также по переменным окружения, содержащим пути. Идея взята у 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 - Исправлена ошибка с выводом информации о новой папке при переходе для правой панели.
Версия 2.4.0 - Скрипт можно вызывать из меню дисков; показываются только актуальные пункты (если закладка настроена только для правой панели, нет смысла показывать её для левой). Исправлены замеченные ошибки. Мелкие правки.
и не исчезает до нажатия любой клавиши. После нажатия любой клавиши окно закрывается, переход происходит, а внизу в командной строке появляется наименование клавиши, нажатием на которую, было закрыто окно:
и не исчезает до нажатия любой клавиши. После нажатия любой клавиши окно закрывается, переход происходит, а внизу в командной строке появляется наименование клавиши, нажатием на которую, было закрыто окно:
Проблема воспроизводится как на версии скрипта 2.3.1, так и на версии 2.4.0.
ОС: Win10 Корп x64
Не моё. У меня там вообще вывода никакого в принципе нет. Получается, это eval или Keys так глючить начал. А сообщение не исчезает - это к mf.waitkey вопрос. Что уж там нарефакторили - не знаю. Судя по сообщению на Ru.Board, "сильно вероятно что это последствия b4952".
Таки ваше.
Если вы хотите "<0 - message will be not displayed" - то сообщение вообще не надо выводить, а не выводить и делать waitkey c отрицательным временем, надеясь, что оно как бы сразу истечёт и сообщение закроется.
Waitkey никогда логику "отрицательное время - это типа оно сразу истекло" не поддерживал, а "работало" оно только потому, что время в этом случае было представлено 32-битной величиной, при прибавлении к которой (unsigned)-1 == 4294967295 происходило целочисленное переполнение.
Теперь время в этом случае 64-битное, переполнения не происходит и сообщение будет честно висеть запрошенные 49 дней и 17 часов.
Таки ваше.
Если вы хотите "<0 - message will be not displayed" - то сообщение вообще не надо выводить, а не выводить и делать waitkey c отрицательным временем, надеясь, что оно как бы сразу истечёт и сообщение закроется.
Waitkey никогда логику "отрицательное время - это типа оно сразу истекло" не поддерживал, а "работало" оно только потому, что время в этом случае было представлено 32-битной величиной, при прибавлении к которой (unsigned)-1 == 4294967295 происходило целочисленное переполнение.
Теперь время в этом случае 64-битное, переполнения не происходит и сообщение будет честно висеть запрошенные 49 дней и 17 часов.
"Не моё" относилось к выводу нажатой клавиши. Специально сейчас проверил с последней ночнушкой - если поставить, к примеру, 10000 и нажать клавишу до исчезновения сообщения, она таки выводится в командной строке.
За пояснение относительно waitkey спасибо.
IgorZ wrote: "Не моё" относилось к выводу нажатой клавиши. Специально сейчас проверил с последней ночнушкой - если поставить, к примеру, 10000 и нажать клавишу до исчезновения сообщения, она таки выводится в командной строке.
Это тоже ваше.
Я в луа понимаю, как свинья в апельсинах, но:
for c in seq:gmatch(".")do-- для каждой ранее нажатой клавиши
if eval(mod..c,2)<0then Keys(mod..c)
seq здесь - строка с именем клавиши, которую вы попросили waitkey() вам вернуть. Вы её посимвольно проходите и каждый символ исполняете. Что просили - то и получили.
Обидно чувствовать себя балбесом. Таки ошибки были действительно свои, причём одна из них была предусмотрена, исключена, а затем снова привнесена путём опечатки (причиной другой была честная лень). Так что Версия 2.4.1 - Исправлены свежевыявленные ошибки.
Ищите новые...
C:\progs\conTools\Far\Plugins\LuaMacro\LuaMacro.dll:
...g\far\Macros\scripts\BookmarkManager\BookmarkManager.lua:427: attempt to get length of local 'l' (a nil value)
stack traceback:
...g\far\Macros\scripts\BookmarkManager\BookmarkManager.lua:427: in function 'prep_menu'
...g\far\Macros\scripts\BookmarkManager\BookmarkManager.lua:488: in function 'BMMenu'
...g\far\Macros\scripts\BookmarkManager\BookmarkManager.lua:605: in function 'action'
C:\progs\conTools\Far\Plugins\LuaMacro\LuaMacro.lua:426: in function <C:\progs\conTools\Far\Plugins\LuaMacro\LuaMacro.lua:380>
Понадобился мне по работе NetBox. Внезапно выяснилось, что его закладки не работают - я не совсем корректно сохраняю данные о папке плагина. В итоге пришлось полностью переделывать эту часть алгоритма (и кое-что из остального). Так что Версия 2.5.0 - Изменён формат хранения закладок в БД. Старый формат пока поддерживается. Рефакторинг.
Зато теперь, по идее, проблем с закладками, вообще не должно быть в принципе. Если старую закладку открыть в редакторе (по F4) и сохранить, она перезапишется в новом формате. А если выкрою время, сделаю конвертор закладок в новый формат и выпущу версию без поддержки старого.
Версия 2.5.1 - Исправлены некоторые недоделки и упущения предыдущей версии. Переменные окружения, во всяком случае, теперь у меня работают (извиняюсь, забыл про них, был в Попыхах... )
IgorZ wrote: ↑Wed 09 Aug, 2017 05:22А если выкрою время, сделаю конвертор закладок в новый формат и выпущу версию без поддержки старого.
А вот этого не будет. Поскольку скрипт понимает префиксы командной строки, то от поддержки строкового формата всё равно не избавиться.
Last edited by IgorZ on Fri 11 Aug, 2017 05:16, edited 1 time in total.
Версия 2.5.2 - Исправлен вызов из меню дисков, там же изменена логика работы.Теперь при вызове из меню дисков всегда меняется только путь на той панели, для которой вызвано меню. Ну и соответстующие поправки в остальное. Закладки при этом показываются урезанными, но при редактировании выдаются целиком. Полностью пустые закладки показываются, но для перехода недоступны. И т. д. Надеюсь, с работой над ошибками всё.