Иногда, при чтении кода, бывает нужно заглянуть в функцию или процедуру, чтобы понять, что там выполняется, но при этом приходится перепрыгивать в другое место модуля и терять фокус с текущей строки. Данный скрипт показывает текст функции под курсором в виде всплывающей подсказки. Лучше всего подходит для чтения небольших функций или процедур.
Нажимаем Control+Shift+H
//@script_name ShowFunctionText
//@script_display_name Просмотр текста функции
//@script_description Показывает текст функции в виде всплывающей подсказки, чтобы не прыгать по тексту модуля и не терять фокус при чтении кода
//@script_author alonehobo
//@script_developer_url https://turboconf.ru
//@script_hotkey Control+Shift+H
//@retain_clipboard 1
//@enterprise_mode 1
//@hide_actions 1
//@turbomenu 0
//@turbobutton 0
Перем ТурбоКонф;
Перем ИмяФункции;
Перем ИсхКолонка;
Перем ИсхСтрока;
ТурбоКонф = Новый ТурбоКонф;
Поз = 0;
Текст = ТурбоКонф.ПолучитьТекстСПозицией(ИмяФункции, Поз, ИсхКолонка, ИсхСтрока);
ТурбоКонф.КонтролКлавиша(Keys.Left);
ТурбоКонф.КонтролШифтКлавиша(Keys.Right);
Текст = ТурбоКонф.ПолучитьТекстМодуля(ИмяФункции, Поз);
РегВыражение = Новый РегулярноеВыражение("(?:(?:(?:Процедура|Функция)\s" + Имяфункции + "\(.*\).*\n)((.*\n)*?)(?:КонецПроцедуры|КонецФункции))");
РегВыражение.ИгнорироватьРегистр = Истина;
РегВыражение.Многострочный = Истина;
СписокСовпадений = РегВыражение.НайтиСовпадения(Текст);
Если СписокСовпадений.Количество() = 0 Тогда
ТурбоКонф.ПоказатьПодсказку("Не удалось получить текст функции");
Иначе
Для Каждого ТекСовпадение Из СписокСовпадений Цикл
Если ТекСовпадение.Группы.Количество() > 0 Тогда
ТурбоКонф.ПоказатьПодсказку(СокрЛП(ТекСовпадение.Группы[0].Значение));
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
ТурбоКонф.ПерейтиВПозицию(ИсхКолонка, ИсхСтрока)
Будет работать и для методов, расположенных в других модулях
0
Сергей #3, 11 января 2019 13:22
Издеваетесь? Я весь мозг сломал с написанием регулярного выражения, а Вы... Так не делается....)))
0
bolsun #4, 11 января 2019 13:28
Тяжело в учении... (с) 😃
0
Сергей #5, 11 января 2019 14:09
Почему-то ваш метод не работает. Показывает последнее содержимое буфера и все. Если смотреть функцию другого модуля, то его окно открывается в фоне, т.е. все действия вроде бы выполняются, но показывает то, что было в буфере до вызова скрипта.
0
bolsun #6, 11 января 2019 14:10
Нужно будет еще после F12 проверить, что не появилось окно "Объект перехода"
Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
//Переход занимает какое-то время
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;
0
bolsun #7, 11 января 2019 14:10
Указатель = можно убрать
0
bolsun #8, 11 января 2019 14:18
Нужно добавить задержку после копирования в буфер
Можно так попробовать, у меня вроде работает
//@script_name ShowFunctionText
//@script_display_name Просмотр текста функции
//@script_description Показывает текст функции в виде всплывающей подсказки, чтобы не прыгать по тексту модуля и не терять фокус при чтении кода
//@script_author alonehobo
//@script_developer_url https://turboconf.ru
//@script_hotkey Control+Shift+H
//@retain_clipboard 1
//@enterprise_mode 1
//@hide_actions 1
//@turbomenu 0
//@turbobutton 0
ТурбоКонф = Новый ТурбоКонф;
ТурбоКонф.Клавиша(Keys.F12);
Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;
#1, 11 января 2019 12:58
Класс! 😃 попробую
#2, 11 января 2019 13:09
Предлагаю улучшения ))
Получение текста функции можно попробовать сделать по другому.
ТурбоКонф.Клавиша(Keys.F12);
ТурбоКонф.ControlShiftKey(Keys.OemCloseBrackets);
ТурбоКонф.Копировать();
ТурбоКонф.ControlKey(Keys.OemMinus);
ТурбоКонф.ControlKey(Keys.OemMinus);
ТурбоКонф.ПоказатьПодсказку(ТурбоКонф.ПолучитьБуферОбмена());
Будет работать и для методов, расположенных в других модулях
#3, 11 января 2019 13:22
Издеваетесь? Я весь мозг сломал с написанием регулярного выражения, а Вы... Так не делается....)))
#4, 11 января 2019 13:28
Тяжело в учении... (с) 😃
#5, 11 января 2019 14:09
Почему-то ваш метод не работает. Показывает последнее содержимое буфера и все. Если смотреть функцию другого модуля, то его окно открывается в фоне, т.е. все действия вроде бы выполняются, но показывает то, что было в буфере до вызова скрипта.
#6, 11 января 2019 14:10
Нужно будет еще после F12 проверить, что не появилось окно "Объект перехода"
Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
//Переход занимает какое-то время
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;
#7, 11 января 2019 14:10
Указатель = можно убрать
#8, 11 января 2019 14:18
Нужно добавить задержку после копирования в буфер
Можно так попробовать, у меня вроде работает
//@script_name ShowFunctionText
//@script_display_name Просмотр текста функции
//@script_description Показывает текст функции в виде всплывающей подсказки, чтобы не прыгать по тексту модуля и не терять фокус при чтении кода
//@script_author alonehobo
//@script_developer_url https://turboconf.ru
//@script_hotkey Control+Shift+H
//@retain_clipboard 1
//@enterprise_mode 1
//@hide_actions 1
//@turbomenu 0
//@turbobutton 0
ТурбоКонф = Новый ТурбоКонф;
ТурбоКонф.Клавиша(Keys.F12);
Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;
ТурбоКонф.ControlShiftKey(Keys.OemCloseBrackets);
ТурбоКонф.ControlKey(Keys.C);
ТурбоКонф.Ждать(200);
ТекстМетода = ТурбоКонф.ПолучитьБуферОбмена();
Сообщить("ТекстМетода: "+ТекстМетода);
ТурбоКонф.ControlKey(Keys.OemMinus);
ТурбоКонф.ControlKey(Keys.OemMinus);
//Подождем пока вернемся обратно
ТурбоКонф.Ждать(200);
ТурбоКонф.ПоказатьПодсказку(ТекстМетода);
#9, 16 февраля 2021 15:44
bolsun переместил тему в раздел Скрипты пользователей