Небольшой макрос, реализующий завершение слов, заточенный под LUA. В отличие от многочисленных скриптов и плагинов Word Cmplete, предлагаемый скрипт не анализирует уже имеющиеся в тексте слова, а ищет в списке ключевых слов языка LUA1 и элементов таблицы _G (со всеми вложенностями).
Стоя в редакторе на строке, например, APanel.Cu нажимаем CtrlShiftSpace и получаем меню из двух вариантов - CurrPos и Current; Enter вставляет в строку выбранный вариант, начиная с третьего символа . А для особо ленивых на пустой строке набираете AP - CtrlShiftSpace - меню из одного варианта APanel - Enter набираем точку, Cu - CtrlShiftSpace - получаем то, что выше.
В настоящее время для получения списка ключевых слов используется скрипт LuaCheck, модуль luacheck.builtin_standards (подраздел возвращаемой таблицы max).
Версия 2
Реализована фильтрация в меню выбора слова
"Тупая" вставка выбранного слова заменена на замену текущего слова выбранным. Возможность вставки оставлена и "повешена" на сочетание CtrlEnter
Реализован выбор варианта вводом не-словного символа; при этом в текст помещается выбранное слово и введённый знак.
Версия 3
Добавлена настройка. В настроечном файле можно указать только изменённые параметры. Имя настроечного файла совпадает с именем файла со скриптом, в том же каталоге, расширение - .cfg
Добавлена возможность поиска без учёта регистра. Инициируется, если "точный" поиск не дал результата
Добавлен поиск слова (в таблицах). Поиск регистронезависимый. Инициируется при неудаче остальных либо по отдельной "горячей" кнопке (по умолчанию - AltShiftSpace). Например, Вы забыли, где определена функция GetStr - в editor или в Editor. Просто наберите getstr, нажмите AltShiftSpace - и получите Editor.GetStr
Исправлены баги, приводившие к вылетам (спасибо John Doe и HaRT)
Версия 4
1. Немного оптимизировано построение списка
2. Реализована интеграция со скриптом Active-Help. Выглядит это так: если прямо в списке полей таблицы нажать Ctrl+F1, то будет открыта соответствующая статья chm-файла из комплекта поставки FAR-а
zg wrote: ↑Tue 22 May, 2018 14:53
любого moon макроса достаточно
Извините, не писал на moon и не пробовал, расширение попало случайно.
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 18:22
by HaRT
buniak_a_h wrote: ↑Tue 22 May, 2018 18:20
расширение попало случайно
При чём тут это? Вылезает-то ошибка в обычных файлах .lua.
В .moon-файлах скрипт будет несомненно полезен, поскольку luacheck их поддерживает и символы там те же (возможно, кроме некоторых ключевых слов, но это мелочи).
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 18:43
by John Doe
@buniak_a_h
Вам же указали в чём проблема: в Lua ключом таблицы может быть что угодно, и ваш скрипт этого не учитывает.
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 18:55
by buniak_a_h
HaRT wrote: ↑Tue 22 May, 2018 18:22
При чём тут это? Вылезает-то ошибка в обычных файлах .lua.
Я поместил упомянутый ColorWord.moon в подкаталог %FARPROFILE%\Macros\scripts\Bax.Test. На пустой строке вызываю этот скрипт. Работает. ЧЯДНТ?
John Doe wrote: ↑Tue 22 May, 2018 18:43
в Lua ключом таблицы может быть что угодно, и ваш скрипт этого не учитывает
Да, я не знал. Думал, индекс - либо "регулярный" (порядковый номер), либо строка.
Ладно, всё равно переделываю... Поиск по _G.
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 19:32
by zg
buniak_a_h wrote: ↑Tue 22 May, 2018 18:55Я поместил упомянутый ColorWord.moon в подкаталог %FARPROFILE%\Macros\scripts\Bax.Test. На пустой строке вызываю этот скрипт. Работает. ЧЯДНТ?
макросы не перегрузили?не влияет он, надо что-то посложнее.
или вот такой код в комстроке: lua:_G.test={[{}]='aaa'}
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 19:37
by buniak_a_h
zg wrote: ↑Tue 22 May, 2018 19:32
макросы не перегрузили?
Перегрузил, есессно. И проверил - одинаковые слова по F5 раскрашиваются
LuaComplete — завершение слов макроса на LUA
Posted: Tue 22 May, 2018 20:01
by HaRT
zg wrote: ↑Tue 22 May, 2018 19:32макросы не перегрузили?
А вот я как раз тогда между проверками только перегружал макросы, т.ч., вероятно, получил наведённый эффект.
LuaComplete — завершение слов макроса на LUA
Posted: Thu 24 May, 2018 18:56
by buniak_a_h
Выложена третья версия.
1. Исправлен баг
HaRT wrote: ↑Tue 22 May, 2018 14:09
Попытался воспользоваться скриптом (версия 2 от 19 мая) — сразу получил ошибку
2. При неудаче поиска предлагается регистронезависимый поиск (для склеротиков типа меня)
3. При неудаче и такого поиска (а также по отдельной кнопке) предлагается поиск одного слова (для совсем уж таких, как я). Мне это было, например, полезно при поиске элементов в "похожих" таблицах типа APanel, Panel и panel.
HaRT wrote: ↑Sat 19 May, 2018 01:16
Надеюсь, в коде скрипта легко подправить кнопки под себя.
4. Сделана настройка кнопок. Без интерфейса - редактированием настроечного файла. Пример файла - в архиве
LuaComplete — завершение слов макроса на LUA
Posted: Sat 01 Aug, 2020 16:34
by citRiks
Добрались руки посмотреть этот замечательный скрипт
Мне концептуально он нравится больше чем MacroComplete,
например тем что понимает что стоим на таблице и дает ее элементы.
Понаслаждался подсказками флагов и прочих фаровских обьектов типа Panel, Menu итд.
А проблема единственная в том что очень медленный, подсказок надо ждать по минуте
Интересно почему так медленно, и может вылечите?
LuaComplete — завершение слов макроса на LUA
Posted: Sat 01 Aug, 2020 17:37
by buniak_a_h
citRiks wrote: ↑Sat 01 Aug, 2020 16:34
очень медленный, подсказок надо ждать по минуте
У меня показывается сразу. Если я правильно понял, о чем речь."Подсказка"это список полей таблицы или описание функциии?
LuaComplete — завершение слов макроса на LUA
Posted: Sat 01 Aug, 2020 19:21
by buniak_a_h
citRiks!
1. Действительно очень сильно устаревший скрипт. Правда, изменения не должны влиять на скорость.
2. Скрипт писался, когда я ещё не знал про операцию next. Ну и порочная идея: Составляю полный список (это же только один раз!), и затем ищу в нём. Я давно собирался переделать, просто не видел смысла, т.к. не видел интереса к скрипту (с 18-го года ни одного сообщения в теме).
3. У меня сделано взаимодействие со скриптом Active-Help; выглядит это так: по Ctrl-F1 на элементе таблицы выводится соответствующая тема из chm-файлов папки %FARHOME%\Encyclopedia (из комплекта поставки). При правильной настройке Active-Help очень удобно!
citRiks wrote: ↑Sat 01 Aug, 2020 16:34
очень медленный, подсказок надо ждать по минуте
У меня показывается сразу. Если я правильно понял, о чем речь.
Хммм, у меня вот совсем-совсем не сразу.
Пробовал все хоткеи, все тормозят от полминуты до минуты.
Комп не самый сильный конечно, но ничем другим не загружен,
поэтому думаю быть причиной тормозов именно в этом не должен Intel Core i5-2410M CPU @ 2.30GHz, 2301 Mhz, 2 Cores, 4 Logical Processors, 12GB RAM, SSD disks
"Подсказка"это список полей таблицы или описание функциии?
наверное список полей таблицы, флагов например, но и на меньших обьектах (Panel, Menu, etc) - то же самое.
image.png (4.96 KiB) Viewed 1165 times
Это я написал Panel.<CtrlShiftSpace>, например, скрипт думал полминуты
LuaComplete — завершение слов макроса на LUA
Posted: Sat 01 Aug, 2020 21:35
by buniak_a_h
Думаю, проблема та же, из-за которой у Вас не работает панельный модуль просмотра таблиц. Возможно, какой-то скрипт/плагин пишет очень много в _G (причём, на большую глубину). В результате этот скрипт тормозит, а TablePanel так долго анализирует, что просто не работает.
У меня есть ещё TableBrowser.lua (если интересует, выложу в личку. Аналог tableview.lua, но (а) с возможностью выполнения функций; (б) с фильтрацией и (в) ассоциирован всё с тем же Active-Help; но без удаления. Я им пользуюсь очень часто)
LuaComplete — завершение слов макроса на LUA
Posted: Wed 05 Aug, 2020 09:55
by buniak_a_h
citRiks wrote: ↑Sat 01 Aug, 2020 16:34
А проблема единственная в том что очень медленный, подсказок надо ждать по минуте
Я на всякий случай выложил мою версию скрипта. Там из анализа исключается какая-то здоровенная таблица типа package.loaded. Попробуйте. Хотя для меня это уже пройденный этап. Сейчас мой (неоконченный) скрипт понимает не только глобальные таблицы, но и локальные (кроме require)!. Чувствую, следующий шаг - список локальных переменных (и upvalue). И тогда это будет напоминать «взрослую» среду разработки