LuaFAR for Editor

Здесь можно обсудить ваш любимый плагин.
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Latest post of the previous page:

Я думаю функция полезна, не надо её убирать. Иначе придется всё это в макросе писать.
Мануал очень хороший (:. Он полезен для больших функций (с большим числом аргументов), до которых я пока не дошел. То что я до последнего времени смотрел, легче открыть исходник и найти нужную функцию в списке функций colorer'а + можно сразу скопировать название флагов или функций.

Я использую большую библиотеку, со встроенным lua. Я пробовал маленькие, но почему-то он при загрузке не находит lua5.1.dll (переименовываю я правильно). Но с библиотеками как-то времени не было возиться, я пока внимательно не проверял.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

Я в последнем релизе lf4ed упустил одну мелочь, но неохота из-за этого делать новый релиз. (Имеет значение только для тех, кто добавляет свои утилиты).
Исправленный вариант здесь: http://luafar.luaforge.net/luafar4editor_0.0.0.zip
В хелпе см. ("adding utilities by the user")
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

а как можно повесить хоткей на Alt-Shift-. например?
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

far.GetDlgItem(handle,n,nil) возвращает таблицу, где вместо элементов Selected и Data --- 7 и 10.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:а как можно повесить хоткей на Alt-Shift-. например?
Был выбор: сделать назначение хоткеев универсальным (включая left ctrl, right alt и т.д.), но менее интуитивным для пользователя, либо - несколько ограниченным, но простым в употреблении. Выбрал - второе. Надо будет - сделаю и первое.

Теперь ближе к делу: см. в service.cpp массив VirtualKeyStrings. Последний элемент комбинации клавиш, указываемой пользователем будет работать, если он совпадает с каким-либо из стрингов этого массива, после удаления "VK_". То-есть, Alt+Shift+Subtract должен работать (но работает почему-то только с минусом на "numeric pad").
maxdrfl wrote:far.GetDlgItem(handle,n,nil) возвращает таблицу, где вместо элементов Selected и Data --- 7 и 10.
Это не совсем так. 7 и 10 - это индексы, а данные расположены по этим индексам.

Если хочешь, могу выложить маленький Lua-модуль dialog.lua, который (на мой взгляд) сильно улучшает API диалога. Но в нём придётся разобраться, прежде, чем пользоваться.
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Shmuel, спасибо.

Модуль диалога я нашел в farlua1.0 (:. Или есть более продвинутый?

Просто если вызвать far.GetDialogItem(handle,n,item) то он туда записывает поле Data. Поэтому путаница получается.

Я тут поупражнялся с диалогами и состряпал калькулятор.
работает через xpcall( ... tonumber(... .loadstring('return'..str)()...)...) поэтому умеет считать длину массивов и т. д.
С функциями math работает как со своими. При желании можно добавить любую пользовательскую функцию либо на lua либо из множества библиотек вычислений для lua.

Выкладываю с dialog.lua. Пре-релиз (:.
update: посмотрел внимательно в dialog.lua и убрал лишние таблицы.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl
Отлично, калькулятор очень понравился! Естественно, его можно развивать дальше. Например, добавить возможность куда-то отправлять результат (а может быть и формулу), например - в буфер обмена, или вставлять в редактор.

Проверил модуль dialog.lua - как ни странно, он не был модифицирован со времён луафар-0.1. Так что и выкладывать незачем. А насчёт путаницы - её нет. Это - поведение "by design".
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Shmuel.
Развивать буду обязательно. + у меня еще несколько задумок.

Просто у меня сейчас работы много, а я не могу удержаться и с lua ковыряюсь (:.

PS. хотел предложить добавить в метатаблицу диалога функцию: __len = function(t) return #t + t[0] and 1 end, что бы можно было не сдвигать массив на единицу. Однако она не работает. __len сама по себе работает, а оператор # нет.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:Просто у меня сейчас работы много, а я не могу удержаться и с lua ковыряюсь (:.
Пожалуйста, не за счёт работы.
maxdrfl wrote:PS. хотел предложить добавить в метатаблицу диалога функцию: __len = function(t) return #t + t[0] and 1 end, что бы можно было не сдвигать массив на единицу. Однако она не работает. __len сама по себе работает, а оператор # нет.
Мне бы не хотелось дополнительно усложнять модуль dialog. Но посмотрев код calc.lua, я заметил, что ты пользуешься этим модулем не так как я. Например, в моём Lua-коде нет доступа к элементам по индексу - только по именам (то-есть не x[10], а x.Data). И что интересно, я ещё ни разу не пользовался ф-цией GetDlgItem.
Для иллюстрации, приложен файл sortdialog.lua - реальный, из плагина.
Attachments
sortdialog.zip
(1.66 KiB) Downloaded 173 times
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Shmuel, я с FarAPI в принципе не знаком... был.
Поэтому всё что я сейчас делаю либо делается по необходимости, либо по незнанию.

GetDialogItem нужен что-бы обновлятьинформацию о редактируемой строке и находу собирать функцию.
SetDialogItem --- чтобы обновить данные. Поначалу из-за ошибок ничего не работало. После нескольких итераций макрос заработал с SetDialogItem. Наверное эффективнее использовать DM_SETTEXT.

Про индекс я писал: x.Data не устанавливается в GetDialogItem.

PS. Кстати, far.GetCharTable возвращает структуру, в которой задано только имя. Независимо от текущей кодировки.

Code: Select all

local tbl = far.GetCharTable(far.EditorGetInfo().TableNum)
for k,v in pairs(tbl) do
   far.EditorInsertText(k)
   far.EditorInsertText(' ')
   far.EditorInsertText(v)
   far.EditorInsertString()
end
PPS. Т.е. SortDialog у тебя прямо на lua? Он что, в байт-код компилируется?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:[...]
Про индекс я писал: x.Data не устанавливается в GetDialogItem.

PS. Кстати, far.GetCharTable возвращает структуру, в которой задано только имя. Независимо от текущей кодировки.
Проверю попозже.
maxdrfl wrote: PPS. Т.е. SortDialog у тебя прямо на lua? Он что, в байт-код компилируется?
Все утилиты плагина lf4ed - на Lua. Да, скомпилированы в байт-код и встроены в DLL.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:PS. Кстати, far.GetCharTable возвращает структуру, в которой задано только имя. Независимо от текущей кодировки.
Проверил, всё в порядке. Просто эти 256-байтные таблицы начинаются с символа '\0', поэтому в редактор ничего не вставляется. Попробуй

Code: Select all

far.EditorInsertText(#v) -- вместо v
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

спасибо, работает.

Shmuel. Ты можешь сказать, что еще в плагине появится?
Планируешь ли ты запоминание функций? Что-бы файлы несколько раз не перечитывать?

Я тут проверил вот такой код:
if not EditorID then EditorID=far.EditorGetInfo().EditorID end
if math.mod(EditorID,2)==0 then
AddToMenu("", "calc.lua", "calculator|Alt+a")
else
AddToMenu("", "calc.lua", "calculator|Alt+b")
end
получается забавно. Предыдущий хоткей запоминается и работает до выхова меню.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:Ты можешь сказать, что еще в плагине появится? Планируешь ли ты запоминание функций? Что-бы файлы несколько раз не перечитывать?
Ну, например, хочу дать возможность пользовательским утилитам на время их исполнения иметь свои экспортируемые функции (на текущий момент, если утилита захочет это сделать, она обязана перед окончанием работы восстановить исходное состояние, а вообще-то это должен делать сам плагин).

Ещё - возможно добавление утилит, в том числе и твоих (а может быть ещё кто-то подключится). :)

Запоминание функций сделать очень просто. Я сознательно откладываю это на потом, так как преждевременная оптимизация - это зло. А главное, при отладке придётся делать много лишних телодвижений. Тем не менее, это запланировано в таком виде: будет два режима ("нормальный" и "отладочный"), переключение между ними должно быть без перезапуска FAR.
maxdrfl wrote:Я тут проверил вот такой код:

Code: Select all

if not EditorID then EditorID=far.EditorGetInfo().EditorID end
if math.mod(EditorID,2)==0 then
    AddToMenu("",  "calc.lua", "calculator|Alt+a")
else
    AddToMenu("",  "calc.lua", "calculator|Alt+b")
end
получается забавно. Предыдущий хоткей запоминается и работает до выхова меню.
Ну ничего забавного нет, если разобраться. Почитай вот это: http://api.farmanager.com/ru/exported_f ... event.html
Кстати, вместо math.mod(EditorID,2) проще писать EditorID % 2
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Тем не менее, это запланировано в таком виде: будет два режима ("нормальный" и "отладочный"), переключение между ними должно быть без перезапуска FAR.
то, что надо (:
Ну ничего забавного нет, если разобраться. Почитай вот это: http://api.farmanager.com/ru/exported_f ... event.html
ага, не хватает EDITORGOTFOCUS.
Кстати, вместо math.mod(EditorID,2) проще писать EditorID % 2
ага.

а AdvControl и EditorSetParameter будут?
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:не хватает EDITORGOTFOCUS.
[...]
а AdvControl и EditorSetParameter будут?
EDITORGOTFOCUS нету, потому что используется только API Far 1.70 release, всё, что новее, я не трогаю до тех пор, пока LuaFAR API не охватит вышеуказанный API.

Насчёт AdvControl и проч. - должно добавляться, естественно, при наличии времени. Проект LuaFAR открыт для кооперации, так что если кто-либо захочет помочь, буду только благодарен.

Немного упростил dialog.lua (выкинул лишнее) - файл приложен.
Attachments
dialog.zip
(916 Bytes) Downloaded 178 times
Post Reply

Return to “Обсуждение плагинов”