본문으로 건너뛰기
피드

Ghostty 엔진을 Emacs 안으로 끌고 온 터미널, Ghostel.el

open-source 약 10분
vote
0
댓글
북마크

Ghostel.el은 Ghostty의 libghostty-vt를 기반으로 Emacs 안에서 동작하는 터미널 에뮬레이터다. eat 스타일의 여러 입력 모드, 안정적인 복사 모드, line mode, 자동 password prompt 처리, compile-mode 유사 실행 버퍼, Kitty graphics 지원, 높은 throughput을 앞세워 eat/vterm과 차별화함.

  • 1

    Ghostel은 semi-char, char, line, emacs, copy까지 5개 입력 모드를 제공함

  • 2

    copy mode는 터미널 출력을 멈춰 선택 영역이 streaming output에 밀려 사라지지 않게 함

  • 3

    password prompt를 감지해 read-passwd로 입력받고, 키 입력이 Emacs view-lossage나 recent-keys에 남지 않게 처리함

  • 4

    1MB 스트리밍 벤치마크에서 plain ASCII throughput 약 75MB/s로 vterm 약 18MB/s, eat 약 6MB/s보다 높았음

  • Ghostel.el은 Emacs 안에서 Ghostty 엔진을 쓰는 터미널 에뮬레이터임

    • 핵심 엔진은 Ghostty의 libghostty-vt이고, Emacs 패키지로는 eat.el 스타일의 입력 모드를 가져옴
    • 목표는 단순히 shell buffer 하나 더 만드는 게 아니라, 현대 터미널 기능과 Emacs 편집 UX를 같이 잡는 쪽에 가까움
  • 입력 모드는 5개로 나뉨

    • 기본값은 semi-char mode로, 대부분의 키는 터미널에 보내되 M-x, C-c 같은 일부 Emacs 키는 남겨둠
    • char mode는 모든 키를 터미널로 보내고 M-RET으로 빠져나옴
    • line mode는 M-x shell처럼 Emacs 버퍼에서 한 줄을 편집한 뒤 RET을 누를 때 한 번에 shell로 보냄
    • emacs mode와 copy mode는 버퍼를 일시적으로 읽기 전용 Emacs 버퍼처럼 다루게 해줌
  • copy mode의 포인트는 “출력이 계속 흘러도 선택 영역이 안 날아가게 하는 것”임

    • copy mode는 터미널 redraw를 멈춰서 선택한 텍스트가 안정적으로 유지됨
    • emacs mode는 읽기 전용이지만 live output은 계속 들어옴
    • 마우스로 드래그하거나 mark를 활성화하면 설정에 따라 자동으로 copy mode나 emacs mode로 전환됨

💡

> 터미널에서 로그가 계속 쏟아질 때 복사하려다 줄이 밀려 사라지는 경험이 많다면 Ghostel의 copy mode가 제일 체감될 기능임. 선택을 시작하는 순간 snapshot처럼 붙잡아두는 쪽에 가깝다.

  • line mode는 shell 입력을 Emacs 편집 대상으로 바꿔버림

    • M-b, M-DEL, C-y, 단어 전치 같은 Emacs 편집 키가 입력 중인 한 줄에서 동작함
    • RET을 누르면 bash가 한 번의 write로 전체 줄을 받고 echo 후 실행함
    • async output이나 새 prompt가 중간에 와도 snapshot/restore로 작성 중인 입력을 보존함
    • python3, irb, sqlite3 같은 REPL도 터미널 cursor를 입력 경계로 삼아 동작함
  • fullscreen TUI와 line mode가 충돌하는 상황도 처리함

    • vim, less, htop 같은 alt-screen TUI는 모든 키를 raw로 받아야 함
    • Ghostel은 TUI가 시작되면 line mode에서 semi-char로 내려가고, TUI가 끝나면 다시 line mode를 복귀시킴
    • tmux나 screen 안쪽 shell prompt에서 OSC 133 marker가 전달되면 그 prompt에서도 line mode에 직접 들어갈 수 있음
  • password prompt 처리가 꽤 세심함

    • sudo, ssh, gpg, passwd 등이 비밀번호를 요구하면 read-passwd를 띄워 입력받고 PTY로 보냄
    • 이때 키 입력이 Emacs의 일반 key pipeline을 지나지 않아서 view-lossage, recent-keys ring, keyboard macro recording에 남지 않음
    • primary signal은 slave tty가 canonical mode이면서 echo off인지 보는 libghostty식 heuristic이고, remote shell에서는 regex fallback도 씀
    • 전송 후 password string은 즉시 clear-string 처리해 heap에 오래 남지 않게 함
  • ghostel-compileM-x compile UX를 실제 TTY 위에 얹은 기능임

    • shell command를 ghostel buffer에서 실행하고 compilation-mode 스타일 header, footer, error highlighting, next-error navigation을 제공함
    • PTY 기반이라 isatty(3)를 확인하는 프로그램도 색상, progress bar, curses 동작을 일반 터미널처럼 처리함
    • 기본은 read-only buffer라 실행 중에도 output을 읽고 C-c C-c로 죽이는 compile-mode 감각을 유지함
    • prefix arg를 주면 interactive mode로 실행해서 htop, less, 입력을 요구하는 test runner도 다룰 수 있음
  • eat, vterm과 비교하면 Ghostel의 포지션이 꽤 분명함

    • eat은 순수 Emacs Lisp라 빌드 없이 어디서나 돌아가는 게 장점이지만 성능은 낮음
    • vterm은 CMake로 native dependency를 빌드하고 보수적인 VT220/xterm emulation 쪽에 가까움
    • Ghostel은 첫 실행 때 prebuilt module을 받거나 Zig로 빌드하고, 그 대가로 Ghostty 쪽 현대 터미널 기능을 가져옴
  • 기능 지원도 Ghostel 쪽이 공격적임

    • Kitty keyboard와 graphics protocol, 5가지 underline style, OSC 8 hyperlink, OSC 4/10/11 color query, DEC 2026 synchronized output을 지원함
    • inline image는 Ghostel이 Kitty graphics, eat이 Sixel로 지원하고 vterm은 지원하지 않음
    • mouse event는 Ghostel과 eat이 SGR protocol로 child program에 전달하지만, vterm은 Emacs point movement 쪽으로 intercept함
  • 성능 수치도 꽤 세게 제시됨

    • 1MB stream, 약 1,000 lines scrollback, Emacs 32.0.50 기준 plain ASCII throughput에서 Ghostel은 약 75MB/s를 기록함
    • vterm은 약 18MB/s, eat은 약 6MB/s, Emacs built-in term은 약 7MB/s 수준임
    • URL이나 path가 많은 출력에서는 clickable-link detection 비용 때문에 Ghostel 처리량이 대략 절반으로 줄지만 그래도 나머지보다 앞선다고 함

중요

> Ghostel의 장점은 “빠른 터미널” 하나로 끝나지 않음. 복사 안정성, line editing, password prompt, compile buffer까지 Emacs 사용자가 매일 겪는 터미널 마찰을 줄이는 쪽에 기능이 몰려 있음.

  • 단점이나 트레이드오프도 명확함
    • eat처럼 순수 Elisp가 아니라 native module 다운로드나 Zig 빌드가 필요함
    • unfamiliar TERM=xterm-ghostty 때문에 일부 build/test tool이 헷갈리면 xterm-256color로 바꿔야 할 수 있음
    • Ghostty/Kitty 계열 기능을 잘 활용하는 대신, Sixel만 뿜는 프로그램은 eat과 호환되는 방식으로 보이지 않을 수 있음

기술 맥락

  • Ghostel의 핵심 선택은 Emacs Lisp만으로 터미널을 만들기보다 Ghostty의 native VT 엔진을 끌어오는 거예요. 이렇게 하면 설치와 배포는 조금 복잡해지지만, Kitty protocol이나 synchronized output 같은 현대 터미널 기능을 한 번에 가져올 수 있거든요.

  • line mode가 재미있는 이유는 터미널 입력을 char stream으로 바로 보내지 않고 Emacs 버퍼 편집으로 한 번 감싸기 때문이에요. shell에는 최종 한 줄만 atomic하게 보내면서도 사용자는 Emacs의 이동, 삭제, yank, completion을 그대로 쓰는 구조라서 평소 편집 습관을 버리지 않아도 돼요.

  • password prompt 처리는 보안 UX 쪽 선택이에요. 일반 터미널처럼 키를 하나씩 보내면 Emacs 내부 기록에 남을 수 있으니, tty echo 상태와 remote prompt regex를 보고 별도 read-passwd 경로로 빼는 거예요.

  • ghostel-compile은 compile-mode와 terminal-mode 사이의 오래된 갈등을 줄이려는 기능이에요. 빌드 도구는 실제 TTY를 보고 색상과 progress를 내보내고, 사용자는 compilation buffer처럼 에러 이동과 재실행을 할 수 있으니 양쪽 장점을 섞은 셈이에요.

Emacs 터미널 쪽은 늘 ‘순수 Elisp의 이식성’과 ‘native module의 성능/기능’ 사이에서 갈렸는데, Ghostel은 Ghostty의 현대 터미널 기능을 Emacs UX와 꽤 공격적으로 섞는 쪽임. 특히 복사, line editing, password 처리처럼 매일 부딪히는 불편을 세밀하게 파고든 게 눈에 띔.

댓글

댓글

댓글을 불러오는 중...

open-source

빗썸에 상장된 임파서블 클라우드 네트워크, 웹3식 클라우드 인프라 표방

빗썸이 임파서블 클라우드 네트워크(ICNT)를 원화 마켓에 신규 상장했다. ICNT는 저장소, 컴퓨트, 네트워킹을 모듈형 탈중앙화 클라우드 인프라로 묶고, 토큰을 결제·보상·스테이킹에 사용하는 구조를 내세운다.

open-source

라즈베리 파이 5 기반 QuadRF, 벽 너머 와이파이와 하늘의 드론까지 잡아냄

QuadRF는 라즈베리 파이 5와 FPGA 보드를 엮은 휴대용 위상 배열 무선 장비로, 4.9~6GHz 대역의 RF 신호를 실시간으로 시각화한다. 제프 기얼링이 프로토타입을 테스트해 보니 5GHz 와이파이는 물론 DJI Mini Pro 4 드론까지 하늘에서 꽤 잘 잡아냈고, 라즈베리 파이의 MIPI 레인을 SDR 스트리밍에 활용한 점이 특히 흥미롭다.

open-source

고스트티 만든 미첼 하시모토가 말하는 터미널, 지그, 오픈소스의 진짜 문제

미첼 하시모토가 고스트티(Ghostty)를 만들게 된 이유, 터미널의 미래, 오픈소스 유지보수자의 책임, 지그(Zig)의 변화 철학을 길게 풀어낸 인터뷰다. 핵심은 터미널을 브라우저처럼 키우자는 게 아니라, 텍스트 기반 앱이 가진 자동화·조합성의 장점을 더 잘 살리는 프로토콜과 제품 철학이 필요하다는 얘기다.

open-source

AGIHALO, 오픈소스 개발자에게 LLM 크레딧 지원 프로그램 상시 운영

AGIHALO가 오픈소스 개발자를 대상으로 LLM 사용 크레딧을 지원하는 상시 그랜트 프로그램을 운영한다고 밝혔다. 개인 개발자, 초기 팀, 커뮤니티 프로젝트가 LLM 기반 기능과 실험을 비용 부담 없이 시도하도록 돕겠다는 취지다.

open-source

AI가 오픈소스를 망치는 중? 진짜 문제는 ‘슬롭’과 유지보수 번아웃

AI가 만든 저품질 코드와 스팸성 기여, AI 기반 취약점 탐색이 오픈소스 프로젝트 유지보수자들을 압박하고 있다는 내용임. Cal.com의 클로즈드 소스 전환, Godot·curl·Tailwind·Jazzband 등의 부담 사례가 언급되고, 일부에서는 오픈소스가 다시 폐쇄형 모델로 밀려날 수 있다는 우려도 나옴. 다만 Homebrew처럼 자동화로 대응하는 사례도 있어, 결론은 ‘오픈소스의 종말’보다는 기여 문화와 운영 모델의 재설계에 가까움.