Se usas o terminal com frequência e sentes que o nano é básico mas o vim é demasiado — ou se trabalhas por SSH e gostavas de ter um editor com a fluidez do Sublime Text — o Alwide pode ser o que andavas à procura.
Alwide é um TUI IDE (editor de texto para terminal) escrito em C puro, com syntax highlighting via Tree-sitter e suporte LSP opcional. O autor descreve-o como “Sublime Text no terminal”. Depois de o testar no MacBook (incluindo compilar do fonte nativamente para ARM64), fica aqui o guia completo.
O Que É o Alwide
O Alwide é um editor de texto para terminal que se propõe a ser uma alternativa moderna entre o nano e o vim. Oferece uma experiência visual rica no terminal com suporte total a rato, abas, explorador de ficheiros, numeração de linhas e status bar — coisas que esperamos de um IDE gráfico mas que raramente encontramos num terminal.
Características principais:
- Zero learning curve: Suporte total a rato — click, drag-select, scroll. Funciona como um editor gráfico.
- Sublime-inspired: Inspirado na velocidade e fluidez do Sublime Text.
- Rápido e leve: Escrito em C puro. Arranca em milissegundos.
- Tree-sitter: Syntax highlighting de alta qualidade para 20+ linguagens.
- LSP opcional: Complecoes, hover docs e goto definition se instalares os Language Servers.
- Estado persistente: Abas, cursores, undo/redo preservados entre sessões.
- Código fonte limpo: O README diz que é “perfeito para educação ou curiosidade” — e é mesmo. O código é muito legível.
Linguagens Suportadas
C, C++, Python, Java, C#, Go, Rust, JavaScript, TypeScript, Dart, Lua, Bash, HTML, CSS, JSON, Markdown, VHDL, Assembly, LaTeX, INI, Makefile.
Se faltar alguma, podes adicionar editando o ficheiro de configuração.
Instalação
Linux (x86_64 / ARM64)
A forma mais simples:
curl -fsSL https://raw.githubusercontent.com/arnauda-gh/Alwide/main/install.sh | bash
Isto coloca o binário em ~/.local/bin/al e a configuração em ~/.config/alwide/.
macOS (compilar do fonte)
Não existem binários pré-compilados para macOS. Foi preciso compilar. O processo é simples mas requer algumas dependências:
Dependências:
- Xcode Command Line Tools (xcode-select --install)
- Homebrew ncurses (brew install ncurses)
- Rust/Cargo (via rustup)
- tree-sitter-cli (npm install -g tree-sitter-cli)
Passos:
# Clonar com submodulos (shallow para ser rapido)
git clone --recurse-submodules --shallow-submodules --depth 1 \
https://github.com/arnauda-gh/Alwide.git
cd Alwide
# Compilar release
export PKG_CONFIG_PATH="/opt/homebrew/opt/ncurses/lib/pkgconfig:$PKG_CONFIG_PATH"
make release
# Instalar binario
cp al ~/.local/bin/
# Instalar configuracao e assets
cp -r assets/* ~/.config/alwide/
Nix
nix develop
make release
./al
# Ou instalar:
nix profile install .
Primeiros Passos
Corre al no terminal. Vais ver:
- Um editor vazio com números de linha (gutter) à esquerda
- Uma status bar na parte inferior com o nome do ficheiro, linguagem, tamanho, e posição do cursor
- Abas no topo (quando abres mais que um ficheiro)
Para abrir um ficheiro:
al ficheiro.py
Interface
O Alwide tem vários componentes de interface:
- Editor window (EDW): A área principal onde editas o texto.
- File Explorer (FEW): Sidebar com a árvore de diretórios (Ctrl+E para alternar).
- Open Files (OFW): Lista de ficheiros abertos (Ctrl+L).
- Status/Diagnostics (SBW): Painel de diagnósticos (Ctrl+B).
- Popups: Search (Ctrl+F), Language selector, Quit dialog.
Atalhos de Teclado
Gerais
| Atalho | Ação |
|---|---|
| Ctrl+S | Guardar e auto-formatar |
| Ctrl+W | Fechar tab ativa |
| Ctrl+Q | Sair (com confirmacao se houver alteracoes) |
| Ctrl+Z | Undo |
| Ctrl+Y | Redo |
| Ctrl+F | Search / Find (preenche com selecao atual) |
| Ctrl+R | Format manual (via LSP) |
Navegação e Seleção
| Atalho | Ação |
|---|---|
| Setas | Mover cursor |
| Shift+Setas | Selecionar texto |
| Ctrl+Esq/Dir | Palavra anterior/seguinte |
| Ctrl+I/J/K/N | Navegacao alternativa (cima/esq/dir/baixo) |
| Home/Fim | Inicio/fim da linha |
| Ctrl+A | Selecionar tudo |
| Ctrl+U/P | Retroceder/avançar no histórico de cursores |
Edicao
| Atalho | Ação |
|---|---|
| Tab | Indentar |
| Shift+Tab | De-indentar |
| Ctrl+Backspace | Apagar palavra a esquerda |
| Ctrl+Delete | Apagar palavra a direita |
| Ctrl+D | Apagar linha atual |
| Ctrl+Shift+/ | Toggle comment na linha/selecao |
Janelas e Popups
| Atalho | Ação |
|---|---|
| Ctrl+E | Alternar File Explorer |
| Ctrl+L | Alternar Open Files |
| Ctrl+B | Alternar Status/Diagnostics |
| Ctrl+Space | Auto-completion |
| Escape | Fechar popup / limpar selecao |
Suporte a Rato
O rato funciona nativamente. Podes fazer tudo sem tirares as mãos do rato:
| Gesto | Ação |
|---|---|
| Click esquerdo | Posicionar cursor |
| Click + arrastar | Selecionar texto |
| Duplo click | Selecionar palavra |
| Ctrl+Click | Go to definition (LSP) |
| Ctrl+Hover | Hover docs (LSP) |
| Scroll | Scroll vertical |
| Shift+Scroll | Scroll horizontal |
| Botões laterais | Navegar historico de saltos |
| Click em tabs | Mudar de tab |
| Drag em tabs | Reordenar tabs |
| Duplo click no explorer | Abrir ficheiro |
| Click direito no explorer | Menu contextual |
Configuracao
A configuracao do Alwide vive em ~/.config/alwide/.
config
Ficheiro JSON simples que define o caminho padrão:
{
"default_path": "~/.config/alwide"
}
languages-features.json
É o ficheiro mais importante. Define como cada linguagem é detetada, editada e servida por LSP. Estrutura para cada linguagem:
{
"label": "Python",
"id": "python",
"detect": {
"extensions": [".py"],
"shebang": ["python"]
},
"comments": { "line": "#", "block": ["\"\"\"", "\"\"\""] },
"tabulation": { "size": 4, "space": true },
"pairs": [["(", ")"], ["{", "}"], ["\"", "\""]],
"lsp": { "exe": "pylsp", "arguments": ["-v"] }
}
Podes mudar o servidor LSP, o tamanho da tabulação, ou adicionar novas linguagens.
theme
Ficheiro de tema com cores RGB para cada token. Cada linha define a cor normal e a cor brilhante (usada em seleções) mais atributos opcionais:
@function (1000, 360, 341) (1000, 360, 341) ""
@keyword (882, 349, 1000) (882, 349, 1000) ""
@string (349, 964, 552) (349, 964, 552) ""
@comment (600, 600, 600) (1000, 1000, 1000) "i"
@type (992, 411, 752) (992, 411, 752) ""
@variable (341, 780, 1000) (341, 780, 1000) ""
@todo (1000, 698, 0) (1000, 698, 0) "i"
Os valores são RGB em escala 0-1000. O terceiro campo pode ter atributos como "i" (italic)
ou "b" (bold).
queries/
Ficheiros .scm (Tree-sitter query) para cada linguagem. São os padrões que o Tree-sitter usa
para fazer syntax highlighting. Exemplo de highlights-python.scm poderia conter regras como:
(function_definition name: (identifier) @function)
(call function: (identifier) @function)
LSP (Language Server Protocol)
O LSP no Alwide é opcional. Sem LSP, o editor funciona na mesma com syntax highlighting Tree-sitter, search, undo/redo, etc.
Com LSP ativado, tens: - Auto-completion: Sugestões contextuais (Ctrl+Space) - Hover docs: Documentação ao passar o rato (Ctrl+Hover) - Go to definition: Navegar para a definição de símbolos (Ctrl+Click) - Diagnósticos: Erros e warnings no painel lateral - Code actions: Ações de código (quando disponíveis) - Auto-format: Ao guardar ou com Ctrl+R
Servidores LSP por Linguagem
| Linguagem | Servidor | Instalação |
|---|---|---|
| C/C++ | clangd | apt install clangd |
| Python | pylsp | pip install python-lsp-server |
| Java | jdtls | eclipse-jdtls |
| Go | gopls | go install golang.org/x/tools/gopls@latest |
| JS/TS | typescript-language-server | npm install -g typescript-language-server |
| HTML/CSS/JSON | vscode-langservers-extracted | npm install -g vscode-langservers-extracted |
| Bash | bash-language-server | npm install -g bash-language-server |
| Markdown | marksman | marksman binary |
| Lua | lua-language-server | lua-language-server |
| C# | omnisharp | omnisharp |
| LaTeX | texlab | texlab |
| VHDL | vhdl_ls | cargo install rust_hdl |
| Assembly | asm-lsp | asm-lsp |
Arquitetura (para curiosos)
O código fonte está bem organizado e é bastante legível para um projeto em C:
src/
main.c — Entry point
core/
editor_init.c — Inicializacao do editor
editor_state.c — Estado global
editor_render.c — Renderizacao ncurses
editor_input.c — Processamento de input (teclado + rato)
editor_lsp.c — Integracao LSP
editor_destroy.c — Cleanup
editor_context.c — Contexto do editor
terminal/
term_handler.c — Manipulacao do terminal (ncurses)
key_management.c — Mapeamento de teclas
click_handler.c — Gestos de rato
kitty_protocol.c — Suporte a Kitty keyboard protocol
windows/ — Janelas (EDW, FEW, OFW, POW, TPW)
windows/popups/ — Popups (search, quit, notification, etc.)
advanced/
lsp/ — Cliente LSP completo
tree-sitter/ — Tree manager, query, highlighter
intelligence/ — Auto-pairs, search, comments, indentation
config/
config.c — Leitor de config JSON
language_feature.c — Parser de languages-features.json
data-management/ — File structure, UTF-8/16, state
io-management/ — IO, explorer, viewport history
utils/ — Tools, logger, clipboard
lib/
cjson/ — cJSON (submodulo)
tree-sitter/ — Tree-sitter C library (submodulo)
tree-sitter-*/ — Gramaticas individuais (Rust/Cargo)
Dependências externas: ncursesw, tree-sitter (C), cJSON.
Experiencia no MacBook
O Alwide não tem binários para macOS. Foi a primeira vez que alguém (que se saiba) o compilou nativamente para ARM64 Mac. O processo correu sem problemas:
git clonecom submodulos demorou cerca de 30s- As gramaticas Rust compilaram automaticamente via
cargo build --release - O binario final tem ~22MB (Mach-O 64-bit arm64)
- Corre nativamente no Terminal.app com suporte a rato
Pormenor interessante: todas as 20 gramáticas Tree-sitter são compiladas como bibliotecas Rust
.rlib e linkadas estaticamente. Isto explica porque o binário é maior que os 3MB anunciados
para a versão Linux (que usa gramáticas C).
Ao executar, o editor abre instantaneamente. A interface é limpa e responsiva. O suporte a rato funciona sem configuração adicional no Terminal.app.
Considerações Finais
O Alwide é um projeto promissor. Está claramente inspirado no Sublime Text e consegue trazer a mesma fluidez para o terminal. O facto de ser escrito em C puro (com gramáticas Rust) torna-o acessível a quem quer contribuir ou perceber como funciona internamente.
Não substitui o VS Code para trabalho pesado, mas para edições rápidas por SSH, configuração de servidores, ou quando queres um editor com qualidade sem abrir um IDE gráfico, é uma ferramenta a ter em conta.
Pontos fortes: rapidez, suporte a rato, LSP opcional, código limpo, instalação simples. A melhorar: pouca documentação ainda, temas limitados, atalhos fixos (sem customização por agora), falta suporte a splits e terminal integrado.
Projeto: github.com/arnauda-gh/Alwide Licenca: MIT
Comentários (0)
Nenhum comentário ainda. Seja o primeiro!
Deixar comentário