Иногда неожиданные прыжки каретки в модуле

tormozit Закрыто

Каретка неожиданно прыгнула на 200 строк выше (2 видимой высоты области модуля) того места, в котором была примерно в 12.09.25 15:42:55. Происходит это регулярно и уже много месяцев. Каждый день по несколько раз. Не критично, но достаточно заметно и иногда неприятно, т.к. теряешь место в модуле.

Ссылка скрыта

Заодно обрати внимание на событие (похоже некорректно пишется)
[12.09.25 15:42:29:899] OnFocusChange() title=Поиск объектов метаданных, fg=2439960
ъектов метаданных,curFg=2439960

Комментарии

bolsun
#1, ред. 12 сентября 2025 16:06

Мы же это проходили уже, скорее всего из-за бага платформы прыгает.


tormozit
#2, 12 сентября 2025 16:07

(1) bolsun, Насколько я помню было несколько причин прыжков каретки. И для всех было найдено какое приемлемое решение. Во всяком случае помню длительный период, когда я их практически не замечал. Сейчас же они происходят затемно чаще. Считаю, что есть смысл заново осмотреть этот функционал (обходные маневры и т.д.)


tormozit
#3, ред. 12 сентября 2025 16:11

(2) tormozit, Вот заявки по тем прыжкам каретки
https://turboconf.ru/Tasks/8913
https://turboconf.ru/Tasks/8986
https://turboconf.ru/Tasks/9773


bolsun
#4, 12 сентября 2025 16:11

(2) tormozit, перед тем как позиция поменялась, фокус был в окне другого приложения ASticky


tormozit
#5, 12 сентября 2025 16:14

(4) bolsun, нет. Вот ближайшие к моменту события активации окна ASticky.
Строка 1089932: [12.09.25 14:23:26:406] OnMouseDown , fg = 264152, title = ASticky: 8213724E0048C4
Строка 1212510: [12.09.25 15:44:26:929] OnFocusChange() title=ASticky: 8213724E0048C4, fg=264152
А момент прыжка - 12.09.25 15:42:55, т.е. перед ним активации этого окна не было.


tormozit
#6, 12 сентября 2025 16:17

(1) bolsun, та ошибка платформы давно уже исправлена. Подробнее тут https://turboconf.ru/Tasks/8986


bolsun
#7, 12 сентября 2025 16:21

(5) tormozit, как ты определил момент прыжка? какое точное время?


tormozit
#8, ред. 12 сентября 2025 16:22

(7) bolsun, я сразу прекратил нажатия клавиш и клики и движения мыши и ждал так минуту


bolsun
#9, 12 сентября 2025 16:24

(8) tormozit, что за клавиша F21 фигурирует перед этим?


bolsun
#10, 12 сентября 2025 16:25

На Ctlr+C ничего не навешано, макрос какой-нибудь?


tormozit
#11, ред. 12 сентября 2025 16:27

(9) bolsun, это виртуальная клавиша, на которой у меня давно висит макрос, включающий вызов команды скрипта "Перейти к определению" CTRL+F12 https://turboconf.ru/Tasks/7529


tormozit
#12, 12 сентября 2025 16:27

(10) bolsun, нет


bolsun
#13, 12 сентября 2025 16:28

(11) tormozit, Эта клавиша была нажата непосредственно перед прыжком каретки. за пару сотен мс.


bolsun
#14, 12 сентября 2025 16:30

Почему-то было выполнено Ctrl+C после этого.


bolsun
#15, ред. 12 сентября 2025 16:38

[12.09.25 15:42:59:758] KeyboardHookManagerOnKeyUp(): C, Control
[12.09.25 15:42:59:758] Received {C UP} await = F21 IsProcess=False, IsQueueInProgress=False, (28594,6829 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=C, Control
[12.09.25 15:42:59:758] Key up C has passed to window 6fc223e
[12.09.25 15:42:59:795] ControlKey
[12.09.25 15:42:59:920] KeyboardHookManagerOnKeyUp(): LControlKey, Control
[12.09.25 15:42:59:920] Received {LControlKey UP} await = F21 IsProcess=False, IsQueueInProgress=False, (28756,6822 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=LControlKey, Control
[12.09.25 15:42:59:920] Key up LControlKey has passed to window 6fc223e
[12.09.25 15:43:00:048] Delay 2000 ms
[12.09.25 15:43:01:656] Delay 2000 ms
[12.09.25 15:43:02:049] Delay 2000 ms
[12.09.25 15:43:03:658] Delay 2000 ms
[12.09.25 15:43:04:050] Delay 2000 ms
[12.09.25 15:43:05:660] Delay 2000 ms
[12.09.25 15:43:06:051] Delay 2000 ms
[12.09.25 15:43:07:661] Delay 2000 ms


bolsun
#16, 12 сентября 2025 16:34

Переход к определению похоже сработал.


tormozit
#17, ред. 12 сентября 2025 16:38

(15) bolsun, У меня лог выглядит немного не так (твой markdown парсер прячет куски лога)

[12.09.25 15:42:59:758] KeyboardHookManagerOnKeyUp(): C, Control
[12.09.25 15:42:59:758] Received {C UP} await = F21 IsProcess=False, IsQueueInProgress=False, (28594,6829 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=C, Control
[12.09.25 15:42:59:758] Key up C has passed to window 6fc223e
[12.09.25 15:42:59:795] ControlKey
[12.09.25 15:42:59:920] KeyboardHookManagerOnKeyUp(): LControlKey, Control
[12.09.25 15:42:59:920] Received {LControlKey UP} await = F21 IsProcess=False, IsQueueInProgress=False, (28756,6822 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=LControlKey, Control
[12.09.25 15:42:59:920] Key up LControlKey has passed to window 6fc223e
[12.09.25 15:43:00:048] Delay 2000 ms
[12.09.25 15:43:01:656] Delay 2000 ms

А фрагмент "await = F21" встречается в огромном числе событий нажатия других клавиш. Что это значит?


tormozit
#18, ред. 12 сентября 2025 16:41

(16) bolsun, я бы это заметил. Вот пример как в логе выгляди вызов нажатия клавиши F21

[12.09.25 15:42:28:994] OnKeyDown F21
[12.09.25 15:42:28:994] Set _TurboApiSingletone.Instance.LastKeyEventArgs=F21
[12.09.25 15:42:28:994] Received {F21 DOWN} await = F21 IsProcess=False, IsQueueInProgress=False, (2642,9875 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=F21
[12.09.25 15:42:28:994] _needCheckAutoComplete = False
[12.09.25 15:42:28:994] Key down F21 has passed to window 6fc223e
...
[12.09.25 15:42:31:164] Send {F21 KeyUp}
[12.09.25 15:42:31:164] KeyboardHookManagerOnKeyUp(): F21
[12.09.25 15:42:31:164] Received {F21 UP} await = F21 IsProcess=False, IsQueueInProgress=True, (0 ms) fg=6fc223e title=Обработка ирПлатформа: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=F21
[12.09.25 15:42:31:164] Key up F21 has passed to window 6fc223e


bolsun
#19, 12 сентября 2025 16:41

(18) tormozit, куда перейдет каретка если выполнить переход к определению на мПлатформа в начальной позиции?


tormozit
#20, 12 сентября 2025 16:42

(19) bolsun,


bolsun
#21, 12 сентября 2025 16:43

(20) tormozit, нет, без ИР, штатная


tormozit
#22, 12 сентября 2025 16:44

(21) bolsun, в начало модуля


bolsun
#23, 12 сентября 2025 16:46

(17) tormozit, await = F21 не имеет отношения к делу, это пишется устаревшая неочищенная информация после выполнения предыдущего скрипта.


bolsun
#24, 12 сентября 2025 16:48

Я не вижу какого-то причастия ТК к перемещению каретки.
А вот Ctrl+OemMinus присутствует в непосредственной близости перед скачком, так может не все исправили.


bolsun
#25, 12 сентября 2025 16:51

Либо еще теория.
Скачок произошел после нажатия Ctrl+C, возможно это убрало какую-то блокировку буфера, из-за его обновления.
И сработал какой-то предыдущий заблокированый скрипт.


bolsun
#26, 12 сентября 2025 16:51

Либо еще теория.
Скачок произошел после нажатия Ctrl+C, возможно это убрало какую-то блокировку буфера, из-за его обновления.
И продолжился какой-то предыдущий заблокированный скрипт.


tormozit
#27, 12 сентября 2025 16:52

(24) bolsun, Подскажи как найти нажатие Ctrl+OemMinus


bolsun
#28, ред. 12 сентября 2025 16:56

поищи в полном логе аномально большое время выполнения скрипта

Замер: Время выполнения скрипта ИРАдаптер->ПерейтиКОпределению:

скорее всего уже после прыжка.


bolsun
#29, ред. 12 сентября 2025 16:57

(27) tormozit,

[12.09.25 15:42:49:755] Received {OemMinus DOWN} await = F21 IsProcess=False, IsQueueInProgress=False, (18591,4934 ms) fg=6fc223e title=[КА1 серверная] - Обработка ирПлатформа: Модуль объекта - Конфигуратор - КомплекснаяАвтоматизация, KeyData=OemMinus, Control


bolsun
#30, 12 сентября 2025 16:58

но скорее всего проблема связана с буфером и подвисанием скрипта


bolsun
#31, 12 сентября 2025 16:59

я правильно понимаю, что ты сам не нажимал Ctrl+С?


tormozit
#32, ред. 12 сентября 2025 17:03

(28) bolsun, Все короткие. А после прыжка уже нет их.


tormozit
#33, ред. 12 сентября 2025 17:05

(31) bolsun, нажимал. Я выделил пару строк текста и нажал CTRL+C. И они попали в буфер в 15:42:59


bolsun
#34, ред. 12 сентября 2025 17:13

Я не вижу какую-то причастность ТК к прыжку, единственный пока способ проверить это поработать без него. Раз проблема частая, то возникнет в течении дня (или не возникнет).
Может платформа и себе буфер блокирует, раз Ctrl+C вызвало какое то действие в конфигураторе.
Например буфер освободился и выполнилось подвисшее Ctrl+OemMinus


bolsun
#35, 12 сентября 2025 17:15

Кстати взаимные блокировки двух конфигураторов я вчера вроде бы ловил, при помещении в буфер большого объекта в одном конфигураторе, фризился интерфейс в другом.


tormozit
#36, 12 сентября 2025 17:20

Буду собирать еще логи. Может быть увидим что то общее. Но нажатие Ctrl+OemMinus выглядит наиболее перспективным направлением поиска.


tormozit
#37, ред. 13 сентября 2025 18:51

Сейчас более четко отследил, что прыжок произошел, когда я зажал CTRL в 13.09.25 18:38:01. Затем случилась прокрутка видимой области и я уже кликнул в неожиданном месте модуля.

Ссылка скрыта

Еще часто вижу автосохранение текстов модулей там рядом. Я его включил несколько месяцев назад. Примерно тогда же и стал замечать увеличение частоты таких прыжков. Возможно тут есть связь.
Еще в этот раз не видно нажатия CTRL+OemMinus перед прыжком.


tormozit
#38, ред. 13 сентября 2025 21:19

Появилась еще идея. Возможно при зажатом CTRL каким то образом прокручивается колесо мыши. Можешь добавить логирование прокрутки колеса с зажатым CTRL - довольно редкое событие?


bolsun
#39, 13 сентября 2025 20:23

(37) tormozit, автосохранение вряд ли причастно к этому, оно работает в отдельном потоке и не использует интерактивных методов.


bolsun
#40, 13 сентября 2025 20:31

(38) tormozit, прыжки происходят на размер видимой области?


tormozit
#41, ред. 13 сентября 2025 21:12

(40) bolsun, больше чем высота одной области. Один раз это было >200 строк, а видимая область у меня 70 строк.
В (37) прыжок был тут между опусканием CTRL и OnMouseDown

[13.09.25 18:37:59:504] curLine='	ПередатьИзмененияИзПоляТекстаВОкноМодуля(ПолеТекстаПрограммы, Ложь, Ложь,, Ложь' - тут я редактировал текст
...
[13.09.25 18:38:01:003] OnKeyDown LControlKey
[13.09.25 18:38:01:003] Set _TurboApiSingletone.Instance.LastKeyEventArgs=LControlKey
[13.09.25 18:38:01:003] Received {LControlKey DOWN} await = Return IsProcess=False, IsQueueInProgress=False, (1555,0366 ms) fg=1b509b8 title=[ОСкрипт] - Обработка СкриптАдаптер: Модуль объекта - Конфигуратор - Редактор скрипта для TurboConf, KeyData=LControlKey
[13.09.25 18:38:01:003] _needCheckAutoComplete = False
[13.09.25 18:38:01:003] Key down LControlKey has passed to window 1b509b8
[13.09.25 18:38:01:106] OnMouseDown Left {X=998,Y=968}


tormozit
#42, 13 сентября 2025 21:20

(41) tormozit, Не вижу каких то общих для обоих случаев деталей.
Буду теперь внимательнее смотреть в сторону гипотезы (38) специфичной для моей мыши с инерционным колесом.


bolsun
#43, 13 сентября 2025 21:24

(42) tormozit, добавил логирование всех прокруток колеса мыши (не только с Ctrl)
6.4.9387.42064
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#44, 13 сентября 2025 21:25

(43) bolsun, я колесо без CTRL кручу очень часто. Поэтому думаю будет слишком много мусорных событий.


bolsun
#45, 13 сентября 2025 21:26

(44) tormozit, главное поймать это событие, потом уберем. Мы рискуем не отследить его, если Ctrl будет уже отжат в тот момент.


tormozit
#46, 13 сентября 2025 21:27

(45) bolsun, понял


tormozit
#47, ред. 15 сентября 2025 08:35

Здесь прокрутка видимой области модуля возникла из-за работы фонового метода ЗапомнитьМетод() скрипта.
[15.09.25 08:22:07:105] Запомнить метод 307 мс
Ссылка скрыта

Хотелось бы понять, можно ли избежать такого эффекта, который по всей видимости возникает при вызове ТурбоКонф.ИдентифицироватьТекущийДокумент()?

Но в других случаях этот метод не участвовал в прокрутке.


tormozit
#48, ред. 15 сентября 2025 15:12

(38) tormozit, гипотеза с прокруткой колеса мыши подтверждена как основная для большинства случаев. Я часто удержимаю CTRL, чтобы выделять слова кликом. При этом изредка случается поворот колеса мыши на один шаг. Если после этого явно прокрутить на один шаг обратно с зажатым CTRL (угадать направление), то старое место попадает в видимую область модуля.

[15.09.25 15:02:03:685] OnKeyDown LControlKey
[15.09.25 15:02:03:685] Set _TurboApiSingletone.Instance.LastKeyEventArgs=LControlKey
[15.09.25 15:02:03:685] Received {LControlKey DOWN} await = None IsProcess=False, IsQueueInProgress=False, (2244,1751 ms) fg=cf18ae title=[КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: КонструкторЗапроса - Конфигуратор - КомплекснаяАвтоматизация, KeyData=LControlKey
[15.09.25 15:02:03:685] _needCheckAutoComplete = False
[15.09.25 15:02:03:685] Key down LControlKey has passed to window cf18ae
[15.09.25 15:02:03:810] ControlKey
[15.09.25 15:02:03:850] OnMouseDown Left {X=373,Y=592}
[15.09.25 15:02:03:850] OnMouseDown , fg = 13572270, title = [КА1 серверная] - Обработка ирКлсПолеТекстаПрограммы: КонструкторЗапроса - Конфигуратор - КомплекснаяАвтоматизация
...
[15.09.25 15:02:03:893] OnMouseWheel()...delta=120


tormozit
#49, 15 сентября 2025 15:14

Причина (47) случается реже чем (48) и ее думаю можно попробовать исправить в программе.


bolsun
#50, 15 сентября 2025 15:36

(49) tormozit, не понимаю как я могу исправить прокрутку окна конфигуратора. Попробуй заменить мышь.


bolsun
#51, 15 сентября 2025 15:40

(48) tormozit, какая взаимосвязь между нажатием к Ctrl и срабатыванием колеса мыши?


tormozit
#52, 15 сентября 2025 15:46

(50) bolsun, я не просил исправлять аппаратную проблему прокрутки колеса мыши. Я просил подумать над другой причиной (47) - там про прокрутку при вызове ТурбоКонф.ИдентифицироватьТекущийДокумент(). Там нет событий OnMouseWheel.


tormozit
#53, 15 сентября 2025 15:47

(51) bolsun, никакой. Просто при зажатом CTRL эффект от случайного поворота колеса значительно заметнее, т.к. при этом шагание выполняется страницами.


bolsun
#54, ред. 15 сентября 2025 15:54

(49) tormozit, прокрутка при вызове метода ИдентифицироватьТекущийДокумент происходит, из-за вызова Ctrl+OemMinus в дереве конфигурации, после Ctrl+T, что возвращает предыдущую позицию в модуле (с прокруткой).
Если ты до этого прокрутил модуль, то видимая область изменится.
Можно попробовать использовать Escape для возврата, но не знаю какие побочки могут возникнуть и почему я раньше остановился на Ctrl+OemMinus я уже не помню.


bolsun
#55, 15 сентября 2025 16:11

(54) возврат через Esc не всегда возвращает фокус в предыдущее окно, например не возвращает для прикрепленного документа.


bolsun
#56, ред. 15 сентября 2025 16:17

(55) для свободного также не возвращает, поэтому Ctrl+OemMinus - единственный более менее надежный метод.


bolsun
#57, ред. 15 сентября 2025 16:27

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

Могу попробовать добавить в API тип последнего события ввода, если он будет OnMouseWheel, то ты не будешь вызывать идентификацию метода.


tormozit
#58, 15 сентября 2025 16:27

А ты можешь понять, находится ли каретка в видимой области модуля?


tormozit
#59, 15 сентября 2025 16:32

(57) bolsun, Идея с отслеживанием OnMouseWheel интересная, но одной штуки этого события недостаточно для принятия такого решения. Тогда нужно будет копить суммарный поворот от последней установки текущей позиции каретки в тексте.


bolsun
#60, 15 сентября 2025 17:04

(58) tormozit, теоретически - да.


tormozit
#61, ред. 15 сентября 2025 17:08

(60) bolsun, Если при твоем отслеживании модуль не будет прокручиваться, то это будет неплохое решение проблемы. Тогда можно добавить в список свойств состояния "КареткаВидна". Если там Ложь, я не буду в фоне разбирать и запоминать текущий метод.


bolsun
#62, 16 сентября 2025 13:08

логирование OnMouseWheel отключаю?


tormozit
#63, 16 сентября 2025 13:11

(62) bolsun, да. Скорее всего в нем нет больше смысла.


tormozit
#64, 23 декабря 2025 23:17

Больше необъяснимых прыжков каретки не наблюдал.
tormozit изменил статус на Закрыто


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