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"
ey$
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.- 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). - A tecla
i
, diferente da última, entra noModo 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. - 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. - 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(
- A tecla
-
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: