Ghostel.el - emulador de terminal para Emacs baseado em libghostty
(dakra.github.io)- Ghostel é um emulador de terminal para Emacs que usa o mesmo motor
libghostty-vtdo Ghostty, com um módulo nativo em Zig cuidando do estado do terminal, renderização e E/S de PTY local, enquanto o Elisp gerencia keymaps, buffers, comandos e processos remotos - Suporta os protocolos de teclado e gráficos do Kitty, hyperlinks OSC 8, consultas de cor OSC 4/10/11, saída sincronizada DEC 2026 e 5 modos de entrada, além de aplicar automaticamente integração de shell para bash, zsh, fish e nushell locais
- Suporta Emacs 28.1 ou superior e macOS, Linux, FreeBSD e Windows nativo, podendo baixar automaticamente módulos pré-compilados específicos por plataforma no primeiro uso, então uma instalação comum não exige toolchain Zig
- Em benchmark no Apple M4 Max com Emacs 32.0.50 processando saída de 1 MB, registrou Ghostel 75 MB/s, vterm 18 MB/s e eat 6.2 MB/s em ASCII comum, enquanto o PTY nativo absorveu uma tarefa
catde 10 MB em cerca de 110 ms - Também oferece terminal remoto via TRAMP, proteção para entrada de senha, imagens inline do Kitty e integração com compile, Eshell, Comint, Evil e métodos de entrada, mas há restrições de plataforma e protocolo para destinos remotos e processamento de imagens
Arquitetura e instalação
- O Ghostel foi inspirado no design em duas camadas do emacs-libvterm, mas usa o moderno motor VT do Ghostty em vez do libvterm
- O módulo em Zig cuida do estado do terminal, renderização, codificação de teclas, PTY local e leitura em segundo plano
- O Elisp fica responsável por keymaps, buffers, comandos, integração com projetos e processos remotos via TRAMP
- Os requisitos são Emacs 28.1 ou superior com suporte a módulos dinâmicos e macOS, Linux, FreeBSD ou Windows nativo
- Binários pré-compilados são fornecidos para
aarch64-macos,x86_64-macos,x86_64-linux,aarch64-linux,x86_64-freebsd,x86_64-windowseaarch64-windows - Outras plataformas ou compilação a partir do código-fonte exigem Zig 0.15.2
- Binários pré-compilados são fornecidos para
- Pode ser instalado via MELPA,
use-package :vcno Emacs 30 ou superior,:load-pathourequiremanual, e o terminal é aberto comM-x ghostel - Se o módulo nativo não estiver presente, a configuração
ghostel-module-auto-installsugere baixar ou compilar a partir do código-fonteM-x ghostel-download-modulebaixa o binário mínimo suportado e, com argumento de prefixo, permite escolher uma tag de releaseM-x ghostel-module-compilecompila o módulo comzig build- Se o diretório do pacote puder ser reinstalado,
ghostel-module-directorypode apontar para outro local
- A compilação a partir do código-fonte inclui o
vendor/emacs-module.hgerado, então normalmente não são necessários headers locais do Emacs;EMACS_INCLUDE_DIRouEMACS_BIN_DIRpodem ser usados para mudar a localização dos headers- O terminfo compilado
xterm-ghosttyestá incluído emetc/terminfo/e usa um formato portátil entre BSD e ncurses
- O terminfo compilado
Suporte ao Windows
- No Emacs nativo para Windows, executa terminais locais via ConPTY, e a arquitetura da DLL do módulo deve corresponder à arquitetura do Emacs, não à do Windows
- Junto com os módulos pré-compilados, baixa os arquivos de suporte
conpty.dlleOpenConsole.exe; se eles não existirem, usa como alternativa a API ConPTY nativa do Windows - Builds personalizados especiais do Emacs, como com CRT estático, têm suporte apenas em regime de melhor esforço
- O terminal TRAMP no Windows suporta apenas destinos remotos POSIX, o PTY existe no host remoto e o redimensionamento dinâmico da janela ainda não é suportado
5 modos de entrada
- O modo padrão semi-char envia a maioria das teclas ao terminal, mas mantém exceções como
C-c,C-x,C-u,C-h,M-x,M-:eC-\\no Emacs- Ele fornece teclas para enviar interrupção, suspensão e EOF, bracketed paste, limpar scrollback e navegar por prompts e hyperlinks
- O modo char envia todas as teclas ao terminal, sendo adequado para TUIs que usam
C-x,M-xeC-hpor conta própria, deixando apenasM-RETcomo tecla de escape - O modo Emacs continua recebendo a saída do terminal, mas torna o buffer somente leitura para permitir navegação padrão do Emacs, como
isearch,occur, marcação e cópia- A entrada normal não é enviada ao shell, e apenas colagens intencionais com
C-ysão transmitidas como bracketed paste
- A entrada normal não é enviada ao shell, e apenas colagens intencionais com
- O modo copy pausa as atualizações do terminal para permitir seleção, navegação e cópia estáveis
- No texto copiado, remove quebras de linha geradas por soft wrap
- Com o padrão
ghostel-readonly-fast-exit=t, entrada de caracteres ou cópia fazem o retorno automático à sessão normal do terminal
- O modo line não envia teclas imediatamente ao shell; em vez disso, edita uma linha no buffer do Emacs e a transmite de uma vez com
RET- Mesmo que chegue saída assíncrona ou um novo prompt, preserva um snapshot da entrada em edição e a reinsere depois
- Se houver OSC 133, usa os limites de prompt; caso contrário, encontra esses limites com
ghostel-prompt-regexp - Quando um TUI em tela cheia é iniciado, muda para o modo semi-char e retorna ao modo line após o encerramento do TUI
TABusa conclusão do comint e, opcionalmente, programmable completion do bash
- Arrasto do mouse, múltiplos cliques, ativação de marca e saída da posição de entrada ativa com
isearchouconsult-linemudam por padrão para o modo copy para proteger a seleção e a posição- Se um TUI tiver ativado rastreamento de mouse DEC, os eventos de mouse são enviados a esse programa no modo de entrada
- O comportamento de troca pode ser alterado com
ghostel-mouse-drag-input-mode,ghostel-mark-activation-input-modeeghostel-point-leave-input-mode
Recursos de terminal e renderização
- Por meio do libghostty-vt, oferece emulação VT completa, 256 cores e cores de 24 bits, alternate screen, vários estilos e cores de sublinhado, negrito, itálico, esmaecido, tachado, reverso, além de quatro formatos de cursor e piscagem
- O
TERM=xterm-ghosttypadrão e o terminfo incluído informam aos aplicativos recursos como saída sincronizada DEC 2026, teclado Kitty, true color, sublinhado colorido e reporte de foco- Com consultas OSC 4/10/11, um TUI pode obter a paleta e as cores de primeiro plano e fundo a partir das faces do Emacs
- A área de transferência via OSC 52 é suportada, mas vem desativada por padrão, então o terminfo incluído não anuncia o recurso
Ms
- O scrollback padrão é de 5 MB, cerca de 5.000 linhas, e é materializado em um buffer do Emacs, podendo ser pesquisado com
isearcheconsult-line - Além de hyperlinks OSC 8, detecta URLs HTTP e HTTPS comuns e caminhos de arquivo no formato
/path/file.el:42, transformando-os em links clicáveis - Suporta o codificador de teclas do Ghostty, o protocolo de teclado do Kitty, eventos de mouse SGR, eventos de foco DEC 1004 e arrastar e soltar de caminhos de arquivos e texto
- O renderizador pula linhas inalteradas, agrupa atualizações com timer e ajusta a taxa de quadros de forma adaptativa
- O eco do PTY que chega logo após pressionar uma tecla ignora o timer padrão de 33 ms e é renderizado imediatamente
ghostel-sync-themeresincroniza a paleta para combinar com o tema do Emacs
- As 16 cores ANSI são faces do Emacs que herdam de
term-color-*, eghostel-defaultpermite definir fonte, tamanho, primeiro plano e fundo específicos para o terminal
Integração com shell e chamada do Emacs
- Em bash, zsh, fish e nushell, configura automaticamente rastreamento de diretório via OSC 7, movimentação de prompt via OSC 133, rastreamento de título via OSC 2 e
ghostel_cmd- A própria integração de shell do nushell fornece OSC 7·133·2, e
ghostel.nuadicionaghostel_cmde um wrapper de terminfo para SSH de saída - O bash 3.2 embutido no macOS ignora
ENV, usado para injeção automática, então é preciso usar um bash mais recente ou carregarghostel.bashmanualmente
- A própria integração de shell do nushell fornece OSC 7·133·2, e
ghostel_cmd, que chama Elisp a partir do shell, usa uma extensão dedicada OSC 52;e e executa apenas funções presentes na lista de permissõesghostel-eval-cmds- As funções permitidas por padrão são
find-file,find-file-other-window,dired,dired-other-windowemessage
- As funções permitidas por padrão são
- Os bookmarks do Emacs salvam o diretório de trabalho do terminal e o nome do buffer
- Se já houver um buffer existente, ele será reutilizado; caso contrário, um novo shell será iniciado no diretório salvo
- O scrollback e o conteúdo da sessão não são salvos
Senhas, área de transferência e notificações
- Ao detectar prompts de senha de
sudo,ssh,gpg,passwdetc., abreread-passwde envia a resposta diretamente ao PTY, de modo que a entrada não fica emview-lossage, no histórico recente de teclas nem em macros de teclado- Localmente, verifica o modo canonical e a desativação de echo com
tcgetattr - Em shells remotos, usa detecção alternativa por regex apenas no remoto para reduzir falsos positivos em TUIs locais em modo raw
- Após o envio, a string da senha é imediatamente limpa com
clear-string - É possível adicionar fontes como auth-source, KeePass e pass em
ghostel-password-prompt-functions
- Localmente, verifica o modo canonical e a desativação de echo com
- Se o OSC 52 for ativado explicitamente, programas remotos poderão definir o kill ring do Emacs e a área de transferência do sistema, e a colagem será enviada como bracketed paste
- Notificações via OSC 9 e OSC 777 são encaminhadas para
ghostel-notification-function- O handler padrão usa alert se estiver instalado; caso contrário, usa
messagena área de echo
- O handler padrão usa alert se estiver instalado; caso contrário, usa
- O progresso via OSC 9;4 transmite estados
remove,set,error,indeterminate,pausee valores de 0 a 100- Há um indicador de texto padrão e um indicador animado baseado em spinner.el
Imagens inline do Kitty
- Suporta posicionamento direto e posicionamento por placeholder Unicode U+10EEEE do protocolo gráfico do Kitty, renderizando imagens de
timg,kitty +kitten icat,yazietc. - PNG é processado com o decodificador stb embutido, e dados RGB·RGBA·Gray·GrayAlpha são convertidos para PPM no módulo nativo, então não é preciso ImageMagick
- Responde a consultas de tamanho CSI 14·16·18
t, e a proporção de pixels físicos pode ser definida comghostel-cell-pixel-scale - O processamento de imagens tem as seguintes limitações
- O canal alfa não é composto, e sim removido, portanto não é adequado para bordas semitransparentes
- O recorte parcial source-rect do Kitty não é suportado e retorna erro explícito
- Vários posicionamentos virtuais no mesmo buffer compartilham uma única renderização, e o envio mais recente tem prioridade
- Por padrão, apenas base64 inline é permitido; arquivos, arquivos temporários e memória compartilhada precisam ser ativados explicitamente por segurança
- O limite padrão de armazenamento gráfico por terminal é 320MiB
TRAMP e terminfo remoto
- Se
default-directoryfor um caminho TRAMP, o shell será executado no host POSIX correspondente, e métodos TRAMP da família SSH e shells comodockerpodem ser definidos emghostel-tramp-shellslogin-shelldetecta o shell de login do usuário remoto comgetent passwd- O rastreamento de diretório via OSC 7 preserva o método, usuário e prefixos multi-hop do TRAMP existente
- Alvos remotos Windows não são suportados nesse caminho de shell·tty POSIX
- A integração de shell remoto não é injetada por padrão, e há duas abordagens disponíveis
- Com
ghostel-tramp-shell-integration=t, um script temporário é enviado e limpo ao encerrar - Em hosts permanentes, é possível instalar diretamente os scripts de
etc/shell/e, opcionalmente, o terminfo
- Com
- Se o remoto não tiver o terminfo
xterm-ghostty, a abertura do terminal pode falhar, eghostel-ssh-install-terminfocuida da instalação- A execução via TRAMP envia o terminfo para um diretório temporário pela conexão existente e o remove ao encerrar
- O
sshexecutado a partir do Ghostel local normaliza o alvo comssh -G, consulta o cache e, se necessário, executatic -x -com uma conexão adicional única - O hash do terminfo local é incluído na chave de cache, então é invalidado automaticamente quando o libghostty é atualizado, mas mudanças feitas separadamente no terminfo remoto não são detectadas
- Em
ssh HOST cmd, chamadas de opção sem host e casos em que não háinfocmplocal, a instalação é ignorada
- Se você não quiser modificar o host remoto, pode desativar a instalação automática e instalar o terminfo manualmente; se trocar
ghostel-termparaxterm-256color, essa configuração deixa de ser necessária, mas o caminho rápido de saída sincronizada específico do Ghostty também é perdido
Recursos de extensão do Emacs
- evil-ghostel sincroniza os estados insert·normal do Evil com o cursor do terminal
- Suporta mover, inserir, apagar, alterar, substituir, bracketed paste, undo do readline e formatos de cursor por estado
- Não afeta
vim,lessouhtopem alternate screen
ghostel-compileexecuta comandos em um PTY real enquanto fornece cabeçalho·rodapé no estilocompilation-mode, destaque de erros e navegação comnext-error- O padrão é navegação somente leitura, mas com argumento de prefixo também encaminha entrada interativa
- Mesmo durante a execução, é possível alternar entre entrada interativa e navegação de compilação com
C-c C-jeC-c C-eouC-c C-t ghostel-compile-global-modeenvia chamadas decompile,recompile,project-compileecompilation-startpara o Ghostelgrep-modemantém a implementação existente por padrão
ghostel-eshell-visual-command-modeexecuta comandos visuais do Eshell, comovim,htopeless, em um buffer Ghostel dedicado em vez determ-modeghostel-comint-modeprocessa fluxos de saída do comint comlibghostty-vt, oferecendo true color, vários tipos de sublinhado, links OSC 8 e atualização de diretório via OSC 7- Não é um terminal completo, então descarta posicionamento de cursor, alternate screen e redesenho de tela inteira, não sendo adequado para
htopouless
- Não é um terminal completo, então descarta posicionamento de cursor, alternate screen e redesenho de tela inteira, não sendo adequado para
ghostel-ime-modeapaga o resultado de métodos de entrada Elisp que inserem caracteres diretamente no buffer, como Hangul, e o envia ao PTY em UTF-8- Durante a composição do Quail, adia a renderização para evitar que o buffer sobrescreva a string em composição
Desempenho
- Em um Apple M4 Max com Emacs 32.0.50, ao enviar 1 MB por um pipe de processo real e manter cerca de 1.000 linhas de scrollback, os resultados foram os seguintes
- ASCII comum: Ghostel 75MB/s, Ghostel com detecção de links desativada 76MB/s, vterm 18MB/s, eat 6,2MB/s, term embutido 7,2MB/s
- Saída com muitas URLs: Ghostel 36MB/s, Ghostel com detecção de links desativada 78MB/s, vterm 15MB/s, eat 4,5MB/s, term 5,9MB/s
- A detecção de URL e caminho de arquivo roda em um timer consolidado fora do caminho de redesenho, então quase não tem custo em saídas normais, mas em saídas densas em links a taxa de processamento cai cerca de pela metade
- Para uma comparação justa, os números acima usam o caminho de processo do Emacs; o PTY nativo local padrão é cerca de 2x mais rápido em dumps grandes e contínuos porque uma thread em segundo plano do Zig lê a saída
- A mediana de 5 execuções de
catem um arquivo de 10 MB foi de cerca de 110 ms no Ghostel nativo, cerca de 220 ms no Ghostel via Emacs PTY, cerca de 550 ms no vterm e cerca de 1,8 s no eat- vterm e eat ocupam a thread principal do Emacs de forma síncrona durante a transferência, enquanto o PTY nativo do Ghostel faz o parsing em segundo plano e a UI continua responsiva
M-x ghostel-debug-typing-latencymede mínimo, mediana, p99 e máximo da latência por tecla de PTY, renderização e total
Diferenças em relação a vterm e eat
- vterm usa um módulo nativo em C baseado em libvterm, e eat é escrito em Elisp puro, o que o torna portátil sem build, mas com menor taxa de processamento
- Só o Ghostel oferece suporte a teclado e gráficos do Kitty, cinco tipos de sublinhado, OSC 8, OSC 4/10/11, notificações OSC 9 e 777, além de progresso OSC 9;4 e DEC 2026
- eat suporta imagens Sixel, mas não imagens Kitty, e vterm não suporta nenhum dos dois protocolos de imagem
- Ghostel e eat repassam eventos de mouse SGR para a TUI, enquanto o vterm usa cliques para mover o ponto no Emacs
- Ghostel e eat oferecem modo de linha, enquanto o vterm não
- Ghostel oferece tanto um modo de cópia em que a saída para quanto um modo Emacs em que a saída continua
- vterm oferece um modo de cópia estático, e o modo Emacs somente leitura do eat continua sendo atualizado
- Ghostel injeta automaticamente a integração com shell, enquanto vterm e eat exigem carregar scripts manualmente
- Prompts de senha são detectados automaticamente pelo Ghostel; eat oferece apenas um comando de envio manual, e vterm não intercepta a entrada separadamente
Arquitetura interna
- Em buffers locais, por padrão o Zig abre o PTY e cria o processo filho, depois envia a saída para
libghostty-vtem uma thread em segundo plano- Se for necessário um callback OSC ou redesenho, eventos Lisp são enviados pelo pipe do Emacs e processados por
ghostel--events-filter - Grandes volumes de saída não passam byte a byte pelo filtro de processo do Emacs
- Se for necessário um callback OSC ou redesenho, eventos Lisp são enviados pelo pipe do Emacs e processados por
- Em buffers TRAMP, o processo do Emacs recebe a saída e a entrega de forma síncrona ao mesmo modelo de terminal para preservar a criação remota e os file handlers
- A entrada de teclado passa pelo encoder do libghostty e é escrita imediatamente no PTY, enquanto a saída passa pelo parser VT e pela etapa de invalidação; se for eco interativo, atualiza na hora, caso contrário
Renderer.zigatualiza as linhas alteradas em um timer consolidado - A renderização do terminal modifica o buffer do Emacs por substituição de linhas, redesenho completo, redimensionamento com reflow e adição ou remoção de scrollback, então o renderer é responsável por preservar ponto, marca e posição da janela
- O Elisp decide políticas e intenção do usuário, como ir para o viewport ativo após entrada ou manter o estado de navegação em cada modo
- Tentar compensar mudanças do renderer com heurísticas do Elisp antes ou depois do redraw deve ser evitado, porque dificulta distinguir entre rolagem do usuário, compensação de redisplay, redimensionamento e reescrita de conteúdo
Testes e licença
- Os testes são baseados em ERT, e os testes em Elisp podem rodar sem o módulo Zig; os testes com a tag
nativeexigem o módulo compilado- Há alvos de Makefile para testes unitários em Zig, suíte completa de testes, testes da extensão Evil e benchmarks rápidos
- Bugs, pedidos de funcionalidade e pull requests são recebidos no repositório no GitHub; para problemas de renderização, são necessários comando de reprodução, escape sequence, versão do Emacs e informações da plataforma
M-x ghostel-debug-infopode ser usado para coletar eventos de diagnóstico- Ghostel é software livre distribuído sob a GNU GPL v3 ou posterior
3 comentários
Parece que a entrada em coreano não funciona.
Mesmo usando
Ctrl-\, o método de entrada parece mudar para coreano, mas, na prática, parece que só dá para digitar em inglês.É uma pena.
Opiniões no Lobste.rs
ghostel-projectSe já existir uma instância para o projeto, ele muda direto para ela, então alternar entre terminais fica muito rápido
vtermtem alguns pontos fracos, mas é muito bom poder usar os comandos do editor do mesmo jeito dentro do terminalQuando se fala de emuladores de terminal no Emacs, a resposta comum é que não precisa disso porque dá para usar
diredem vez decd/mv/ls/cp/rm/mkdr/...ecompileno lugar dos comandos de build. Mas, mesmo sem fazer tarefas complexas, o terminal ainda parece mais familiar e flexívelEspecialmente no Doom Emacs, eu gostaria de seguir algum guia que mostrasse como reduzir a dependência do terminal. Sempre acho impressionante ver alguém navegando rápido por projetos com configurações avançadas
vterm, e problemas no cálculo da altura das linhas às vezes bagunçam completamente a tela dojj, o que é bem frustranteNo fim, acabo deixando o Ghostty aberto ao lado, mas espero que um dia todas as ferramentas funcionem direito dentro do Emacs
eshellCom
eat-eshell, programas que precisam de emulação de terminal, como ferramentas de build e a CLI do Podman, além de aplicações TUI, funcionam direto no buffer doeshell, então isso muda o jogo para quem usaeshellcom frequênciaeshellseparadamente, já que isso também pode ser feito no terminal. Não uso muitoeshell, então muitas vezes sinto que estou deixando passar o propósito deleComentários do Hacker News
Sou o mantenedor principal do Ghostel. Eu e o baokaola íamos publicar um Show HN na semana que vem, mas alguém enviou o link antes
Para dar uma olhada rápida, o repositório no GitHub é mais prático: https://github.com/dakra/ghostel
O Ghostel é um emulador de terminal para Emacs baseado em libghostty-vt, e uma comparação de recursos com vterm e eat pode ser vista em https://dakra.github.io/ghostel/#ghostel-vs-vterm. Também há materiais comparando desempenho e precisão com imagens: https://gist.github.com/dakra/4a0b76ebcf5d52338e134864378465...
Pessoalmente, ele substituiu para mim não só vterm/eat, mas também terminais externos como kitty e Ghostty. Quando você trata o texto do terminal como um buffer comum do Emacs, surgem inúmeras possibilidades de extensão que outros terminais não têm. Até tarefas simples, como pesquisar no scrollback e depois navegar e copiar um parágrafo só com o teclado, ficam muito mais naturais e rápidas para usuários de Emacs
Se alguém usar o Ghostel e ainda assim mantiver um terminal externo, tenho curiosidade se isso é por falta de algum recurso ou porque prefere executar certos processos fora do Emacs. Também estou respondendo ativamente no GitHub, então, se houver problemas, por favor abra uma issue
f1para alternar entre modo semi-char e modo de cópia, e antes de executar um comando penso: “Tudo bem se o Emacs travar ou for encerrado à força?”. Se a resposta for não, executo em um terminal comumO Ghostel não é integrado nesse mesmo nível, e extensões como evil-ghostel-mode também têm limitações. Queria saber se há planos para melhorar isso ou se é uma limitação estrutural inevitável, e seria excelente ter algo equivalente ao eat-eshell-mode
O título precisa incluir Emacs. Um emulador de terminal genérico e um emulador de terminal para Emacs não são a mesma coisa
.elé a extensão de arquivos Emacs LispTroquei recentemente do vterm para o Ghostel, e no geral ele é muito melhor. É visivelmente mais rápido, a ponto de rodar corretamente até apps TUI chamativos que redesenham o terminal inteiro a cada frame, o tratamento de entrada é mais estável e a API em ELisp também é boa
Ainda assim, às vezes ele não limpa o terminal corretamente e ficam resíduos acima do prompt atual, ou trava completamente e eu preciso fechar o buffer e reiniciar. Para uso diário já é suficiente e o futuro parece promissor, mas para virar um produto maduro ainda precisa de correções de bugs e acabamento
Esse problema de resíduos na parte de cima da tela pode ser https://github.com/dakra/ghostel/issues/495, que foi corrigido na versão mais recente, embora também possa ser outro bug. A parte difícil é espelhar os dados internos do libghostty-vt em um buffer do Emacs e substituir apenas o que for necessário. Há testes baseados em propriedades para validar isso amplamente, mas às vezes algum problema escapa
Na release mais recente, o tratamento do ciclo de vida também foi melhorado, então alguns problemas podem ter sido resolvidos junto. Como ainda está em estágio inicial, a ideia é ir refinando aos poucos
Seria bom ver exemplos reais de uso eficiente dos diferentes modos de entrada. O terminal quer receber todas as teclas, enquanto o editor também quer usar teclas para seus próprios comandos, então um terminal embutido no editor inevitavelmente precisa de modos para alternar a posse do teclado
O
:termdo Neovim tem só dois modos, e sem entender por que o Ghostel tem cinco, é fácil achar que houve exagero no design. Na prática, ele é mais complexo porque resolve mais problemas, e os modos extras são ferramentas opcionais para tarefas que o nvim não cobre. Ainda assim, não está totalmente claro como aproveitar essa vantagem de forma eficiente no uso realEu estava tendo dificuldades com o vterm, testei o Ghostel e ele é excelente, então pode acabar virando meu terminal principal
Estou usando há mais de um mês, e gosto especialmente do recurso citado no resumo do Codex de clicar em referências de código e abri-las diretamente em buffers do Emacs
ghostel-previous-hyperlinkoughostel-next-hyperlinkUm mapa de repeat-mode também é instalado, então se houver três URLs ou links de arquivos na saída, muitas vezes dá para abrir o primeiro só com
C-c C-p p p RETA integração entre Ghostel e Claude Code aumentou muito meu uso de Emacs, e agora o Emacs virou o hub central do meu trabalho
Quando eu deixava uns 10 terminais abertos em algumas janelas, o Ghostty travava quase toda noite. Por isso nunca consegui usar o Ghostty direito, e também não gostaria de embuti-lo na ferramenta que uso todos os dias
Também executei
ls -lRno maior número possível de shells em um sistema de arquivos com milhões de arquivos, e não tive problemas nem travamentos. Uso pesado o dia inteiro, todos os dias, há meses, e nunca vi travamentos nem comportamento suspeitoParece bem provável que fosse um bug de alguma versão específica do Ghostty, ou alguma interação estranha com outro software, como driver de GPU. Aqui uso GPU da NVIDIA
Dizem que “os módulos nativos são binários pré-compilados e são baixados automaticamente no primeiro uso”, então fiquei curioso por que eles não são incluídos no pacote de distribuição
O jinx, um pacote popular que usa módulos nativos do Emacs, também oferece uma abordagem parecida com a do vterm, compilando no primeiro uso. Então, para oferecer uma instalação amigável em pacotes do Emacs, na prática só resta baixar ou compilar na primeira execução