O Tasma Code Editor é um editor de texto robusto baseado em terminal (TUI), desenvolvido em Python utilizando a biblioteca curses. Ele combina a leveza de editores de console com funcionalidades modernas de IDEs.
O sistema opera através de um loop principal (main.py) que orquestra a interação entre os componentes:
- Gerenciamento de Estado: O
TabManagercontrola os buffers de arquivos abertos, enquanto a classeEditorlida com a manipulação de texto, cursor e histórico de desfazer/refazer. - Interface (UI): A classe
UIé responsável por desenhar o estado atual no terminal, gerenciando janelas, cores (syntax highlighting), a barra lateral de arquivos e a disposição em abas ou divisão de tela (split view). - Event Loop: O editor captura entradas de teclado e mouse em tempo real, despachando comandos para o componente ativo (seja o editor de texto, a árvore de arquivos ou um plugin).
O Tasma possui uma arquitetura modular que permite estender suas funcionalidades sem alterar o código-fonte principal. O sistema de plugins é projetado para ser independente e desacoplado.
- Descoberta Automática: O
PluginManagerescaneia o diretórioplugins/na inicialização. Qualquer pasta ou arquivo Python válido é tratado como um plugin potencial. - Injeção de Contexto: O contrato principal é a função
register(context). O editor injeta um dicionáriocontextcontendo referências vivas para os subsistemas vitais:ui: Permite desenhar na tela, criar popups ou registrar painéis laterais (como visto no plugin de Chat IA).tab_manager: Permite abrir, fechar ou manipular arquivos programaticamente.global_commands: Permite que plugins registrem novos atalhos de teclado globais.config: Acesso às configurações do usuário.
Graças a esse design, plugins podem variar desde simples utilitários (como colorizadores de barra de status) até sistemas complexos que rodam em threads separadas (como o Tasmalive server) ou modificam o comportamento de renderização do editor (como a tela de boas-vindas welcome-tasma).
- Edição: Syntax highlighting, autocomplete, macros e múltiplos cursores.
- Navegação: Fuzzy finder, árvore de arquivos e abas.
- Visualização: Suporte a Split Vertical e Horizontal.
- Ferramentas: Linter integrado e terminal embutido (via plugins).
.gif)