|
Иногда, при чтении кода, бывает нужно заглянуть в функцию или процедуру, чтобы понять, что там выполняется, но при этом приходится перепрыгивать в другое место модуля и терять фокус с текущей строки. Данный скрипт показывает текст функции под курсором в виде всплывающей подсказки. Лучше всего подходит для чтения небольших функций или процедур.
Нажимаем
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].Значение));
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
ТурбоКонф.ПерейтиВПозицию(ИсхКолонка, ИсхСтрока)
Предлагаю улучшения )) Получение текста функции можно попробовать сделать по другому. ТурбоКонф.Клавиша(Keys.F12); ТурбоКонф.ControlShiftKey(Keys.OemCloseBrackets); ТурбоКонф.Копировать(); ТурбоКонф.ControlKey(Keys.OemMinus); ТурбоКонф.ControlKey(Keys.OemMinus); ТурбоКонф.ПоказатьПодсказку(ТурбоКонф.ПолучитьБуферОбмена()); Будет работать и для методов, расположенных в других модулях
Издеваетесь? Я весь мозг сломал с написанием регулярного выражения, а Вы... Так не делается....)))
Тяжело в учении... (с) :)
Почему-то ваш метод не работает. Показывает последнее содержимое буфера и все. Если смотреть функцию другого модуля, то его окно открывается в фоне, т.е. все действия вроде бы выполняются, но показывает то, что было в буфере до вызова скрипта.
Нужно будет еще после F12 проверить, что не появилось окно "Объект перехода" Попытка Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина); ТурбоКонф.Клавиша(Keys.Enter); //Переход занимает какое-то время ТурбоКонф.Ждать(200); Исключение //Окна не было, продолжаем КонецПопытки;
Указатель = можно убрать
Нужно добавить задержку после копирования в буфер Можно так попробовать, у меня вроде работает //@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); ТурбоКонф.ПоказатьПодсказку(ТекстМетода);
bolsun переместил тему в раздел Скрипты пользователей
Класс! :) попробую