Прошу функцию/свойство для быстрого получения имени текущего метода и позиции в модуле

tormozit Открыто

Быстрое получение этих параметров (в первую очередь имени метода) нужно для ведения истории последних методов https://fastcode.im/Templates/10156
Если индикаторы этих параметров скрыты, то пусть будет Неопределено.

Комментарии

bolsun
#1, 15 марта 2025 11:59

Значения строки и колонки я еще давно пытался использовать для определения положения каретки, но это не получится, т.к. эти значения в UIA обновляются только при смене текущего окна.
bolsun изменил статус на Открыто


bolsun
#2, ред. 15 марта 2025 12:08

Я отслеживаю позицию каретку на лету. Метод для получения позиции каретки можно добавить в API, но в режиме совместимости она будет обновляется не во всех случаях (только при редактировании).


bolsun
#3, 15 марта 2025 12:30

(2) bolsun, хотя и позиция и текст модуля уже доступны через API в ТекущийДокумент и ПоследнийДокумент.


tormozit
#4, ред. 15 марта 2025 12:33

(3) bolsun, там затратное обновление - полное. Мне сам текст не нужен. Мне нужно очень быстро брать новое текущее имя метода и желательно позицию.


bolsun
#5, 15 марта 2025 12:33

(4) tormozit, эти свойства уже есть в Конфигуратор.ТекущийДокумент


bolsun
#6, ред. 15 марта 2025 12:36

А также есть очень быстрые методы ТекстовыйПроцессор.ПолучитьТекстБлокаСлева() из него извлечь имя метода достаточно просто и быстро.

ПолучитьТекстБлокаСлева()
ПолучитьТекстМетодаИзПозиции()
ПолучитьПозициюПоИндексу()
ПолучитьИндексИзПозиции()
ПолучитьТекущуюСтрокуИзПозиции()


tormozit
#7, 15 марта 2025 12:35

(5) bolsun, вот известное мне описание свойств документа:
Перем Заголовок Экспорт; // Строка - заголовок окна документа
Перем ЗаголовокКонфигуратора Экспорт; // Строка
Перем ИмяКонфигурации Экспорт; // Строка - "Внешний модуль", "" - привязка не выполнялась, "?" - привязка была неуспешна
Перем ТипДокумента Экспорт; // Строка - "Неизвестный", "ОбычныйМодуль", "МодульФормы", "Шаблон", "Макет", "СлужебныеСообщения".
Перем ЭтоМодульВнешнегоОбъекта Экспорт; // Булево
Перем DocumentRuntimeId Экспорт; // Строка - последовательность чисел, обычно сначала идут числа идентификатора родительского главного окна, затем самого элемента
Перем ConfRuntimeId Экспорт; // Строка - идентификатор окна конфигурации (основной или расширения или внешнего объекта метаданных)
Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!


tormozit
#8, 15 марта 2025 12:36

Обрати внимание на комментарии к 2-м последним свойствам
Перем Текст Экспорт; // Строка - у текущего документа может не обновляться!
Перем Позиция Экспорт; // Число - у текущего документа может не обновляться!


tormozit
#9, 15 марта 2025 12:38

Возможно я бы смог использовать эти свойства, если бы понимал как они обновляются.


bolsun
#10, 15 марта 2025 12:39

(8) tormozit, так или иначе других способов получить позицию на данный момент нет и скорее всего не будет.


bolsun
#11, 15 марта 2025 12:40

Либо 100% надежный принудительно через ПолучитьТекстМодуля.
Либо последняя известная позиция.


bolsun
#12, 15 марта 2025 12:41

(9) tormozit, в режиме совместимости обновляются только при изменении текста. В обычном режиме после изменения текста или кликов мышью.


bolsun
#13, 15 марта 2025 12:44

Также текущая позиция и текст модуля, доступны в параметрах обработчика ПриПолученииДанныхT9


tormozit
#14, 15 марта 2025 12:46

(12) bolsun, понял. Обновил документацию этих свойств.


tormozit
#15, 18 марта 2025 08:47

Можно хотя бы сделать получение текста из поля выбора имени метода без установки фокуса в него?
Получить и запомнить его RuntimeId. Читать его значение. Кажется это должно быть намного быстрее чем ПолучитьТекстМодуля().


tormozit
#16, ред. 23 марта 2025 11:00

(12) bolsun, к сожалению при кликах свойство "Позиция" не обновляется. Удалил из документации эту информацию. Может ты забыл указать еще какое то условие?


bolsun
#17, ред. 23 марта 2025 11:41

(16) tormozit, да, в ТекущемДокументе свойство Позиция обновляется только при изменении текста.


tormozit
#18, ред. 23 марта 2025 11:57

Помучался, но так и не смог без вызова ПолучитьТекстМодуля() сделать фоновое НЕнадежное отслеживание смены текущего метода. Вызов ПолучитьТекстМодуля() делать не хочу, чтобы не добавлять лишние задержки в редактирование модуля - история активных методов не стоит такой жертвы.

Но решение задачи https://turboconf.ru/Tasks/10169 уже бы заметно улучшило эффект от истории методов. Кажется решить ее можно довольно просто на стороне Турбоконфа.


bolsun
#19, 23 марта 2025 13:44

(18) tormozit, используй ПоследнийДокумент, а не ТекущийДокумент. ТекущийДокумент обновляет позицию не во всех случаях, а также ненадежно из него получать, т.к. скрипт может быть вызван из меню, что может сбрасывать это свойство.


bolsun
#20, 23 марта 2025 13:44

Также все это имеет смысл, только для идентифицированного модуля.


bolsun
#21, 23 марта 2025 14:09

Не уверен, что просто смена позиции (без редактирования текста) полезна для истории методов.

Пользователь может просто перемещаться к нужному методу и в процессе текущий метод будет меняться, что захламит историю.


bolsun
#22, 23 марта 2025 14:15

Если же нужно получить текущий метод при вызове команды скрипта, то да - через свойство ПоследнийДокумент.
Но ты не сможешь отслеживать всю историю, т.к. есть куча других скриптов, которые может вызывать пользователь и тот же переход из Процедуры и функции.
Я также планировал добавить историю редактирования (переходов, вызовов скриптов), возможно проще будет отдавать тебе список этих позиций через АПИ.


tormozit
#23, 23 марта 2025 14:23

(21) bolsun, Да, просто смена позиции будет давать много мало полезных добавок в историю. Поэтому нужно учитывать дополнительные условия, как например длительное удержание фокуса в одном методе (более 5 секунд). Аналогичный подход я применяю к ведению истории открытых форм в ИР.


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера