Данный скрипт сделан в помощь разработчикам скриптов со слабой памятью (ну или слишком ленивых, чтоб запоминать). Тема отделена от другой аналогичной в связи с коренной переработкой интерфейса.
Скрипт ищет слева от курсора имена полей таблицы, все флаги far.Flags, ключевые слова языка и доступные переменные. Всё найденное выводится в виде списков на 4 вкладках.
Например:
В тексте набрано APanel.C↑urPos (стрелкой указано место курсора). При вызове скрипта выведется список полей таблицы APanel, начинающихся с "C":
┌──────────── Поля таблицы APanel ─────────────┐
│n ColumnCount │
│n CurPos │
│s Current │
│ │
Остальные поля таблицы скрыты, но их можно "проявить" (Ctrl+H).
На первой вкладке выводится список полей таблицы (если удалось её распознать).
На второй — список флагов (содержимое таблиц far.Flags, far.Colors и far.Guids).
На третьей — список ключевых слов языка (Lua или Moon).
На четвёртой — имена доступных локальных переменных.
Изначально скрипт пытается определить слово и позиционироваться на нём (в примере выше будет открыта первая вкладка, и указатель установится на второй строке — CurPos).
Имена локальных переменных изначально отсортированы в алфавитном порядке; в дальнейшем их можно пересортировать в порядке появления объявления. На вкладке с переменными под списком указан номер строки, в которой найдено объявление этой переменной, и выводится строка (см. скриншот ниже).
Листание страниц: Ctrl+Tab / Ctrl+Shift+Tab или Ctrl+PgDn / Ctrl+PgUp или Ctrl→ / Ctrl← (стрелки).
Показать / спрятать слова, не соответствующие началу слова: Ctrl+H. При показе такие слова буду выведены серым, но они доступны для выбора.
Установка фильтра: просто начните набирать.
Выбор слова:
Enter — с заменой того, на котором стоит курсор;
Ctrl+Enter — вставка с позиции курсора;
Символы пунктуации, пробел — как Enter, но к слову приписывается нажатый символ; При этом если символ - открывающая скобка, то сразу приписывается и закрывающая, и курсор позиционируется между скобками.
18.08.2020 v. 1.1.1 - стартовая версия 20.08.2020 v. 1.1.2:
Улучшено первичное позиционирование (включая стартовую страницу)
Изменён внешний вид соответственно пожеланиям HaRT:
(а) будет гармоничнее, если внутренняя рамка будет одинарная
(б) Хорошо бы значками показывать тип полей
Добавлены кнопкосочетания для листания (там же):
«Желательно также CtrlPgDn/CtrlPgUp — как при редактировании свойств соединения у плагина NetBox»
В скрипт заложены три варианта хоткеев: Ctrl+Tab / Ctrl+Shift+Tab; Ctrl+PgDn / Ctrl+PgUp; Ctrl→ / Ctrl← .
Реализована интеграция со скриптом Active-Help (viewtopic.php?p=145176)
Это позволяет получать интерактивную подсказку о выбранном пункте списка. Клавиша Ctrl+F1 22.08.2020 v. 1.1.3 - Сделана попытка "подружить" скрипт с языком MoonScript 23.08.2020 v. 1.1.4
Исправлена ошибка в поиске доступных переменных, проявлявшаяся в случае, если ключевые
слова (if, function и т.п.) присутствуют в строковом литерале
Расширены возможности поиска доступных переменных. Теперь в список включаются
имена доступных функций и аргументов (в т.ч. и записанных в нескольких
последовательных строках) 25.08.2020 v. 1.1.5
На вкладке с именами доступных переменных теперь выводится номер строки, в которой
встречается описание переменной, и сама строка (сколько поместится)
Добавлена возможность сортировки имён переменных как по алфавиту, так и по расположению
объявления переменной в исходном тексте
В списке флагов теперь представлены также таблицы far.Colors и far.Guids 25.08.2020 v. 1.1.6
Изменена логика принятия значения по предложению HaRT-а: viewtopic.php?p=161951&sid=ec66ce963511 ... 7a#p161951
Теперь любой символ, который не может быть в идентификаторе (цифры, буквы, подчёрк) вызывает
выход из скрипта; возвращается выбранное слово плюс введённый символ. При этом к "парным"
символам (открывающим скобкам) дописывается закрывающая. 28.08.2020 v. 1.1.7
Реализована визуализация фильтра списков 01.09.2020 v. 1.1.8
Если ВСЕ строки скрыты (отфильтрованы по соответствию началу слова), то они
изначально показываются серыми.
Исправлена потенциальная ошибка (пока не проявлялся). Ошибка заключалась в том,
что страница создавалась только при наличии хотя бы одной строки в списке,
а анализ того, какая страница открыта (например, при выборе слова по Enter),
происходил в абсолютных номерах
Для списка доступных переменных реализован переход на строку, в которой
переменная была объявлена (горячая клавиша Alt+G).
Т.к. у меня стало особенно актуальным сразу открывать список доступных переменных,
для этого случая добавлен хоткей: CtrlAlt/ .
Исправлена ошибка поиска доступных переменных в случае, когда курсор стоит
внутри списка параметров функции.
Рефакторинг 02.09.2020 v. 1.1.9
Для moon-файлов в список переменных теперь входят аргументы функции (если они
записаны в одну строчку) 16.09.2020 v. 1.1.10
Исправлена ошибка чтения списка ключевых слов для moonscript-а
Несколько мелких ошибок в модулях 01.07.2022 v. 1.1.11
Предусмотрена обработка отсутствия проперти, указанной в качестве таблицы. Раньше такая ситуация приводила к вылету.
Пример: Dlg.Info.↕ (символом ↕ отмечено место вызова макроса)
buniak_a_h wrote: ↑Thu 06 Aug, 2020 20:14 - (, . (точка) — как Enter, но к слову приписывается скобка или точка;
Предлагаю, чтобы так происходило при вводе любого пробельного или пунктуационного символа — это позволит не нажимать Enter в подавляющем большинстве случаев.
buniak_a_h wrote: ↑Thu 06 Aug, 2020 20:14Если выбранное поле — имя функции, а выбор произведён не с точкой / скобкой, то после имени функции дописываются скобки (), и курсор позиционируется между ними.
А вот это сомнительная функциональность. Функции в Луа являются «объектами первого класса», и их нередко надо передавать в качестве параметра, не вызывая. А тут получается, что при дополнении имени ф-ии сразу подставляется вызов. Предлагаю, чтобы вторая скобка дописывалась как раз только при выборе посредством первой.
buniak_a_h wrote: ↑Thu 06 Aug, 2020 20:14 - (, . (точка) — как Enter, но к слову приписывается скобка или точка;
Предлагаю, чтобы так происходило при вводе любого пробельного или пунктуационного символа — это позволит не нажимать Enter в подавляющем большинстве случаев.
Насчёт "подавляющего большинства" - мне этих двух хватило. Но замечание принимается, т.к. фильтрация имеет смысл только для идентификаторов. Т.е. для [%w_]. Ок, сделаю.
buniak_a_h wrote: ↑Thu 06 Aug, 2020 20:14Если выбранное поле — имя функции, а выбор произведён не с точкой / скобкой, то после имени функции дописываются скобки (), и курсор позиционируется между ними.
А вот это сомнительная функциональность. Функции в Луа являются «объектами первого класса», и их нередко надо передавать в качестве параметра, не вызывая. А тут получается, что при дополнении имени ф-ии сразу подставляется вызов. Предлагаю, чтобы вторая скобка дописывалась как раз только при выборе посредством первой.
Да, я уже наткнулся на это неудобство. Исправлю, не вопрос.
Спасибо. И аналогично, если дополнение вызвано по открывающей квадратной или фигурной скобке, предлагаю вставлять закрывающую и ставить каретку на неё.
Вышла версия 1.1.8. Что нового:
1. Если ВСЕ строки скрыты (отфильтрованы по соответствию началу слова), то они
изначально показываются серыми.
2. Исправлена потенциальная ошибка (пока не проявлялся). Ошибка заключалась в том,
что страница создавалась только при наличии хотя бы одной строки в списке,
а анализ того, какая страница открыта (например, при выборе слова по Enter),
происходил в абсолютных номерах
3. Для списка доступных переменных реализован переход на строку, в которой
переменная была объявлена (горячая клавиша Alt+G).
4. Т.к. у меня стало особенно актуальным сразу открывать список доступных переменных,
для этого случая добавлен хоткей: CtrlAlt/ .
5. Исправлена ошибка поиска доступных переменных в случае, когда курсор стоит
внутри списка параметров функции.
6. Рефакторинг
Last edited by buniak_a_h on Tue 01 Sep, 2020 00:04, edited 2 times in total.
HaRT wrote: ↑Wed 19 Aug, 2020 20:06
И ещё вопрос: будет ли скрипт работать в .moon-файлах? Если пока нет, то примите пожелание, чтобы научился.
1. В некоторой степени уже умеет
2. Сейчас доделаю включение в список переменных формальных параметров процедуры (пока- случай, когда они все помещаются в одну строку). Это будет версия 1.1.9
3. Хотелось бы какой-нить навороченный moon-скрипт. А то у меня их вообще только 3, и самый сложный - hexed.moon. Если есть и если есть время - (а) пришлите, пож.; (б) попробуйте. Особо - список видимых переменных.
Для moonописцев:
Вышла версия 1.1.9.
Для moon-файлов в список переменных теперь входят аргументы функции (если они записаны в одну строчку)
Если есть среди читателей moonописцы, к Вам просьба прислать (можно бы в личку) сложный (разнообразный по форме записи) скрипт на moonscript-е
Под «разнообразным» я понимаю различные варианты записи операторов (например, со словом local и без, объявление нескольких переменных в одном присваивании/операторе local; список аргументов в одну/несколько строк и т.п.).
HaRT, спасибо. Короткое тестирование на этом файле очень неплохо показалось. На удивление. Даже параметр с дефолтным значением (mms=false,spaces=true) скрипт обработал правильно, хотя я про такое не знал и не предусматривал …
Вышла версия 1.1.10. Кроме самого скрипта исправлены мелкие и глупые ошибки в приложенных модулях.
────────────────────────────────────────────────
1. Исправлена ошибка чтения списка ключевых слов для moonscript-а
2. Несколько мелких ошибок в приложенных модулях