Продолжаем делать редактор на базе text. text лишь немногим умнее морковки, и он будет по многим вопросам обращаться за мудростью к серверу через сокеты и дожидаться ответа.
Например, пользователь нажал <Return>, перешёл на новую строчку и нужно вычислить автоотступ. Отправляется запрос на сервер о нажатии Return и запрос на автоотступ. Сервер вставляет Return в свою копию буфера редактирования. Теперь буфера одинаковы. Сервер вычисляет автоотступ и возвращает клиенту.
Но после нажатия <Return> и не дожидаясь ответа сервера, пользователь продолжает что-то печатать. Допустим, напечатал открывающую скобку. Чтобы не нарушить синхронизацию буферов, мы на обработчике <Return> в ctext включим режим заморозки.
В этом режиме событие нажатия на скобку должно записываться в некую очередь. В ctext ничего не будет вставлено.
Когда сервер ответит про автоотступ, text вставляет автоотступ и дальше говорит «разморозить».
После этого событие нажатия на скобку достаётся из очереди и применяется к уже новому состоянию буфера с вставленным автоотступом, что и есть единственно верное решение.
Глядя на всякого рода записыватели макросов клавиатуры (скажем, в моей клавиатуре такой есть), я вижу, что они записывают не совсем ту последовательность, которую я набиваю. Вставляют обычно задержки между отправкой событий нажатия. Также есть события от мыши. Также есть кнопки-модификаторы.
Внимание, вопрос: есть ли библиотека на tcl, которая это умеет? если нет, то куда копать?