TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 25 READS

체스 스킴으로 쓴 초소형 에디터 'e', 에맥스의 아이디어만 골라 담다

체스 스킴으로 쓴 초소형 에디터 'e', 에맥스의 아이디어만 골라 담다
SOURCE IMAGE · HACKER NEWS

에맥스(Emacs)는 수십 년간 확장 가능한 편집 환경의 대명사였지만, 그 방대함은 늘 양날의 검이었다. paveluv가 공개한 'e'는 이 딜레마에 대한 하나의 답을 제시한다. 체스 스킴(Chez Scheme)으로 작성된 이 콘솔 텍스트 에디터는 버퍼와 윈도, 킬 링(kill ring), 점진 검색, 그리고 스킴 최상위 환경(top level)을 갖춰 정신적으로는 에맥스를 닮았지만, 클론을 자처하지는 않는다. 개발자의 표현대로 '작게 남을 수 있는 아이디어만 빌려오고 거기서 멈춘' 도구다.

자기완결적 배포와 프로젝트 동봉

e의 배포 철학은 실무자에게 특히 흥미롭다. 홈 디렉터리에 ~/.e로 복제해 일상 에디터로 쓸 수도 있고, 프로젝트 안에 그대로 넣어(vendoring) 저장소를 클론하는 누구나 동작하는 에디터를 함께 갖도록 만들 수도 있다. 모든 설치본은 자기완결적이다. 로더는 스크립트 옆의 lib/만 엄격히 참조하고, 컴파일된 객체는 eo/에 로컬로 보관되며, 소스나 그것이 임포트하는 무언가가 바뀌면 자동으로 재컴파일된다. 특정 프로젝트에 넣은 lib/ 모듈은 그 프로젝트 안에만 머문다. 터미널 크기는 ioctl로 감지하고 리사이즈를 추적하며, 그것이 불가능하면 LINES와 COLUMNS 환경 변수로 지정한다. FreeBSD처럼 인터프리터 이름이 바뀐 환경에서는 셔뱅(shebang)을 조정하라는 안내도 로더 주석에 담겨 있다. 즉 실행 환경에 대한 가정을 최소화하고, 예외 상황의 우회로를 문서화해 둔 셈이다.

'자기인식'이라는 설계 원칙

e가 스스로를 '자기인식(self-aware)' 에디터라 부르는 근거는 도구가 자기 상태를 구조화된 데이터로 노출한다는 점에 있다. C-h k는 어떤 키가 무엇에 묶여 있는지뿐 아니라 그 바인딩의 출처와 맥락별 의미까지 설명하고, C-h f는 문서화된 함수를 완성형 자동완성과 함께 찾아 라이브러리·소스·산문 설명이 담긴 describe 버퍼를 연다. 이 페이지는 살아 있는 뷰라서, 키를 다시 묶으면 이미 열린 설명이 다음 화면 갱신에서 반영된다. 참조 문서 코퍼스는 R6RS(TSPL4 출처)와 체스 확장(체스 유저 가이드 출처)을 아우르는 약 1,400개 항목으로, M-x (fetch-describe-data!)를 한 번 실행해 curl로 내려받아 data/describe/에 두며 Git에는 포함하지 않는다. 스킴 버퍼에서 M-.은 커서 아래 심벌을 설명한다.

에디터의 로그 체계도 같은 철학을 따른다. 에코 영역은 로그의 일시적 꼬리에 불과하며, 지나간 모든 메시지는 나노초 단위 시각·컴포넌트·텍스트를 담은 구조화된 레코드로 log 버퍼에 남는다. log는 레코드로부터 즉석에서 렌더링되는 읽기 전용 뷰이고, (log-view 'eval)처럼 특정 컴포넌트만 걸러낸 뷰를 즉시 만들 수 있다. 진행 상황 메시지는 message-progress 파라미터 아래에서 같은 줄을 갱신해 열네 단계짜리 다운로드도 한 줄로 보이게 하되, 로그에는 매 단계가 모두 기록된다.

스킴에 특화된 편집과 표시

편집기의 강제 규칙은 오직 들여쓰기 하나뿐이다. 줄 안의 간격은 저자의 몫으로 남기고, 줄을 임의로 붙이거나 나누지 않는다. TAB은 현재 줄을 가장 가까운 정지 위치로 순환시키며 들여쓰고, indent-region!·format-buffer! 같은 명령은 한 번의 실행 취소 단위로 전체를 정리한다. 포매팅 엔진은 순수 (scheme-format) 라이브러리로 분리돼 셸에서 tools/scheme-format으로도, 표준 입력에서 표준 출력으로도 같은 처리를 제공한다. 흥미로운 시각화 기능도 있다. (pretty-scheme-clusters!)는 각 구문 종류의 괄호를 유니코드 짝(정의는 「 」, 람다는 ⸦ ⸧ 등)으로 표시하되 파일 자체는 평범한 ASCII로 유지한다. 깊이별로 글리프를 회전시키거나 무지개색을 입히는 형제 변형도 있다. 또한 표준 스킴이 모르는 심벌은 이탤릭으로, M-x 같은 평가 맥락에서 에디터 고유의 이름은 자주색으로 렌더링해 이름의 출처를 시각적으로 구분한다.

실무적 의미와 한계

안전성 측면에서 e는 편집·저장 전에 파일 내용을 비교하고 방문 경로를 정규화하며, 외부 변경을 조용히 덮어쓰지 않는다. 충돌이 있으면 덮어쓰기·다시 읽기·3자 병합을 상황에 맞게 제안하고 병합 보고서를 기록한다. 설정 파일 config.e는 라이브러리도 셔뱅도 없는 순수 스킴으로, 모든 표현식이 공개 API가 살아 있는 M-x 환경에서 평가된다. 시작 시 한 번, 그리고 모듈이 다시 로드될 때마다 다시 적용되므로 여러 번 로드돼도 견디도록 작성해야 한다.

다만 실무 도입을 고민하는 이라면 냉정한 조건도 함께 봐야 한다. e는 콘솔 전용이며 체스 스킴 런타임을 전제한다. 특화 기능 상당수—구문 인식 들여쓰기, 프리티 프린팅, 심벌 스타일링—는 스킴을 겨냥해 설계돼 다른 언어 사용자가 얻는 이점은 제한적이다. 문서 참조 데이터도 R6RS와 체스 확장에 국한된다. 결국 e는 범용 편집기라기보다, 스킴으로 작업하며 에디터 자체를 스킴으로 손보길 원하는 사용자를 위한 도구에 가깝다. 그럼에도 '자기완결적 배포', '구조화된 로그와 살아 있는 뷰', '순수 라이브러리로 분리한 포매터' 같은 설계 결정은 언어를 가리지 않고 도구를 만드는 이들에게 참고할 만한 사례를 남긴다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/paveluv/e
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...