История изменений
Исправление den73, (текущая версия) :
Осудите план:
Делаю новый тег для bind. Беру все биндинги для Text, копирую их в этот тег. Каждый биндинг оборачиваю в проверку, не включён ли режим заморозки. Если не включён, то выполняю сразу, если включён, то откладываю.
Операция разморозки состоит в том, что я отправляю замороженные события по одному в after idle (или after 0, или after 50ms?) и после исчерпания замороженных событий отключаю режим заморозки.
Делаю я так сложно для того, чтобы не морочиться с разбором модификаторов клавиатуры, чтобы не перехватывать события, которые не предназначены моему виджету. Например, если пользователь нажал Alt-. для переключения в окно REPL, а редактор заморожен, то нет оснований заставлять пользователя ожидать разморозки редактора. Более того, это жизннено важно для отладки, когда сервер редактора повис.
Ну и вообще неплохо бы иметь библиотечку для метапрограммирования и шаблонирования. Пока уже сложились такие требования:
- подстановка метапараметров времени раскрытия шаблона. Пока окружаю шаблоны четырёхкратными угловыми скобками и делаю regsub.
- проверка, что в коде нет параметров, т.е. он не обращается ни к каким внешним переменным (ну или передавать список тех, к кому можно обращаться). Это нужно для «проверочных утверждений» (assert-ов) в ситуации, когда вычисление кода откладывается на потом и будет производиться в контексте, где текущие переменные могут быть недоступны.
- отложенная подстановка параметра. Здесь известно, что при выполнении кода в будущем будет определена некоторая переменная, которую и нужно будет использовать. Например, это будет если мы готовим тело для apply и при применении будут даны такие-то параметры.
При этом желательно, чтобы шаблоны кода задавались не строками, а были зрительно похожи на обычный код, т.е. с помощью {}. В общем-то, для такой библиотечки почти не нужно программирования. Это скорее должна быть статья, а не библиотечка. Может есть такая где-нибудь.
Самое обидное, что где-то в моём проекте уже есть наработки по этой теме, но я их потерял и не могу найти :)
Исходная версия den73, :
Осудите план:
Делаю новый тег для bind. Беру все биндинги для Text, копирую их в этот тег. Каждый биндинг оборачиваю в проверку, не включён ли режим заморозки. Если не включён, то выполняю сразу, если включён, то откладываю.
Операция разморозки состоит в том, что я отправляю замороженные события по одному в after idle (или after 0, или after 50ms?) и после исчерпания замороженных событий отключаю режим заморозки.
Делаю я так сложно для того, чтобы не морочиться с разбором модификаторов клавиатуры, чтобы не перехватывать события, которые не предназначены моему виджету. Например, если пользователь нажал Alt-. для переключения в окно REPL, а редактор заморожен, то нет оснований заставлять пользователя ожидать разморозки редактора. Более того, это жизннено важно для отладки, когда сервер редактора повис.
Ну и вообще неплохо бы иметь библиотечку для метапрограммирования и шаблонирования. Пока уже сложились такие требования:
- подстановка метапараметров времени раскрытия шаблона. Пока окружаю шаблоны четырёхкратными угловыми скобками и делаю regsub. - проверка, что в коде нет параметров, т.е. он не обращается ни к каким внешним переменным (ну или передавать список тех, к кому можно обращаться). Это нужно для «проверочных утверждений» (assert-ов) в ситуации, когда вычисление кода откладывается на потом и будет производиться в контексте, где текущие переменные могут быть недоступны. - отложенная подстановка параметра. Здесь известно, что при выполнении кода в будущем будет определена некоторая переменная, которую и нужно будет использовать. Например, это будет если мы готовим тело для apply и при применении будут даны такие-то параметры.
При этом желательно, чтобы шаблоны кода задавались не строками, а были зрительно похожи на обычный код, т.е. с помощью {}. В общем-то, для такой библиотечки почти не нужно программирования. Это скорее должна быть статья, а не библиотечка. Может есть такая где-нибудь.
Самое обидное, что где-то в моём проекте уже есть наработки по этой теме, но я их потерял и не могу найти :)