LuaComplete — завершение слов макроса на LUA

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

Небольшой макрос, реализующий завершение слов, заточенный под LUA. В отличие от многочисленных скриптов и плагинов Word Cmplete, предлагаемый скрипт не анализирует уже имеющиеся в тексте слова, а ищет в списке ключевых слов языка LUA1 и элементов таблицы _G (со всеми вложенностями).

В настоящее время для получения списка ключевых слов используется скрипт LuaCheck, модуль luacheck.builtin_standards (подраздел возвращаемой таблицы max).


ArchiveLuaComplete.v4.7z
(5.01 KiB) Downloaded 84 times
Last edited by buniak_a_h on Wed 05 Aug, 2020 09:12, edited 5 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Sat 19 May, 2018 10:54
John Doe wrote: Sat 19 May, 2018 08:01 А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.
Да, действительно, Word Complete у меня был, а Editor_MacroComplete не ставил...
Ну, значит я изобретал ещё один велосипед...
Спасибо.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Fri 18 May, 2018 11:30 Реализована фильтрация в меню выбора слова
А почему бы просто не включать штатный режим фильтрации?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe wrote: Sat 19 May, 2018 15:00 А почему бы просто не включать штатный режим фильтрации?
Да там и так используется Menu.FilterString. Мне не нравится, что при включении фильтра Title затирается и заменяется на [...]. Я бы восстанавливал по far.Text, но для этого надо знать координаты и ширину меню. Если координаты я могу хотя бы задать, то как определить ширину - я не нашёл. Поэтому блокирую фильтр и обрабатываю нажатия клавиш.
Впрочем, всё это уже не имеет значения. FimSU сделал красивее. Один минус (у себя переделаю): по клавишам знаков пунктуации вместо фильтра сделаю выход с добавлением нажатой кнопки.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe wrote: Sat 19 May, 2018 15:00 А почему бы просто не включать штатный режим фильтрации?
Есть ещё одна вещь, мне не понятная:
Я не нашёл, как включить фильтр сразу при вызове far.Menu, и не нашёл, как сделать выход из Menu.Show по клавишам аналогично BreakKeys ...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

1. Через postmacro, или Event.
2. far.Menu предоставляет больше возможностей управления, а far.Show проще в использовании, вот и выбирайте по своим потребностям.
Внутри far.Show реализована через far.Menu, и с этим всё понятно.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe wrote: Sun 20 May, 2018 05:56 Внутри far.Show реализована через far.Menu, и с этим всё понятно.
Немножко не понял.. Мы обсуждали Menu.Show и far.Menu. Вы имеете в виду не far.Show, а Menu.Show реализована через far.Menu? Впрочем, и far.Show, наверно, тоже...
Я примерно представлял себе, как включить фильтр в far.Menu (видимо, послать postmacro(Keys"CtrlAltF") ) (не пробовал из-за "затирания" Title).
А как реализовать выход из Menu.Show по аналогам BreakKeys ? или всё же использовать far.Menu, заранее послав CtrlAltF?
Есть ещё два больших минуса (в контексте этой задачи) у стандартного фильтра:
1. Регистронезависимость (язык-то регистрозависимый! Впрочем, если не помнишь, где нужная функция (в far или в Far) и как она точно называется (menu или Menu), то регистронезависимость - плюс. Т.е. надо бы как-то переключать...
2. Фильтр не с начала, а по вхождению. И это - тоже иногда плюс, а иногда - не очень.
В результате хотелось бы по кнопкам выставлять items[j].hidden в зависимости от необходимости. Вопрос - как обновить меню, вызванное через far.Menu при изменении items ? ACTL_REDRAWALL поможет? Повторно вызывать Menu.Show? Вопрос риторический - сам проверю...
Прямо хоть полный диалог пиши... Из одного элемента DI_LISTBOX (ну и рамки с Title-ом и Bottom-ом)!
А может действительно? Тогда полный контроль будет...
Кстати, именно эти три особенности (две - из-за стандартной фильтрации и невозможность выбора пункту МЕНЮ с одновременным занесением "следующего" символа) мне и не понравились в макросе SimSU. В остальном он полностью покрывает мои потребности. Видимо, эту тему надо закрыть за ненадобностью...
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe wrote: Sun 20 May, 2018 05:56 1. Через postmacro, или Event.
Может, я неправильно использую... Вот такое не работает:

Code: Select all

eval([[Keys("CtrlAltF")]], 0)
far.Menu({Title="Title"},{{text="aaa"},{text="bbb"}})
Не работает также такое:

Code: Select all

mf.postmacro(Keys("CtrlAltF"))
far.Menu({Title="Title"},{{text="aaa"},{text="bbb"}})
а также варианты с Menu.FilterStr(1, 'a') вместо Keys
Last edited by buniak_a_h on Sun 20 May, 2018 06:58, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Sun 20 May, 2018 06:37
John Doe wrote: Sun 20 May, 2018 05:56 Внутри far.Show реализована через far.Menu, и с этим всё понятно.
Немножко не понял.. Мы обсуждали Menu.Show и far.Menu. Вы имеете в виду не far.Show, а Menu.Show реализована через far.Menu? Впрочем, и far.Show, наверно, тоже...
Это я криво прочитал, извините. Так что именно вас привлекло в Far.Menu? Фильтр?

Что касается реализации меню средствами диалога, то это объемный вопрос, если действительно актуально, то лучше обсудить в отдельной теме.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Sun 20 May, 2018 06:55
John Doe wrote: Sun 20 May, 2018 05:56 1. Через postmacro, или Event.
Может, я неправильно использую... Вот такое не работает:

Code: Select all

eval([[Keys("CtrlAltF")]], 0)
far.Menu({Title="Title"},{{text="aaa"},{text="bbb"}})
Про eval я ничего не писал.

Другие же варианты должны работать, я не раз использовал, есть даже общее решение для автоматического включения фильтров в определенных диалогах.

Ваш код сейчас протестировать не могу.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe wrote: Sun 20 May, 2018 07:41 Так что именно вас привлекло в Far.Menu? Фильтр?
В far.Menu как раз нет возможности установить "начальный" фильтр. Эта возможность есть в Menu.Show. Но эта ограниченность обходится тем, что либо (а) ненужные строки просто не включать в items, либо (б) проставить им признак hidden=true. Это вполне бы устроило, если не нужно снимать (или менять) этот "начальный" фильтр. Будет время - попробую обновить меню через ACTL_REDRAWALL ...
John Doe wrote: Sun 20 May, 2018 07:46 Про eval я ничего не писал
Извините, теперь я криво прочитал. Хотя eval и postmacro в этом форуме всегда "ходят вместе".
По Event: там надо указывать область, на которую назначается обработчик. А в списке меню нету... Или для Event меню считается диалогом?
John Doe wrote: Sun 20 May, 2018 07:41 Что касается реализации меню средствами диалога, то это объемный вопрос, если действительно актуально, то лучше обсудить в отдельной теме.
Тут нечего обсуждать. Это я делал неоднократно, и этот вариант абсолютно универсальный. Только возиться неохота...
John Doe wrote: Sun 20 May, 2018 07:46 есть даже общее решение для автоматического включения фильтров в определенных диалогах
Хоть один пример не припомните?
Last edited by buniak_a_h on Sun 20 May, 2018 22:39, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Sun 20 May, 2018 12:16 попробую обновить меню через ACTL_REDRAWALL
Почему ACTL_REDRAWALL?
buniak_a_h wrote: Sun 20 May, 2018 12:16 По Event: там надо указывать область, на которую назначается обработчик.
DialogEvent
buniak_a_h wrote: Sun 20 May, 2018 12:16 Только возиться неохота...
В этом и преимущество штатного фильтра: какой ни есть, но он "из коробки".
Кроме того, можно поискать что-то готовое, например searchmenu.lua.
buniak_a_h wrote: Sun 20 May, 2018 12:16 Хоть один пример не припомните?
http://forum.farmanager.com/viewtopic.php?f=15&t=8463
(Писалось слишком давно, поэтому не могу рекомендовать как образец для подражания)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Sun 20 May, 2018 06:55

Code: Select all

mf.postmacro(Keys("CtrlAltF"))
far.Menu({Title="Title"},{{text="aaa"},{text="bbb"}})
а также варианты с Menu.FilterStr(1, 'a') вместо Keys
Неверное использование postmacro.
Надо так:

Code: Select all

mf.postmacro(Keys,"CtrlAltF")
Аналогично и с Menu.Filter, Menu.FilterStr
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

Честно говоря, я тут набросал скрипт через far.Dialod... Там тааакие перспективы открылись!
BreakKeys можно регэкспами задавать; Там же для конкретного BreakKey-я можно указать Action (типа OnClick или OnKeypress)
Фильтр также можно задать регэкспом. Да ещё и сделать регистрозависимым.
Интересный язык... :-)
User avatar
HaRT
Moderator
Posts: 10820
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

LuaComplete — завершение слов макроса на LUA

Post by HaRT »

Попытался воспользоваться скриптом (версия 2 от 19 мая) — сразу получил , даже в пустом файле. Выяснилось, что это происходит только при наличии выборочного максимизатора диалогов. Почему так, пока не разбирался.

Кстати, желательно в имя архива для скачивания включить номер версии (чтобы не возникало путаницы). А вот слово lua там вроде наоборот лишнее.

P.S.
Хорошо бы код скрипта прогнать через спелчекер, а то в тексте есть очевидные опечатки: ключевыз, кнопкм, присмтыковываю, началк.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by zg »

HaRT wrote: Tue 22 May, 2018 14:09Выяснилось, что это происходит только при наличии выборочного максимизатора диалогов.
это не так. любого moon макроса достаточно. спотыкается вот на таком поле:

Code: Select all

╔═ _G.package.loaded.moonscript.transform.statement.seen_nodes  (1) ══╗
║  table: 0x0502b2c8             │boolean  │true                      ║
╚══════════════════════ F1, F3, F4, Del, Ctrl+M ══════════════════════╝
ключ — таблица.
User avatar
HaRT
Moderator
Posts: 10820
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

LuaComplete — завершение слов макроса на LUA

Post by HaRT »

zg wrote: Tue 22 May, 2018 14:53 любого moon макроса достаточно
Спасибо за уточнение! Да, конфликт с искоробочным Editor.ColorWord.moon я как-то проглядел.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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