Реализация Condensed View
Posted: Mon 27 Jul, 2015 23:06
Latest post of the previous page:
Latest post of the previous page:
Не трогать закладки.
Здесь не нужна глобальная таблица.
Не трогаю. Обошёл по кривой. Запоминаю позиции закладок, при восстановлении перехожу на позицию закладки и посылаю
Keys('RCtrl[0-9]")
Мне нужно, чтобы информация оставалась между вызовами функций. Т.к. я не знаю, какое время жизни переменных, единственный способ обеспечить доступность информации между разными вызовами функций, который я смог придумать, это - заведение таблицы в _G, внутри неё - для каждого редактора по его ID-у таблицы для хранения данных. Придумал опять же не сам, а сделал по примеру макроса, расставляющего переносы по тексту (EditWrap.lua). Если подскажете, как это делают умные люди - буду благодарен.
Эти переменные присваиваются в функциях condition. Неужели между condition и action может произойти переключение на другой редактор?
Я же проверяю, находится ли редактор, соответствующий переданному в обработчик события id-у, в condenced-режиме. Если да - всё, контроль за ним полностью обеспечивается макросом. Если нет - я ничего не делаю. Я не знаю, должна ли функция ProcessEditorEvent возвращать результат типа "обработан / не обработан". Было бы логично, чтоб не вызывать остальные обработчики. Не нашёл, где такое может быть описано.
Да, это было бы хорошо. Но не представляю себе, как можно открыть новый редактор, а старый "спрятать" (чтоб на него нельзя было переключиться). Если этого не сделать, то исходный текст возможно будет править, что приведёт к рассинхронизации сжатого и несжатого текстов. Ну и вообще куча проблем.
macroapi_manual.ru.chm
Возможно, но в самом определении макроса этого не видно, а присваивания эти не находятся в одном месте, а встречаются неоднократно и в разных функциях.
А это тут при чём вообще.
Открыть модальный редактор.
Или просто запретить модификацию.
А если несколько экземпляров FAR - переменные общие, или нет? А editor.info.id - уникальный? Или всё в пределах одного экземпляра? Что как-то они между собой взаимодействуют - я понял. Во всяком случае, пока ВСЕ экземпляры не закроются, значение, занесённое в _G, остаётся доступным. Впрочем, начерно, _G.EditorsCondView можно заменить на local EditorsCondView - попробую.
Тут это - ни при чём. Просто нужно же иметь механизм прерывания цепочки обработчиков события (типа done). Просто чтоб другой обработчик не вмешался в работу макроса.
1. Не знаю, что такое "фоновый редактор".
if not _G.EditorsCondView[id] then return end
- т.е. включен ли сжатый режим. И что тут не так?
И потерять возможность переключаться в другие окна??? Ну ничего себе! Нужно запретиь переход только на исходный редактор, а не вообще на любой!
Опять же не представляю, как запретить модификацию без перехвата нажатий клавиш. Собственно, я запретил модификацию в сжатом режиме.
Что такое "соответствующая экспортируемая функция"? Поиск по condition ничего не дал, в разделе export.ProcessEditorEvent параметры абсолютно не соответствующие тем, что получают функции (первый параметр я получаю таблицу, а описан EditorID: integer.Функции condition и action обработчика вызываются с теми же параметрами, с которыми вызывается соответствующая экспортируемая функция (см. мануал LuaFAR).
Так у меня именно так и делается (и именно для этого и используются)! В функции IsEditorActive эти переменные присваиваются, а используются в функциях action. Т.е. в точности то, что Вы написали...
Довольно серьёзное заявление. Можете доказать на примере, чтобы не было голословно?buniak_a_h wrote:в разделе export.ProcessEditorEvent параметры абсолютно не соответствующие тем, что получают функции (первый параметр я получаю таблицу, а описан EditorID: integer.
Разные экземпляры никак между собой не взаимодействуют.
Значит и нечего мешать всё в кучу. Если что-то в Энциклипедии не ясно, значит надо спросить, но в соответствующей теме.
А то, что id может оказаться не равным EID, если редактор фоновый (т.е. не является активным окном).
И так можно, всё в ваших руках.
Оказывается умеете.
И перехватить можно, да.
Разумеется. В соответствующей теме.
Нет же.
1. Насколько я понимаю, код в принципе нерабочий. condition должна возвращать или boolean, или число-приоритет. а
a
в Вашем примере - это (в моём контексте) пара (ei, EID)
.