C++20으로 IntelliSense 스타일 셸 히스토리 도구 구축

발행: (2025년 12월 31일 오전 01:55 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

문제점: “검색” vs. “흐름”

우리는 모두 터미널 안에서 살아갑니다. 오랫동안 Ctrl + R이나 .zsh_history를 grep하는 방식에 의존했죠. Atuin 같은 도구가 SQLite와 동기화를 도입하면서 혁신을 일으켰지만, 제 작업 흐름에는 딱 맞지 않았습니다.

대부분의 최신 히스토리 도구는 검색 엔진처럼 동작합니다. 현재 작업을 멈추고, 단축키를 눌러 전체 화면 UI를 열고, 명령을 검색한 뒤 실행하죠. 마치 컨텍스트 전환을 하는 느낌입니다.

저는 IntelliSense와 같은 느낌을 원했습니다—즉:

  • 입력하면서 내가 원하는 것을 예측해 주는 것.
  • 내 상황을 이해해 주는 것(예: “나는 feature/login 브랜치가 있는 Git 저장소 안에 있다”).
  • 필요할 때만 나타나고, 그 외에는 방해하지 않는 것.

그래서 BSH (Better Shell History) 를 만들었습니다.

아키텍처

BSH는 로컬‑우선, 지연‑민감 쉘 히스토리 관리자이며, Zsh 라인 에디터(ZLE)에 훅을 걸어 매 키 입력마다 예측 오버레이를 업데이트합니다.

클라이언트‑데몬 모델

ComponentDescription
Daemon (bsh-daemon)C++20으로 작성된 백그라운드 프로세스. SQLite 데이터베이스(WAL 모드)와 libgit2를 이용한 Git 저장소 상태의 인‑메모리 캐시에 지속적으로 연결됩니다.
Client (bsh)가볍고 일시적인 바이너리. 각 키 입력을 직렬화해 Unix Domain Socket을 통해 데몬에 전송하고, 응답을 출력합니다.
InterfaceFTXUI를 사용해 TUI 오버레이를 렌더링합니다.

지연은 적이다가 큰 적입니다: 10 ms 정도의 지연도 무겁게 느껴지므로 목표는 그 이하입니다.


시도해 보시고 “IntelliSense” 방식과 기존 검색 방식 중 어느 쪽이 더 좋은지 의견을 공유해주세요!

Back to Blog

관련 글

더 보기 »