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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Fri 18 May, 2018 11:30

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

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

LuaComplete.v3.7z
Версия 3 от 24.05.18
(4.35 KiB) Downloaded 71 times
Last edited by buniak_a_h on Thu 24 May, 2018 18:58, edited 4 times in total.

User avatar
John Doe
Бюрократ
Posts: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Sat 19 May, 2018 15:00

Latest post of the previous page:

buniak_a_h wrote:
Fri 18 May, 2018 11:30
Реализована фильтрация в меню выбора слова
А почему бы просто не включать штатный режим фильтрации?

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Sat 19 May, 2018 18:37

John Doe wrote:
Sat 19 May, 2018 15:00
А почему бы просто не включать штатный режим фильтрации?
Да там и так используется Menu.FilterString. Мне не нравится, что при включении фильтра Title затирается и заменяется на [...]. Я бы восстанавливал по far.Text, но для этого надо знать координаты и ширину меню. Если координаты я могу хотя бы задать, то как определить ширину - я не нашёл. Поэтому блокирую фильтр и обрабатываю нажатия клавиш.
Впрочем, всё это уже не имеет значения. FimSU сделал красивее. Один минус (у себя переделаю): по клавишам знаков пунктуации вместо фильтра сделаю выход с добавлением нажатой кнопки.

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Sat 19 May, 2018 22:29

John Doe wrote:
Sat 19 May, 2018 15:00
А почему бы просто не включать штатный режим фильтрации?
Есть ещё одна вещь, мне не понятная:
Я не нашёл, как включить фильтр сразу при вызове far.Menu, и не нашёл, как сделать выход из Menu.Show по клавишам аналогично BreakKeys ...

User avatar
John Doe
Бюрократ
Posts: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Sun 20 May, 2018 05:56

1. Через postmacro, или Event.
2. far.Menu предоставляет больше возможностей управления, а far.Show проще в использовании, вот и выбирайте по своим потребностям.
Внутри far.Show реализована через far.Menu, и с этим всё понятно.

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » 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 (видимо, послать 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. В остальном он полностью покрывает мои потребности. Видимо, эту тему надо закрыть за ненадобностью...

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » 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"}})
Не работает также такое:

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: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Sun 20 May, 2018 07:41

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: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Sun 20 May, 2018 07:46

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 я ничего не писал.

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

Ваш код сейчас протестировать не могу.

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Sun 20 May, 2018 12:16

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: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Mon 21 May, 2018 07:42

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: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Mon 21 May, 2018 07:53

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

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Mon 21 May, 2018 11:01

Честно говоря, я тут набросал скрипт через far.Dialod... Там тааакие перспективы открылись!
BreakKeys можно регэкспами задавать; Там же для конкретного BreakKey-я можно указать Action (типа OnClick или OnKeypress)
Фильтр также можно задать регэкспом. Да ещё и сделать регистрозависимым.
Интересный язык... :-)

User avatar
HaRT
Moderator
Posts: 9111
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 165 times

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

Post by HaRT » Tue 22 May, 2018 14:09

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

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

P.S.
Хорошо бы код скрипта прогнать через спелчекер, а то в тексте есть очевидные опечатки: ключевыз, кнопкм, присмтыковываю, началк.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5630
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 106 times
Contact:

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

Post by zg » Tue 22 May, 2018 14:53

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: 9111
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 165 times

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

Post by HaRT » Tue 22 May, 2018 15:10

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

User avatar
John Doe
Бюрократ
Posts: 12464
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

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

Post by John Doe » Tue 22 May, 2018 15:21

HaRT wrote:
Tue 22 May, 2018 15:10
конфликт
Не конфликт, а просто баг.

buniak_a_h
Posts: 1143
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 83 times
Been thanked: 49 times
Contact:

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

Post by buniak_a_h » Tue 22 May, 2018 18:20

zg wrote:
Tue 22 May, 2018 14:53
любого moon макроса достаточно
Извините, не писал на moon и не пробовал, расширение попало случайно.

Post Reply

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