Небольшой макрос, реализующий завершение слов, заточенный под 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-а
Скрипт пока не пробовал, но уже по описанию есть ряд соображений по клавиатурному управлению: 1.Вопрос: из каких соображений выбрано CtrlShiftSpace, а не, скажем, CtrlSpace? Ведь это на одно нажатие короче. 2.Предложение: предоставить возможность избежать нажатия Enter в списке вариантов. А именно, если выбран вариант дополнения и нажимается любой печатный символ (хоть буква, хоть точка, хоть пробел, и т.п.), вставлять этот вариант, а следом за ним этот символ. 3.Предложение (по мотивам использования ReSharper'а): при вызове дополнения в середине слова предоставить варианты вставить дополнение (Enter) или же заместить до конца слова (Tab). Пример: имеем APanel.Currpos, каретка на p, вызываем дополнение, получаем два варианта, стрелками выбираем CurrPos. Теперь если нажать Enter («вставить»), то получим APanel.CurrPospos (и каретка на p, т.е. после дополненного), а если нажать Tab («заменить»), получим APanel.CurrPos (и каретка в конце, т.е. тоже после дополненного). Практика показывает, что это удобно.
LuaComplete - завершение слов макроса на LUA
Posted: Fri 18 May, 2018 13:12
by buniak_a_h
HaRT wrote: ↑Fri 18 May, 2018 12:03
1. Вопрос: из каких соображений выбрано CtrlShiftSpace, а не, скажем, CtrlSpace? Ведь это на одно нажатие короче.
У меня CtrlSpace занят для вызова плагина WordComplete. Исторически сделан клавиатурный макрос; если повесить на одну клавишу и выбирать из меню, но так - будет ещё дольше. В принципе, исходник есть, там всё указано явно - без настроек и локализаций; легко назначить свой.
HaRT wrote: ↑Fri 18 May, 2018 12:03
2. Предложение: предоставить возможность избежать нажатия Enter в списке вариантов. А именно, если выбран вариант дополнения и нажимается любой печатный символ (хоть буква, хоть точка, хоть пробел, и т.п.), вставлять этот вариант, а следом за ним этот символ.
Если кто-нить скачает и будет пользоваться - буду развивать. Буква-цифра - нет, не так, как Вы указали. Это будет фильтр. А точка, пробел, ";" и знаки операций - да, можно будет выбранный элемент вставлять, и после него - нажатый символ.
HaRT wrote: ↑Fri 18 May, 2018 12:03
3. Предложение: при вызове дополнения в середине слова предоставить варианты вставить дополнение (Enter) или же заместить до конца слова (Tab). Пример: имеем APanel.Currpos, каретка на p, вызываем дополнение, получаем два варианта, стрелками выбираем CurrPos. Теперь если нажать Enter («вставить»), то получим APanel.CurrPospos (и каретка на p, т.е. после дополненного), а если нажать Tab («заменить»), получим APanel.CurrPos (и каретка в конце, т.е. тоже после дополненного). Практика показывает, что это удобно.
Это я уже так думал. Ещё к этому же: если курсор в середине слова, то для первого позиционирования использовать и остаток слова. В Вашем примере при открытии автоматически указатель меню будет позиционирован на CurrPos Просто пока я делал это для себя (для режима ввода уода; тогда курсор в середине слова бывает редко...). Если кто-нить скачает - буду добавлять... В моих планах:
Следующая идея (если смогу договориться с John Doe о предоставлении интерфейса по проверке слова) - список переменных, доступных в контексте. Вот тогда - действительно будет Code completion. Ну, почти: не будет (естественно) автоматического доступа к полям локальных таблиц и проверки типа (тоже естественно).
LuaComplete - завершение слов макроса на LUA
Posted: Fri 18 May, 2018 13:28
by HaRT
buniak_a_h wrote: ↑Fri 18 May, 2018 13:12
точка, пробел, ";" и знаки операций
Тогда ещё и кавычки, скобки и т.п.
buniak_a_h wrote: ↑Fri 18 May, 2018 13:12
Если кто-нить скачает - буду добавлять...
Когда соберусь что-нибудь ещё скриптовать в Фаре, непременно скачаю.
Luacheck FAR scripts — статический анализатор для Lua/MoonScript
Posted: Fri 18 May, 2018 18:04
by John Doe
buniak_a_h wrote: ↑Fri 18 May, 2018 11:16
В отличие от плагина WordComlete и указанного Вами макроса, мой не использует те слова, которые уже имеются в тексте
Возможно это функциональность в альтернативных скриптах отключаема.
buniak_a_h wrote: ↑Fri 18 May, 2018 11:16
Дело за определением доступности имён переменных в конкретном контексте. Ваша LuaCheck это умеет делать совершенно точно (диагностирует же обращение к неопределённой переменной!).
Luacheck не мой, но да, было бы неплохо, и в принципе возможно использовать его lexer + parser + linearize (как пример автор рекомендовал depgraph.scan).
Luacheck FAR scripts — статический анализатор для Lua/MoonScript
Posted: Fri 18 May, 2018 22:05
by buniak_a_h
John Doe wrote: ↑Fri 18 May, 2018 18:04
Возможно это функциональность в альтернативных скриптах отключаема.
Дело не в том, отключаема это возможность в тех, что я знаю. Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
buniak_a_h wrote: ↑Fri 18 May, 2018 11:30
Возможность вставки оставлена и "повешена" на сочетание CtrlEnter
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
LuaComplete - завершение слов макроса на LUA
Posted: Sat 19 May, 2018 00:21
by buniak_a_h
HaRT wrote: ↑Sat 19 May, 2018 00:08
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
Замена - более частое использование . Как показал мой двухдневный опыт использования, вставка мне не понадобилась ни разу. Поэтому замена повешена и на [Enter], и на выбор знаком пунктуации. Ctrl+Enter - аналог "сноски имени в командную строку" в панелях ФАРа.
С РеШарпер-ом незнаком, сделал наиболее близко к IDE Delphi. Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.
Кстати, наши клиенты, есессно, давно перешли на винду, мы попытались приучить из к стандартам типа Tab, Alt+F4 - не получилось. Хотят переходы между полями по Enter, закрытие по Esc. А клиенты - это вся таможня РФ и участники ВЭД. Очень много...
LuaComplete - завершение слов макроса на LUA
Posted: Sat 19 May, 2018 01:16
by HaRT
buniak_a_h wrote: ↑Sat 19 May, 2018 00:21
вставка мне не понадобилась ни разу
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
buniak_a_h wrote: ↑Sat 19 May, 2018 00:21
Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.
Ясно, давняя психотравма, жаль. Надеюсь, в коде скрипта легко подправить кнопки под себя.
LuaComplete — завершение слов макроса на LUA
Posted: Sat 19 May, 2018 01:37
by buniak_a_h
HaRT wrote: ↑Sat 19 May, 2018 01:16
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
Не часто. Если исправлял только. ДО второй версии я стирал слово и вызывал LuaComplete. Теперь это стало не нужно. Поэтому-то я и повесил замену на Enter.
Ну, вкусы, видимо, разные. Психологически Enter - команда "выполнить введённую команду". Бывает - "Завершить ввод".
Вы совсем не работаете из командной строки? Не табуляцией же посылаете команду на выполнение...
LuaComplete — завершение слов макроса на LUA
Posted: Sat 19 May, 2018 01:49
by HaRT
buniak_a_h wrote: ↑Sat 19 May, 2018 01:37
Вы совсем не работаете из командной строки? Не табуляцией же посылаете команду на выполнение...
Я много работаю из командной строки (bash). И именно табуляцией я вызываю дополнение.
А при написании кода табуляция удобна тем, что даже если правая рука на мышке, левой всё равно можно нажать Tab.
LuaComplete — завершение слов макроса на LUA
Posted: Sat 19 May, 2018 08:01
by John Doe
buniak_a_h wrote: ↑Fri 18 May, 2018 22:05
Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
А насколько известно мне - всё же берут, из окружения, возможно не с любым уровнем вложенности (не интересовался).
Что до флагов, то я например тоже их не помню, для вставки использую Lua explorer.
LuaComplete — завершение слов макроса на LUA
Posted: Sat 19 May, 2018 10:54
by John Doe
John Doe wrote: ↑Sat 19 May, 2018 08:01
А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.