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 85 times
Last edited by buniak_a_h on Wed 05 Aug, 2020 09:12, edited 5 times in total.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Скрипт пока не пробовал, но уже по описанию есть ряд соображений по клавиатурному управлению:
1. Вопрос: из каких соображений выбрано CtrlShiftSpace, а не, скажем, CtrlSpace? Ведь это на одно нажатие короче.
2. Предложение: предоставить возможность избежать нажатия Enter в списке вариантов. А именно, если выбран вариант дополнения и нажимается любой печатный символ (хоть буква, хоть точка, хоть пробел, и т.п.), вставлять этот вариант, а следом за ним этот символ.
3. Предложение (по мотивам использования ReSharper'а): при вызове дополнения в середине слова предоставить варианты вставить дополнение (Enter) или же заместить до конца слова (Tab). Пример: имеем APanel.Currpos, каретка на p, вызываем дополнение, получаем два варианта, стрелками выбираем CurrPos. Теперь если нажать Enter («вставить»), то получим APanel.CurrPospos (и каретка на p, т.е. после дополненного), а если нажать Tab («заменить»), получим APanel.CurrPos (и каретка в конце, т.е. тоже после дополненного). Практика показывает, что это удобно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

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. Ну, почти: не будет (естественно) автоматического доступа к полям локальных таблиц и проверки типа (тоже естественно).
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Fri 18 May, 2018 13:12 точка, пробел, ";" и знаки операций
Тогда ещё и кавычки, скобки и т.п.
buniak_a_h wrote: Fri 18 May, 2018 13:12 Если кто-нить скачает - буду добавлять...
Когда соберусь что-нибудь ещё скриптовать в Фаре, непременно скачаю.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Luacheck FAR scripts — статический анализатор для Lua/MoonScript

Post 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).
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Luacheck FAR scripts — статический анализатор для Lua/MoonScript

Post by buniak_a_h »

John Doe wrote: Fri 18 May, 2018 18:04 Возможно это функциональность в альтернативных скриптах отключаема.
Дело не в том, отключаема это возможность в тех, что я знаю. Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
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 »

User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Fri 18 May, 2018 11:30 Возможность вставки оставлена и "повешена" на сочетание CtrlEnter
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

HaRT wrote: Sat 19 May, 2018 00:08 Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
Замена - более частое использование . Как показал мой двухдневный опыт использования, вставка мне не понадобилась ни разу. Поэтому замена повешена и на [Enter], и на выбор знаком пунктуации. Ctrl+Enter - аналог "сноски имени в командную строку" в панелях ФАРа.
С РеШарпер-ом незнаком, сделал наиболее близко к IDE Delphi. Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Sat 19 May, 2018 00:21 вставка мне не понадобилась ни разу
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
buniak_a_h wrote: Sat 19 May, 2018 00:21 Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.
Ясно, давняя психотравма, жаль. Надеюсь, в коде скрипта легко подправить кнопки под себя.
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

HaRT wrote: Sat 19 May, 2018 01:16 А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
Не часто. Если исправлял только. ДО второй версии я стирал слово и вызывал LuaComplete. Теперь это стало не нужно. Поэтому-то я и повесил замену на Enter.
HaRT wrote: Sat 19 May, 2018 01:16 Ясно, давняя психотравма, жаль
Ну, вкусы, видимо, разные. Психологически Enter - команда "выполнить введённую команду". Бывает - "Завершить ввод".
Вы совсем не работаете из командной строки? ;-) Не табуляцией же посылаете команду на выполнение...
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Sat 19 May, 2018 01:37 Вы совсем не работаете из командной строки? Не табуляцией же посылаете команду на выполнение...
Я много работаю из командной строки (bash). И именно табуляцией я вызываю дополнение. 8)
А при написании кода табуляция удобна тем, что даже если правая рука на мышке, левой всё равно можно нажать Tab.
Last edited by HaRT on Sat 19 May, 2018 01:51, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 22:05 Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
А насколько известно мне - всё же берут, из окружения, возможно не с любым уровнем вложенности (не интересовался).

Что до флагов, то я например тоже их не помню, для вставки использую Lua explorer.
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 »

John Doe wrote: Sat 19 May, 2018 08:01 А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.
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 10:54
John Doe wrote: Sat 19 May, 2018 08:01 А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.
Да, действительно, Word Complete у меня был, а Editor_MacroComplete не ставил...
Ну, значит я изобретал ещё один велосипед...
Спасибо.
Post Reply

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