Менеджер Lua-скриптов для Farа

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

Менеджер Lua-скриптов для Farа

Post by IgorZ » Thu 25 Apr, 2013 04:00

Данный скрипт содержит следующие макросы:
  1. Выводит список всех Lua-скриптов Farа и позволяет манипулировать ими.

    Клавиша вызова по умолчанию: AltShiftF11.
  2. Вставка Lua/Moon скрипта (с выбором, какого типа) в редактируемый .lua/.moon файл.
    Клавиша вызова по умолчанию: LCtrlF11.
  3. Вставка Lua/Moon Macro в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  4. Вставка Lua/Moon Event в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  5. Вставка Lua/Moon MenuItem в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  6. Вставка Lua/Moon CommandLine в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  7. Вставка Lua/Moon PanelModule в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlF11.
  8. Редактирование Lua/Moon скрипта из редактируемого файла.
    Клавиша вызова по умолчанию: CtrlF12.
  9. Вставка строки guid в редактируемый .lua/moon файл.
    Клавиша вызова по умолчанию: RCtrlU.
  10. Перезагрузка всех скриптов.
    Клавиша вызова по умолчанию: CtrlF9.
Требуемая версия Far 3.0.4000+.

Начиная с версии 4.0, скрипт выполнен в виде модуля и набора вызывающих макросов.

Attachments
LuaManager.5.0.3.7z
(59.34 KiB) Downloaded 47 times
LuaManager.3.1.11.7z
Последняя версия, выполненная не в виде модуля
(50.56 KiB) Downloaded 175 times
Last edited by IgorZ on Mon 10 Dec, 2018 09:16, edited 9 times in total.

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Wed 08 Nov, 2017 12:49

Latest post of the previous page:

sToLp wrote:
Wed 08 Nov, 2017 12:18
Поэтому, вероятно, целесообразно дополнить макрос вызова чем-то вроде
В результате LuaManager перестанет запускаться из этого меню.
С чего бы?

Рекомендую поступить наоборот.
Например измените приоритет конфликтующего макроса.
Или того макроса, который у вас реализует шоркаты в самом меню конфликта.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Менеджер Lua-скриптов для Farа

Post by sToLp » Wed 08 Nov, 2017 16:27

John Doe wrote:
Wed 08 Nov, 2017 12:49
Например измените приоритет конфликтующего макроса.
Для меня они не конфликтующие, а преднамеренно назначенные на данный шорткат. Для удобства их визуального выбора. Поэтому и приоритеты у них должны оставаться равными.
Или того макроса, который у вас реализует шоркаты в самом меню конфликта.
Не существенно какой шорткат может быть произвольно задан для срабатывания из меню выбора макросов. Само то меню выбора всё равно будет вызываться изначальным клавишесочетанием.

Поэтому на текущий момент мне представляется более удобным оставить таки в основном запускающем макросе ограничение на запуск макробраузера из меню выбора. И дополнительно сделать отдельный макрос для запуска LuaManager`а только из этого меню, но по несколько другому шорткату.

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Wed 08 Nov, 2017 16:38

Что-то мы друг друга не понимаем.
sToLp wrote:
Wed 08 Nov, 2017 12:18
При наличии других макросов, назначенных на AltShiftF11 (как у меня), выводится меню выбора, которое при повторных нажатиях шортката зацикливается.
Что вы имеете ввиду под "зацикливается?

Если макрос назначен срабатывать (во всех) меню, то неудивительно, что он срабатывает.
Что вы ожидаете второй раз нажимая тот же шорткат?

Второй (конфликтующий) макрос на ту же клавишу ведёт себя иначе? Почему?

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Менеджер Lua-скриптов для Farа

Post by sToLp » Wed 08 Nov, 2017 16:57

John Doe wrote:
Wed 08 Nov, 2017 16:38
Что вы имеете ввиду под "зацикливается?
Вновь и вновь, и вновь ... вызывает всё то же меню выбора.
Если макрос назначен срабатывать (во всех) меню, то неудивительно, что он срабатывает.
Что вы ожидаете второй раз нажимая тот же шорткат?
Разумеется, это вполне ожидаемо. Но в данном конкретном случае не удобно. В данном конкретном случае хочется то чтобы макрос и в меню появлялся, и не возобновлял вызов этого же меню из него же.
Второй (конфликтующий) макрос на ту же клавишу ведёт себя иначе? Почему?
Он же вызван из другой макрообласти и не предназначен для вызова вновь из этой. В отличие от сабжевого.

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Wed 08 Nov, 2017 17:08

sToLp wrote:
Wed 08 Nov, 2017 16:57
Вновь и вновь, и вновь ... вызывает всё то же меню выбора.
Ну сначала понятно: это выбор между "Менеджером ..." и вашим "другим" макросом.
А если повторно нажать, то что в списке?

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Менеджер Lua-скриптов для Farа

Post by sToLp » Wed 08 Nov, 2017 17:23

John Doe wrote:
Wed 08 Nov, 2017 17:08
sToLp wrote:
Wed 08 Nov, 2017 16:57
Вновь и вновь, и вновь ... вызывает всё то же меню выбора.
Ну сначала понятно: это выбор между "Менеджером ..." и вашим "другим" макросом.
А если повторно нажать, то что в списке?
Да. Вы правы! Похоже, что я где-то подзапутался. Вернул всё в изначальный вид и убедился, что при повторном нажатии вызывается LuaManager.
Спасибо большое за настойчивое разъяснение!

Дополнено:
Кажется, нашёл и причину своего нелепого заблуждения. В рабочем экземпляре Far`а было две версии макроса. Новая и предыдущая. facepalm2
Last edited by sToLp on Wed 08 Nov, 2017 18:12, edited 1 time in total.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 8 times

Менеджер Lua-скриптов для Farа

Post by sToLp » Sat 18 Nov, 2017 10:54

Назначение одного и того же клавишесочетания нескольким макросам может происходить не только случайным образом. Такое преднамеренное действие позволяет активно использовать меню выбора макросов для визуализизации макросов и назначенных на них клавиш. В т.ч. составлять удобные контекстные меню. А для исключения "наслаивания" меню выбора макросов одного над другим в макрообласти Menu, кажется, удалось-таки подобрать подходящий способ:

Code: Select all

condition=function() local cmt=Object.Title; return mf.index(cmt,"Исполнить макрос: Menu")==-1 end;
-- кондишен для предотвращения "наслаивания" меню выбора макросов его повторными вызовами

IgorZ
Posts: 579
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 35 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Tue 21 Nov, 2017 07:17

Версия 4.0.4 -
  • Опциональное поле имени файла без пути.
    Может включаться быстрой клавишей и через меню конфигурации.
    • Через меню конфигурации можно отключить показ имени файла (длина=0), ограничить длину поля с обрезанием имени (длина<0) и ограничить длину с переносом остатка имени файла на следующие строки (длина>0).
    • С помощью быстрой клавиши (AltF) можно оперативно отключить показ поля имени файла или включить его, при этом имя файла будет выводиться в одну строку (ну, если оно не больше 1000 символов :)). Данные изменения действуют только на период текущего запуска LuaManager.
  • Доработано сохранение позиции в главном меню.
    Теперь, по идее, при почти любых действиях курсор будет оставаться на том же пункте меню (если тот не исчезнет с экрана).

IgorZ
Posts: 579
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 35 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Thu 03 May, 2018 06:41

Версия 5.0.0 -
  • Добавлена поддержка PanelModule.
  • Шаблоны для диалогов редактирования вынесены в отдельный файл "templates". Формат - lua.
  • При чтении параметра из БД и записи в БД производится автозамена переменных окружения FARPROFILE, FARLOCALPROFILE и FARHOME. То есть, при работе в списке будет фигурировать C:\Program files\FarManager\Profile\Macros\modules\?.lua, а в БД будет храниться %FARPROFILE%\Macros\modules\?.lua. Переносимость улучшится.
  • Более корректное определение номеров строк в .moon файлах. Если вкратце - стандартная функция не учитывает строки с комментариями.
  • Доработана индикация фильтрации в главном меню.
  • Пункты меню плагинов фильтруются по областям аналогично макросам. Раньше выводились все, независимо от состояния фильтра областей.
  • В целях единообразия показ/скрытие макросов и пунктов меню плагинов не из текущей области перенесён с CtrlH на AltH.
  • Тотальный рефакторинг. За годы доработок в коде накопились костыли, подпорки, подпорки костылей и костыли для подпорок. Изведены все (вроде бы).

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Thu 03 May, 2018 07:26

IgorZ wrote:
Thu 03 May, 2018 06:41
Если вкратце - стандартная функция не учитывает строки с комментариями.
Хотелось бы подробностей

IgorZ
Posts: 579
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 35 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Thu 03 May, 2018 11:38

John Doe wrote:
Thu 03 May, 2018 07:26
IgorZ wrote:
Thu 03 May, 2018 06:41
Если вкратце - стандартная функция не учитывает строки с комментариями.
Хотелось бы подробностей
Вот как ожидаешь работу конвертора moon->lua и связанных с этим функций? Запоминает номера строк, преобразует, сохраняет соответствие исходных строк конечным. Потом, получив номер строки .lua-текста, соответствующая функция выдаёт номер строки в исходном .moon-тексте.
На самом же деле всё работает почти так: вначале конвертор выкидывает все строки, содержащие только комментарии, из исходного текста (вероятно, комментарии из строк с кодом тоже обрезаются, но на определение номеров строк это не влияет в любом случае). И только потом запоминает номера строк обескомментаренного .moon и далее по тексту. Что интересно, полностью пустые строки, не содержащие даже комментария, при конвертации не выбрасываются и учитываются в нумерации.
В результате, если, скажем, я получаю номер первой строки функции=200, с помощью errors.reverse_line_number получаю, что в исходнике.moon это строка 50, то чтобы получить реальную строку, надо отсчитать 49 строк, при этом пропуская, но не считая, строки, состоящие только из комментария. Во всяком случае, когда я стал высчитывать реальные строки в .moon-файлах именно по такому алгоритму, все ранее имевшиеся проблемы исчезли, и результат стал выдаваться точно, а не "куда-то туда".

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Thu 03 May, 2018 12:10

Наверно стоит сюда написать https://github.com/leafo/moonscript/issues

Shmuel
Posts: 5639
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 193 times

Менеджер Lua-скриптов для Farа

Post by Shmuel » Thu 03 May, 2018 12:20

John Doe wrote:
Thu 03 May, 2018 12:10
Наверно стоит сюда написать https://github.com/leafo/moonscript/issues
Предварительно проверив, что это ещё не починили в репозитории.

IgorZ
Posts: 579
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 35 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Thu 03 May, 2018 12:25

John Doe wrote:
Thu 03 May, 2018 12:10
Наверно стоит сюда написать https://github.com/leafo/moonscript/issues
Возможно, было бы неплохо, но для этого надо сначала убедиться, что в новых версиях (а в Far, как я понимаю, Moon не обновляется, так же, как Lua) это не исправлено, затем зарегистрироваться, писать, общаться - и всё это на английском, в котором я не особо силён: прочитать или написать примитивный текст смогу, но медленно, а в случае общения с носителем языка могу просто забуксовать из-за непонимания неформальных оборотов. Так что с радостью уступлю кому-либо более подкованному в английском, или же более заинтересованному в исправлении.

User avatar
zg
zero-gravity
Posts: 5527
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Менеджер Lua-скриптов для Farа

Post by zg » Thu 03 May, 2018 12:49

IgorZ wrote:
Thu 03 May, 2018 12:25
что в новых версиях (а в Far, как я понимаю, Moon не обновляется, так же, как Lua)
в фар версия 0.5.0. на сайте новее я не вижу, обновляться на транк без достаточных оснований (возможно я что-то пропустил, всегда можно написать в соответствующей теме) — не вижу смысла.

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

Менеджер Lua-скриптов для Farа

Post by John Doe » Thu 03 May, 2018 13:07

IgorZ wrote:
Thu 03 May, 2018 12:25
Так что с радостью уступлю кому-либо более подкованному в английском, или же более заинтересованному в исправлении.
Готов запостить, если напишете (в ЛС) текст на русском, с примитивным примером, который не требует фара для воспроизведения.
(Тут можно проверить http://moonscript.org/compiler/)

IgorZ
Posts: 579
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 35 times

Менеджер Lua-скриптов для Farа

Post by IgorZ » Fri 18 May, 2018 07:11

Версия 5.0.1 -
  • Шаблон события ExitFar скорректирован в соответствии с изменениями в плагине.
    Событие "ExitFAR" вызывается в следующих случаях: (a) выход из Far Manager, (b) выгрузка плагина LuaMacro, (c) выгрузка либо перезагрузка макросов. Обработчик события получает один аргумент булевого типа: false для случаев (a) и (b); true для случая (c).
  • Исправлена ошибка с обработкой нажатия кнопки "Панели" в диалоге конфигурации (с ру-борда).
  • Ещё всякие мелочи.
John Doe wrote:
Thu 03 May, 2018 13:07
IgorZ wrote:
Thu 03 May, 2018 12:25
Так что с радостью уступлю кому-либо более подкованному в английском, или же более заинтересованному в исправлении.
Готов запостить, если напишете (в ЛС) текст на русском, с примитивным примером, который не требует фара для воспроизведения.
(Тут можно проверить http://moonscript.org/compiler/)
Я был не совсем прав. Всё ещё интереснее (хотя комментарии как-то влияют на результат). Скачал и поставил Lua 5.1 и moonscript 0.5, освоился (всё же, в Far куда удобнее среда работы), начал разбираться. В package.loaded есть moonscript.line_tables, содержащий таблицы, одну на каждый .moon-файл: каждая таблица содержит строки вида @имя_.moon-файла[№_строки_в_скомпилированном_.lua-файле] = позиция_символа,_считая_от_начала_файла_в_исходном_.moon-файле. Эти данные, при внимательном рассмотрении, выглядят достаточно странно.
Положить приложенные файлы в каталог с Lua (по крайней мере, я экспериментировал именно там) и выполнить команду lua test_line_num.moon.lua >res. В файле res видно, что позиции выглядят довольно странно. Немного порывшись в moonscript.lua, обнаружил, что позиции определяются где-то в процессе вызова функции string из moonscript.parse. Туда я уже не полез, поскольку код на первый взгляд показался довольно запутанным.
Вот результат моих изысканий на сегодняшний день.
Attachments
test_line_num.moon
(321 Bytes) Downloaded 129 times
test_line_num.moon.lua
(486 Bytes) Downloaded 116 times

Post Reply

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