Sage

Publicado em 04/11/2024 - Código fonte

Sage é um editor de texto baseado em console inspirado por Vim e escrito em Rust,

A única crate externa usada é o Crossterm e deve rodar em vários terminais diferentes.

Já que foi um pequeno projeto para aprender manipulação de terminal, tem muito espaço para melhorias:

  • Motions:

    Do jeito que é agora, as Motions são hardcoded já que há poucas delas apenas para movimentação do cursor. Uma ideia que eu tive foi converter o tratamento de Motions para algum tipo de AST ou uma estrutura mais simples para análise de expressões. Isso permitiria a avaliação de motions mais complexas (cw, di" e y$ por exemplo) sem precisar fazer hardcode de cada uma delas.

    Por exemplo, vamos avaliar a motion di" (Delete Inside Quotes / Delete Dentro de Aspas). Como você deve ter adivinhado, essa motion deleta todo o texto dentro das próximas aspas.

    1. A tecla d não faz nada sozinha, então ao pressioná-la, ela deve ser posta em uma AST, esperando as próximas teclas para serem avaliadas juntas (como expressões em linguagens de programação).
    2. A tecla i, diferente da última, entra no Modo Inserção quando pressionada sozinha. Porém nesse caso, ela está sendo avaliada como parte de uma expressão e deve ser posta na AST, esperando mais teclas.
    3. A tecla " não de precisa de uma próxima para ser avaliada, então ela é posta na AST e a espera por mais teclas é interrompida, permitindo o programa avaliar a motion inteira.
    4. A avaliação final ficaria algo como: Delete (onde?) Dentro (onde?) de Aspas.

    A mesma lógica pode ser aplicada para motions como yiw, dt&,ci(

  • Outros à fazer: Mode Visual, Copiar/Colar, Desfazer/Refazer, Captura de Mouse, Highlight de sintaxe e Procura de Texto.

Caso queira saber mais sobre Vim, há bons recursos em:

E os códigos fonte que inspiraram esse pequeno projeto: