Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Разработка Far.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by zg »

Latest post of the previous page:

NightRoman wrote:Если я гоню, лучше объясни конструктивно.
я ж и объясняю, функции нет, но ты уже приписываешь её какие-то свойства. каким образом?
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by NightRoman »

Ясно. Ну так никакие вещи не появятся, если рассуждать только о уже существующем.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by NightRoman »

В PowerShellFar у меня реализованы "супер-макросы" - микс макросов и кода, испольняемый синхронно, хотя внутри присутствуют асинхронные куски. Но это не обычные скрипты PowerShell в итоге получились, а требующие предобработки и специального пошагового выполнения. Надеюсь, что Фару будет проще справиться, ибо у него может быть плотнее связь со скриптовым движком (главное, чтобы не прерывать скрипт или хотя бы не терять контекст). Однако, даже если и не сильно проще, то все равно сделать возможно, раз даже в PSF это получилось.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

NightRoman wrote:* Проигрывание родного макроса Фаром шаг за шагом - это одно. Keys() постятся, Фар переходит в другой режим, остальной макрос ждет очереди. Keys отработали, Фар пошел дальше играть макрос.
* Вызов внешнего движка со скриптом из которого будет вызван Keys() - это другое. Фар уже вызвал движок *модально*, из которого вызывается Keys(). Управление к Фару еще не вернулось из скрипта. В то же время по Keys() Фар должен получить управление, чтобы их проиграть.
А как же плагины (в том числе луафаровские) вызывают

Code: Select all

MacroControl(Id, MCTL_SENDSTRING, MSSC_POST, &msmt)
и всё работает? (Вот, кстати, альфа-вариант реализации ф-ции Keys).
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

А как написать на LUA, например, такой макрос:

Code: Select all

F11
$if Menu.Select("MyPlugin")
  Enter
$end
?
Именно с F11, без Plugin.Menu или аналогов.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

Max Rusov wrote:А как написать на LUA, например, такой макрос:

Code: Select all

F11
$if Menu.Select("MyPlugin")
  Enter
$end
?
Именно с F11, без Plugin.Menu или аналогов.
В простейшем варианте - так:

Code: Select all

far.MacroPost[[
F11
$if (Menu.Select("MyPlugin"))
  Enter
$end
]]
P.S. Возможно, я не понял вопроса. То, что выше - это как вызвать данный макрос из плагина (как это теперь делается). Что же касается гипотетического будущего макродвижка на скриптовом языке, то это, конечно, потребует решения некоторых технических проблем, но я не хочу этим сейчас озадачиваться, именно поскольку это всё гипотетическое.
Last edited by Shmuel on Tue 17 Apr, 2012 13:27, edited 1 time in total.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Aidar »

Max Rusov wrote:А как написать... такой макрос: ...
Вообще-то предполагается исключить из макроязыка функции типа Menu.Select,
т.е. надо будет переписать такой макрос в виде скрипта.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by NightRoman »

разница такая:

макрос:

Code: Select all

a b c
do-foo
-- сначала играются a b c, потом выполняется do-foo

скрипт, плагин, и т.п.:

Code: Select all

Post("a b c")
do-foo
-- сначала постятся, но не играются a b c, потом выполняется do-foo, а "a b c" играются, когда скрипт отдаст управление Фару.

разница в некоторых случаях - огромная.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

Shmuel wrote:В простейшем варианте - так:
Нет, зачем тогда Lua? Естественно, я ожидаю увидеть что-то типа:

Code: Select all

Keys("F11")
if MenuSelect("MyPlugin) then
  Keys("Enter")
end
Shmuel wrote:...это, конечно, потребует решения некоторых технических проблем, но я не хочу этим сейчас озадачиваться....
А стоит, потому что это может поставить большой жирный крест на идее реализации макросов на внешнем скриптовом движке
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

Max Rusov wrote:
Shmuel wrote:...это, конечно, потребует решения некоторых технических проблем, но я не хочу этим сейчас озадачиваться....
А стоит, потому что это может поставить большой жирный крест на идее реализации макросов на внешнем скриптовом движке
Хорошо, подумаю и отпишусь (но не из-за жирного креста, а просто из спортивного интереса).
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

Что если так: Фар ведь знает, что он исполняет "свой" (не плагиновский) макрос в данный момент (какая-то внутренняя переменная состояния имеет определённое значение), поэтому функция "Keys", анализируя данную переменную, не просто выполняет Post, а ждёт реального завершения "нажатий", прежде, чем вернёт управление. Если же Keys() вызвана из плагина, то значение вышеупомянутой переменной состояния будет другим, и функция "Keys" будет вести себя соответственно.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

Shmuel wrote:... ждёт реального завершения "нажатий", прежде, чем вернёт управление...
Как? Ну вот:

Modal.cpp:

Code: Select all

void Modal::Process()
{
	Show();

	while (!Done())
	{
		ReadInput();
		ProcessInput();
	}

	GetDialogObjectsData();
}
По моему, F11 вызовет Process() и управление вернется только когда диалог закроется, что немного не то, что в макросах. Как быть?
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

Хорошо, а как нынешний макродвижок с этим справляется? И что мешает его код использовать в функции Keys?

Как вариант - функция Keys может содержать свой собственный цикл ReadInput/ProcessInput.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

Конечно, лучше у Валентина спросить, но как я понимаю сейчас цикл интерпретации макро кода совмещен с циклом обработки сообщений. Т.е. при запуске вторичного цикла обработки сообщений в диалоге, он просто продолжает интерпретацию макро кода (во вложенном фрейме стека)
Shmuel wrote:Как вариант - функция Keys может содержать свой собственный цикл ReadInput/ProcessInput.
И что это даст? Работать то должен скриптовой движек.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

В любом случае, учитывая, что реализуется эта кухня внутри Фара, никаких принципиальных трудностей быть не должно. То-есть, никто не говорил, что задача замены макроязыка - тривиальная, но она вполне решаемая (IMHO).
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

Ну, не знаю. Только если вы скрестите ужа с ежом (т.е. объедините циклы обработки сообщений и интерпретации PCode LUA) - но мне это представляется довольно сложным и вообще не факт, что возможным.
Либо этот функционал объявляется не поддерживаемым (что, вообщем, допустимо). Но тогда это не будет полноценной заменой макросам. Какие-то макросы перенести не удастся.
Post Reply

Return to “Development”