John Doe
Спасибо за анализ. Поясню некоторые моменты, которые я просто не знаю, как сделать по-другому, т.к. (а) это мой первый опыт написания процедуры на lua и (б) не смог найти детального описания областей видимости и времени жизни переменных.
John Doe wrote: Не трогать закладки.
Не трогаю. Обошёл по кривой. Запоминаю позиции закладок, при восстановлении перехожу на позицию закладки и посылаю
Keys('RCtrl[0-9]")
John Doe wrote: Здесь не нужна глобальная таблица.
Мне нужно, чтобы информация оставалась между вызовами функций. Т.к. я не знаю, какое время жизни переменных, единственный способ обеспечить доступность информации между разными вызовами функций, который я смог придумать, это - заведение таблицы в
_G, внутри неё - для каждого редактора по его ID-у таблицы для хранения данных. Придумал опять же не сам, а сделал по примеру макроса, расставляющего переносы по тексту (EditWrap.lua). Если подскажете, как это делают умные люди - буду благодарен.
John Doe wrote: Ну и то что раньше писал: хранение ei и EID между вызовами абсолютно различных функций непросто отследить, и вообще крайне сомнительная практика.
<...> и используете в обработчике
(когда-то) закешированные значения ei и EID
Эти переменные присваиваются в функциях condition. Неужели между condition и action может произойти переключение на другой редактор?
John Doe wrote: Навскидку, посмотрим что у вас в ProcessEditorEvent.
Насколько мне известно ProcessEditorEvent может приходить не только для текущего редактора.
Я же проверяю, находится ли редактор, соответствующий переданному в обработчик события id-у, в condenced-режиме. Если да - всё, контроль за ним полностью обеспечивается макросом. Если нет - я ничего не делаю. Я не знаю, должна ли функция
ProcessEditorEvent возвращать результат типа "обработан / не обработан". Было бы логично, чтоб не вызывать остальные обработчики. Не нашёл, где такое может быть описано.
John Doe wrote: не менять содержимое редактора, а для работы открывать новый редактор
Да, это было бы хорошо. Но не представляю себе, как можно открыть новый редактор, а старый "спрятать" (чтоб на него нельзя было переключиться). Если этого не сделать, то исходный текст возможно будет править, что приведёт к рассинхронизации сжатого и несжатого текстов. Ну и вообще куча проблем.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании