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

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 532
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 22 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.1.7z
(58.99 KiB) Downloaded 83 times
LuaManager.3.1.11.7z
Последняя версия, выполненная в виде скрипта
(50.56 KiB) Downloaded 152 times
Last edited by IgorZ on Fri 18 May, 2018 06:40, edited 7 times in total.

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

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

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

Latest post of the previous page:

Версия 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 78 times
test_line_num.moon.lua
(486 Bytes) Downloaded 71 times

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

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

Post by John Doe » Fri 18 May, 2018 09:08

IgorZ wrote:
Fri 18 May, 2018 07:11
В файле res видно, что позиции выглядят довольно странно.
  1. ----------------------------------
  2. @.\test_line_num.moon    -- >>  table: 0x004ce020  
  3. ----------------------------------
  4. ----------------------------------
  5. Macro
  6.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  7.   area:"Common"
  8.   key:"CtrlAltMultiply"
  9.   description:"Test"
  10. --  filemask:""
  11. --  flags:""
  12. --  priority:50
  13. --  sortpriority:50
  14. --  condition:(key) -> true
  15.   action: ->
  16.     far.Show "test"
  17.  
  18. ["1"] = 71
  19. Macro
  20.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  21.   area:"Common"
  22.   key:"CtrlAltMultiply"
  23.   description:"Test"
  24. --  filemask:""
  25. --  flags:""
  26. --  priority:50
  27. --  sortpriority:50
  28. --  condition:(key) -> true
  29.   action: ->
  30.     far.Show "test"
  31.  
  32. ["2"] = 82
  33. "1A13C75D-8599-480F-A3C0-E469DC60BB94"
  34.   area:"Common"
  35.   key:"CtrlAltMultiply"
  36.   description:"Test"
  37. --  filemask:""
  38. --  flags:""
  39. --  priority:50
  40. --  sortpriority:50
  41. --  condition:(key) -> true
  42.   action: ->
  43.     far.Show "test"
  44.  
  45. ["3"] = 128
  46. "Common"
  47.   key:"CtrlAltMultiply"
  48.   description:"Test"
  49. --  filemask:""
  50. --  flags:""
  51. --  priority:50
  52. --  sortpriority:50
  53. --  condition:(key) -> true
  54.   action: ->
  55.     far.Show "test"
  56.  
  57. ["4"] = 143
  58. "CtrlAltMultiply"
  59.   description:"Test"
  60. --  filemask:""
  61. --  flags:""
  62. --  priority:50
  63. --  sortpriority:50
  64. --  condition:(key) -> true
  65.   action: ->
  66.     far.Show "test"
  67.  
  68. ["5"] = 175
  69. "Test"
  70. --  filemask:""
  71. --  flags:""
  72. --  priority:50
  73. --  sortpriority:50
  74. --  condition:(key) -> true
  75.   action: ->
  76.     far.Show "test"
  77.  
  78. ["7"] = 292
  79. far.Show "test"
  80.  
  81. ["9"] = 71
  82. Macro
  83.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  84.   area:"Common"
  85.   key:"CtrlAltMultiply"
  86.   description:"Test"
  87. --  filemask:""
  88. --  flags:""
  89. --  priority:50
  90. --  sortpriority:50
  91. --  condition:(key) -> true
  92.   action: ->
  93.     far.Show "test"
  94.  
  95. ----------------------------------
Поясните
Last edited by John Doe on Fri 18 May, 2018 09:10, edited 1 time in total.

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

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

Post by IgorZ » Fri 18 May, 2018 09:55

John Doe wrote:
Fri 18 May, 2018 09:08
IgorZ wrote:
Fri 18 May, 2018 07:11
В файле res видно, что позиции выглядят довольно странно.
  1. ----------------------------------
  2. @.\test_line_num.moon    -- >>  table: 0x004ce020  
  3. ----------------------------------
  4. ----------------------------------
  5. Macro
  6.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  7.   area:"Common"
  8.   key:"CtrlAltMultiply"
  9.   description:"Test"
  10. --  filemask:""
  11. --  flags:""
  12. --  priority:50
  13. --  sortpriority:50
  14. --  condition:(key) -> true
  15.   action: ->
  16.     far.Show "test"
  17.  
  18. ["1"] = 71
  19. Macro
  20.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  21.   area:"Common"
  22.   key:"CtrlAltMultiply"
  23.   description:"Test"
  24. --  filemask:""
  25. --  flags:""
  26. --  priority:50
  27. --  sortpriority:50
  28. --  condition:(key) -> true
  29.   action: ->
  30.     far.Show "test"
  31.  
  32. ["2"] = 82
  33. "1A13C75D-8599-480F-A3C0-E469DC60BB94"
  34.   area:"Common"
  35.   key:"CtrlAltMultiply"
  36.   description:"Test"
  37. --  filemask:""
  38. --  flags:""
  39. --  priority:50
  40. --  sortpriority:50
  41. --  condition:(key) -> true
  42.   action: ->
  43.     far.Show "test"
  44.  
  45. ["3"] = 128
  46. "Common"
  47.   key:"CtrlAltMultiply"
  48.   description:"Test"
  49. --  filemask:""
  50. --  flags:""
  51. --  priority:50
  52. --  sortpriority:50
  53. --  condition:(key) -> true
  54.   action: ->
  55.     far.Show "test"
  56.  
  57. ["4"] = 143
  58. "CtrlAltMultiply"
  59.   description:"Test"
  60. --  filemask:""
  61. --  flags:""
  62. --  priority:50
  63. --  sortpriority:50
  64. --  condition:(key) -> true
  65.   action: ->
  66.     far.Show "test"
  67.  
  68. ["5"] = 175
  69. "Test"
  70. --  filemask:""
  71. --  flags:""
  72. --  priority:50
  73. --  sortpriority:50
  74. --  condition:(key) -> true
  75.   action: ->
  76.     far.Show "test"
  77.  
  78. ["7"] = 292
  79. far.Show "test"
  80.  
  81. ["9"] = 71
  82. Macro
  83.   id:"1A13C75D-8599-480F-A3C0-E469DC60BB94"
  84.   area:"Common"
  85.   key:"CtrlAltMultiply"
  86.   description:"Test"
  87. --  filemask:""
  88. --  flags:""
  89. --  priority:50
  90. --  sortpriority:50
  91. --  condition:(key) -> true
  92.   action: ->
  93.     far.Show "test"
  94.  
  95. ----------------------------------
Поясните
Для наглядности дополнительно приведу скомпилированный из test_line_num.moon .lua.
  1. return Macro({
  2.   id = "1A13C75D-8599-480F-A3C0-E469DC60BB94",
  3.   area = "Common",
  4.   key = "CtrlAltMultiply",
  5.   description = "Test",
  6.   action = function()
  7.     return far.Show("test")
  8.   end
  9. })
Что сразу видно: шестая строка есть. Причём, значащая, и соответствие ей в исходном .moon имеется. Однако, в таблице шестого элемента нет.
Кроме того, настораживает, что позиция в элементах 2-5 указывает не на начало строки, и даже не на первый непробельный символ (и то, и другое кажется достаточно логичным вариантом), а на значение поля таблицы. Впрочем, здесь ошибки вполне может и не быть: как именно работает алгоритм запоминания позиции, я не разбирался, а строка, в итоге, указана верная.
К отсутствию восьмого элемента, вроде бы, претензий нет - восьмая строка в .lua появилась из-за разницы в идеологии Lua и Moon и не имеет аналога в .moon. Но девятая строка того же происхождения! А девятый элемент есть, и по значению равен первому (что, на мой взгляд, логично: именно там открываются таблица и вызов функции Macro, закрывающиеся в девятой строке). Так что же неверно: наличие девятого элемента, или отсутствие восьмого (ведь восьмая строка - это закрытие функции, начало определения которой находится в шестой строке)?
Кстати, сейчас подумал: а ведь, похоже, правильно именно наличие девятого элемента, а отсутствие восьмого - следствие отсутствия шестого.
В общем, всё это выглядит несколько не так, как ожидалось бы, исходя из здравого смысла. А отсутствие шестого элемента просто приводит к тому, что LuaManager не в состоянии определить, в какой строке начинается функция action (это лично меня волнует больше всего: поддержка Moon оказывается какой-то сомнительной по независящим от меня обстоятельствам; и это же единственное, что выглядит безусловной ошибкой).

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

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

Post by John Doe » Fri 18 May, 2018 10:10

IgorZ wrote:
Fri 18 May, 2018 09:55
В общем, всё это выглядит несколько не так, как ожидалось бы, исходя из здравого смысла.
Это не удивительно, ведь тут мы используем недокументированный внутренний интерфейс.
Исходя из этого отсутствие в таблице каких-то данных нельзя назвать ошибкой.

А получилось ли добиться неверных номеров строк?

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

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

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

John Doe wrote:
Fri 18 May, 2018 10:10
IgorZ wrote:
Fri 18 May, 2018 09:55
В общем, всё это выглядит несколько не так, как ожидалось бы, исходя из здравого смысла.
Это не удивительно, ведь тут мы используем недокументированный внутренний интерфейс.
Исходя из этого отсутствие в таблице каких-то данных нельзя назвать ошибкой.
Этот недокументированный интерфейс использует документированная moonscript.errors.reverse_line_number, описание которой я выудил (если память не изменяет) с официального сайта moonscript. И использует именно этим способом: получает номер строки в .lua, если элемент с таким номером есть в соответствующей таблице, берёт его значение, иначе уменьшает номер строки на 1, пока не найдёт элемент с таким номером. А затем берёт содержимое файла из кэша (или читает его, если в кэше нет) и match-ем считает, сколько строк имеется от начала файла до полученной из таблицы позиции.
John Doe wrote:
Fri 18 May, 2018 10:10
А получилось ли добиться неверных номеров строк?
Если бы я использовал в примере reverse_line_number, то для 6-й строки .lua я получил бы 7-ю строку .moon вместо 13-й. Проверять сейчас некогда. Может, позже. Если нет, то на следующей неделе.

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

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

Post by John Doe » Fri 18 May, 2018 18:10

IgorZ wrote:
Fri 18 May, 2018 11:27
Этот недокументированный интерфейс использует документированная moonscript.errors.reverse_line_number, описание которой я выудил (если память не изменяет) с официального сайта moonscript.
Не находит https://google.com/search?q=site:moonsc ... ine_number
IgorZ wrote:
Fri 18 May, 2018 11:27
Если бы я использовал в примере reverse_line_number, то для 6-й строки .lua я получил бы 7-ю строку .moon вместо 13-й.
Определённо неточность в определении строк присутствует, я сталкивался, и тоже как-то решал эту проблему.

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

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

Post by IgorZ » Mon 21 May, 2018 04:37

John Doe wrote:
Fri 18 May, 2018 18:10
IgorZ wrote:
Fri 18 May, 2018 11:27
Этот недокументированный интерфейс использует документированная moonscript.errors.reverse_line_number, описание которой я выудил (если память не изменяет) с официального сайта moonscript.
Не находит https://google.com/search?q=site:moonsc ... ine_number
Тогда даже и не скажу, где я это нашёл. Всё-таки, почти четыре года прошло, как я в этом разбирался.
John Doe wrote:
Fri 18 May, 2018 18:10
IgorZ wrote:
Fri 18 May, 2018 11:27
Если бы я использовал в примере reverse_line_number, то для 6-й строки .lua я получил бы 7-ю строку .moon вместо 13-й.
Определённо неточность в определении строк присутствует, я сталкивался, и тоже как-то решал эту проблему.
Я тупо прибавляю одну строку (с последующим уточнением в сторону начала текста, если надо). Но помогает не всегда. Кстати, в приведённом .moon примере не спасает.

Post Reply

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