asciinema é uma solução gratuita e de código aberto(open source) para gravar sessões de terminal e compartilhá-las na web.
Como funciona?
O projeto asciinema é construído de várias peças complementares:
- gravador de sessão de terminal baseado em linha de comando, asciinema,
- site com uma API em asciinema.org,
- reprodutor de javascript
Quando você executa asciinema rec em seu terminal, a gravação começa, capturando toda a saída que está sendo exibida em seu terminal enquanto você emite ou executa os comandos do shell. Quando a gravação terminar (pressionando Ctrl-D ou digitando sair), a saída capturada é carregada no site asciinema.org e preparada para reprodução na web.
Aqui está uma breve visão geral de como essas partes funcionam.
Gravando com asciinema
Você provavelmente conhece o comando ssh, screen ou script. Na verdade, o asciinema foi inspirado nos comandos de script (e scriptreplay). O que você pode não saber é que todos eles usam o mesmo recurso do sistema UNIX: um pseudo-terminal.
Um pseudo terminal é um par de pseudodispositivos, um dos quais, o escravo, emula um dispositivo terminal de texto real, o outro, o mestre, fornece os meios pelos quais um processo emulador de terminal controla o escravo.
Veja como o emulador de terminal interage com um usuário e um shell:
A função do processo do emulador de terminal é interagir com o usuário; para alimentar a entrada de texto para o pseudodispositivo mestre para uso pelo shell (que está conectado ao pseudodispositivo escravo) e para ler a saída de texto do pseudodispositivo mestre e mostrá-la ao usuário.
Em outras palavras, os pseudoterminais dão aos programas a capacidade de atuar como intermediários entre o usuário, a tela e o shell. Ele permite a captura transparente da entrada do usuário (teclado) e da saída do terminal (display). screenO comando o utiliza para capturar atalhos de teclado especiais Ctrl-Ae alterar a saída para exibir números/nomes de janelas e outras mensagens.
O gravador asciinema faz seu trabalho utilizando pseudo-terminal para capturar toda a saída que vai para um terminal e salvá-la na memória (junto com as informações de tempo). A saída capturada inclui todo o texto e sequências invisíveis de escape/controle em uma forma bruta e inalterada. Quando a sessão de gravação termina, ele carrega a saída (no formato asciicast ) para asciinema.org. Isso é tudo sobre a parte de “gravação”.
Para obter os detalhes de implementação, verifique o código-fonte do gravador.
Reprodução
Como a gravação é um fluxo bruto de sequências de texto e controle, ela não pode ser reproduzida apenas pela impressão incremental de texto em intervalos adequados. Ele requer a interpretação das sequências do código de escape ANSI para exibir corretamente as alterações de cores, o movimento do cursor e a impressão de texto nos locais apropriados da tela.
O player vem com seu próprio emulador de terminal baseado no analisador de Paul Williams para terminais de vídeo compatíveis com ANSI . Ele cobre apenas a parte de exibição da emulação, pois é disso que se trata o player (a entrada é tratada pelo seu terminal + shell no momento da gravação) e seu manuseio de sequências de escape é totalmente compatível com a maioria dos emuladores de terminal modernos, como xterm, Gnome Terminal, iTerm, mosh etc.
O resultado final é uma animação suave com todos os atributos de texto (negrito, sublinhado, inverso, …) e 256 cores perfeitamente renderizadas.
Para os detalhes de implementação, confira o código-fonte do site asciinema.org e o código – fonte do player.
Fonte asciinema