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

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

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

Post by John Doe » Wed 29 Jul, 2009 21:41

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

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

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

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

Полезное по теме: См. также:

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

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

Post by IgorZ » Wed 23 Dec, 2015 12:15

Latest post of the previous page:

Shmuel wrote:IgorZ, это было исправлено 3 дня назад.
Спасибо за сверхоперативную реакцию. :)

aflexus
Posts: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Thu 24 Dec, 2015 05:08

Как из меню фара при помощи lua запустить консольное приложение с повышенными правами? Что-то на подобие sudo, но чтобы можно было использовать переменные lua

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Thu 24 Dec, 2015 06:50

попробуйте плагин Sudo.

aflexus
Posts: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Sat 26 Dec, 2015 09:51

2useven10 wrote: попробуйте плагин Sudo.
Плагин давно пользую. Прекрасно работает. Но необходимо запустить процесс при помощи lua из пользовательского меню. После префикса lua: префикс sudo: уже не работает.

User avatar
cmd.exe
Posts: 319
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 170 times
Been thanked: 5 times
Contact:

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

Post by cmd.exe » Sat 26 Dec, 2015 14:18

Из юзер меню возвожно запускать внешние макросы по префиксу.
А что вам мешает по макроапи обратится к библиотеке? Можно и по плагин апи через 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

Smitis
Posts: 1453
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sat 26 Dec, 2015 22:25

aflexus wrote:После префикса lua: префикс sudo: уже не работает.
Plugin.Command не оно?
Разум когда-нибудь победит.

aflexus
Posts: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Sun 27 Dec, 2015 17:00

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

Smitis
Posts: 1453
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Sun 27 Dec, 2015 21:09

aflexus wrote:Как? Можно какой-либо пример, плиз? В добавок, у Sudo даже настроек нет, как узнать его ID?
lua:Plugin.Command("C5DA0A14-FFAF-453E-9C3A-10B4C0FC0804","sudo:notepad.exe")
Разум когда-нибудь победит.

aflexus
Posts: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Mon 28 Dec, 2015 06:24

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 это можно реализовать? Плюс вызвать процесс с повышенными привилегиями?

Smitis
Posts: 1453
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Mon 28 Dec, 2015 07:48

Как-то так
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 не использую, показываю сам принцип, как подобное можно сделать через пользовательское меню или комстроку.

Если строка получается слишком сложной, делайте как здесь viewtopic.php?f=4&t=9808&hilit=dialogclass#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: 35
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Mon 28 Dec, 2015 08:34

Smitis, О!!! Как раз то, что мне было нужно! Спасибо огромное! :)

Smitis
Posts: 1453
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Mon 08 Feb, 2016 08:01

Функция GetRegKey на ФАР x86 на Windows x64 работает с редиректом WOW64 (или как там он правильно называется), т.е., например, вместо HKLM\SOFTWARE читает из HKLM\SOFTWARE\Wow6432Node
Остальные функции для работы с реестром не проверял, подозреваю, что там может быть также. Это как-то лечится? Ведь сам ФАР с той же файловой системой работает нормально.
Разум когда-нибудь победит.

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

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

Post by DrKnS » Mon 08 Feb, 2016 08:25


Shmuel
Posts: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Mon 08 Feb, 2016 10:22

Smitis, поместите виш на мантис.

Smitis
Posts: 1453
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

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

Post by Smitis » Mon 08 Feb, 2016 11:58

Разум когда-нибудь победит.

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

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

Post by IgorZ » Thu 11 Feb, 2016 04:57

Вероятно, обнаружена ошибка в 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: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 11 Feb, 2016 07:44

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

Post Reply

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