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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 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
HaRT
Moderator
Posts: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Fri 18 May, 2018 12:03

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

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

Post by buniak_a_h » Fri 18 May, 2018 13:12

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

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

Post by HaRT » Fri 18 May, 2018 13:28

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

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

Post by John Doe » Fri 18 May, 2018 18:04

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).

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

Post by buniak_a_h » Fri 18 May, 2018 22:05

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

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

Post by buniak_a_h » Fri 18 May, 2018 23:57


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

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

Post by HaRT » Sat 19 May, 2018 00:08

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

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

Post by buniak_a_h » Sat 19 May, 2018 00:21

HaRT wrote:
Sat 19 May, 2018 00:08
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
Замена - более частое использование . Как показал мой двухдневный опыт использования, вставка мне не понадобилась ни разу. Поэтому замена повешена и на [Enter], и на выбор знаком пунктуации. Ctrl+Enter - аналог "сноски имени в командную строку" в панелях ФАРа.
С РеШарпер-ом незнаком, сделал наиболее близко к IDE Delphi. Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.

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

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

Post by HaRT » Sat 19 May, 2018 01:16

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

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

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

HaRT wrote:
Sat 19 May, 2018 01:16
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
Не часто. Если исправлял только. ДО второй версии я стирал слово и вызывал LuaComplete. Теперь это стало не нужно. Поэтому-то я и повесил замену на Enter.
HaRT wrote:
Sat 19 May, 2018 01:16
Ясно, давняя психотравма, жаль
Ну, вкусы, видимо, разные. Психологически Enter - команда "выполнить введённую команду". Бывает - "Завершить ввод".
Вы совсем не работаете из командной строки? ;-) Не табуляцией же посылаете команду на выполнение...

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

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

Post by HaRT » Sat 19 May, 2018 01:49

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

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

Post by John Doe » Sat 19 May, 2018 08:01

buniak_a_h wrote:
Fri 18 May, 2018 22:05
Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
А насколько известно мне - всё же берут, из окружения, возможно не с любым уровнем вложенности (не интересовался).

Что до флагов, то я например тоже их не помню, для вставки использую Lua explorer.

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

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

Post by John Doe » Sat 19 May, 2018 10:54

John Doe wrote:
Sat 19 May, 2018 08:01
А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.

buniak_a_h
Posts: 1107
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 43 times
Contact:

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

Post by buniak_a_h » Sat 19 May, 2018 11:00

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

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

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

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

Post Reply

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