selectel/pyte — pull request #7 by YuriyNasretdinov (2012-03-18 10:51:52+00:00)
Title: Ported almost everything of the class to javascript ;)

Привет, я некоторое время назад видел вашу библиотеку pyte, но, к сожалению, она на питоне, а я пишу эмулятор терминала на PHP :), поэтому я решил портировать ваш код на Javascript и поделиться им с вами.

Портированы все классы, кроме ByteStream, DebugStream, DiffScreen и HistoryScreen. В принципе, портировать DiffScreen и HistoryScreen тоже можно, просто для моих целей это было не нужно :).
Также отсутствует поддержка флага «private», поскольку это было реализовано с помощью сильно-специфичного для питона трюка с kwargs. Есть некоторые баги (например htop оставляет после себя жирный шрифт почему-то), но в целом всё работает. Скорее всего, если вам этот порт вообще будет полезен, вы сможете сами эти баги исправить (даже если я их не найду :)).

По идее, классы полностью совместимы с питоновскими (за исключением некоторых вещей, которые в JS сделать затруднительно, вроде «магического» свойства display — в моём порте это просто метод display()), поэтому даже для вас этот порт может быть полезен с той точки зрения, что можно экономить трафик пользователя, посылая ему лишь команды на отрисовку, а не готовые строки экрана. Причём это не отменяет возможности сохранять экран с использованием питоновской библиотеки на сервере, а лишь дополняет его. По моим тестам и ощущениям, порт на JavaScript работает значительно плавнее и меньше грузит CPU, чем исходная версия на питоне (правда, я не запускал его под psyco, только под python) ;).