LuaFAR — библиотека для создания плагинов на языке Lua

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Библиотека LuaFAR делает возможным написание плагинов на языке Lua, предоставляя им адаптированную версию FAR API.

Входит в состав FAR manager (начиная с 3.0 build 2851), и доступна для использования в макросах.

Справка по функциям библиотеки — luafar_manual.chm (в дистрибутиве, папка Encyclopedia).
Мануал весьма лаконичен, предполагает что вы ориентируетесь в FAR Plugins API (FarEncyclopedia.ru.chm, в дистрибутиве)

Дополнения к мануалу:

Полезное по теме: См. также:
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

LuaFAR — библиотека для создания плагинов на языке Lua

Post by aflexus »

Latest post of the previous page:

Как из меню фара при помощи lua запустить консольное приложение с повышенными правами? Что-то на подобие sudo, но чтобы можно было использовать переменные lua
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by 2useven10 »

попробуйте плагин Sudo.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

LuaFAR — библиотека для создания плагинов на языке Lua

Post by aflexus »

2useven10 wrote: попробуйте плагин Sudo.
Плагин давно пользую. Прекрасно работает. Но необходимо запустить процесс при помощи lua из пользовательского меню. После префикса lua: префикс sudo: уже не работает.
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

LuaFAR — библиотека для создания плагинов на языке Lua

Post by cmd.exe »

Из юзер меню возвожно запускать внешние макросы по префиксу.
А что вам мешает по макроапи обратится к библиотеке? Можно и по плагин апи через ffi.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

aflexus wrote:После префикса lua: префикс sudo: уже не работает.
Plugin.Command не оно?
Разум когда-нибудь победит.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

LuaFAR — библиотека для создания плагинов на языке Lua

Post by aflexus »

Smitis wrote: Plugin.Command не оно?
Как? Можно какой-либо пример, плиз? В добавок, у Sudo даже настроек нет, как узнать его ID? А что если мне нужна функциональность с запросом. К примеру:

Code: Select all

set F_Port=!?Enter Port?!
sudo: netsh advfirewall firewall add rule name="Allow in TCP port %F_Port%" protocol=TCP localport=%F_Port% action=allow dir=IN
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

aflexus wrote:Как? Можно какой-либо пример, плиз? В добавок, у Sudo даже настроек нет, как узнать его ID?
lua:Plugin.Command("C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804","sudo:notepad.exe")
Разум когда-нибудь победит.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

LuaFAR — библиотека для создания плагинов на языке Lua

Post by aflexus »

Smitis wrote: Примеров нет. Id=C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804 (если не ошибаюсь)
Этот GUID ничего не дает. Ни через lua:Plugin.Call ни через lua:Plugin.Command. Либо GUID не верный, либо плагин не поддерживает такие вызовы...
aflexus wrote: lua:Plugin.Command("C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804","sudo:notepad.exe")
Если так то да, процесс можно запустить. А как теперь к запуску процесса добавить возможность использования переменных? Интерактивного запроса?

Вот раньше через юзер меню можно было вот так:

Code: Select all

set FW_Port=!?Enter Port?!
netsh advfirewall firewall add rule name="Allow in TCP port %FW_Port%" protocol=TCP localport=%FW_Port% action=allow dir=IN
Теперь это не работает по причине UAC плюс сам sudo не подхватывает установленную переменную через set. А целиком через lua это можно реализовать? Плюс вызвать процесс с повышенными привилегиями?
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

Как-то так
lua:local port=far.InputBox(nil,"Enter port","") if port then Plugin.Command("C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804",('sudo:netsh advfirewall firewall add rule name="Allow in TCP port %s" protocol=TCP localport=%s action=allow dir=IN'):format(port,port)) end
Я sudo не использую, показываю сам принцип, как подобное можно сделать через пользовательское меню или комстроку.

Если строка получается слишком сложной, делайте как здесь http://forum.farmanager.com/viewtopic.p ... ss#p132691
Т.е. создайте свою глобальную функцию, а лучше таблицу с функцией, чтобы избежать случайного конфликта имён, типа

Code: Select all

_G.aflexus = aflexus or {} -- Ваша таблица
aflexus.netsh_advfirewall = function() -- Ваша функция
    local port=far.InputBox(nil,"Enter port","")
    if port then
        Plugin.Command("C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804",('sudo:netsh advfirewall firewall add rule name="Allow in TCP port %s" protocol=TCP localport=%s action=allow dir=IN'):format(port,port))
    end
end
А в меню вставляйте lua:aflexus.netsh_advfirewall()
Разум когда-нибудь победит.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

LuaFAR — библиотека для создания плагинов на языке Lua

Post by aflexus »

Smitis, О!!! Как раз то, что мне было нужно! Спасибо огромное! :)
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

Функция GetRegKey на ФАР x86 на Windows x64 работает с редиректом WOW64 (или как там он правильно называется), т.е., например, вместо HKLM\SOFTWARE читает из HKLM\SOFTWARE\Wow6432Node
Остальные функции для работы с реестром не проверял, подозреваю, что там может быть также. Это как-то лечится? Ведь сам ФАР с той же файловой системой работает нормально.
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by DrKnS »

Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Smitis, поместите виш на мантис.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Smitis »

Разум когда-нибудь победит.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by IgorZ »

Вероятно, обнаружена ошибка в CommandLine. Или в документации. В примере

Code: Select all

CommandLine {
  description = "test CommandLine"; prefixes = "zz";
  action = function() Keys("A") end;
}
Keys вызывает . При этом

Code: Select all

CommandLine {
  description = "test CommandLine"; prefixes = "zz";
  action = function() mf.postmacro(Keys,"A") end;
}
ошибки не вызывает.

Следует либо исправить ошибку, либо, если это так и задумано, явно прописать в документации, что в CommandLine не работает Keys и, видимо, остальные функции, на использование которых есть ограничения.

Проверено на Far 3.0.4539 x86 под Windows XP - профиль нулевой, других скриптов нет, из плагинов только LuaMacro.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

IgorZ wrote: Вероятно, обнаружена ошибка в CommandLine. Или в документации.
Скорее неполнота документации.
Общее правило таково, что т.н. "функции с ограничением в использовании" могут работать только из функции action макроса. Все прочие варианты пролетают (Event, CommandLine, MenuItem, condition).
Post Reply

Return to “Обсуждение макросов”