---
title: "Bash readline을 갈아엎겠다는 Rust 기반 라인 에디터, Flyline"
published: 2026-05-19T21:19:43.000Z
canonical: https://jeff.news/article/3012
---
# Bash readline을 갈아엎겠다는 Rust 기반 라인 에디터, Flyline

Flyline은 Bash에서 명령 입력을 처리하는 readline을 대체하려는 Rust 기반 플러그인이다. undo/redo, fuzzy history, 마우스 지원, AI 명령 작성, 동적 프롬프트 위젯, 향상된 탭 완성까지 한 번에 넣어 현대적인 쉘 입력 경험을 만들겠다는 프로젝트다.

## Bash 입력창을 통째로 현대화하려는 프로젝트

- Flyline은 Bash의 readline을 대체하겠다는 Rust 기반 플러그인임
  - Bash에서 명령을 입력할 때 키 입력, 커서 이동, 히스토리 탐색 같은 걸 처리하는 계층이 readline임
  - Flyline은 이 계층을 바꿔서 undo/redo, fuzzy history, syntax highlighting, text selection 같은 기능을 넣음
  - 비슷한 프로젝트로 ble.sh를 언급하지만, Flyline은 Rust와 ratatui.rs로 복잡한 터미널 UI를 그리는 쪽임

- 설치 방식은 Bash에 shared object를 builtin처럼 로드하는 구조임
  - 릴리스에서 `libflyline.so`를 받은 뒤 `enable -f /path/to/libflyline.so flyline`로 활성화함
  - Bash 4.4에서 `BASH_LOADABLES_PATH`가 도입됐고, Bash 5.2-alpha부터 기본값이 추가됐다는 설명도 포함돼 있음
  - 특정 시스템 경로에 설치하면 `enable flyline`만으로도 로드할 수 있음

- 기능 목록만 보면 쉘 프롬프트라기보다 작은 TUI 앱에 가까움
  - prompt animation, right prompt, 비동기 위젯, 툴팁, 마우스 지원, 커서 스타일과 애니메이션을 다룸
  - `PS1`, `RPS1` 또는 `RPROMPT`, `PS1_FILL` 같은 변수를 활용해 왼쪽/오른쪽 프롬프트와 채움 영역을 꾸밀 수 있음
  - 시간 escape sequence도 매 렌더마다 다시 평가해서 현재 시간이 계속 갱신되게 만들 수 있음

> [!IMPORTANT]
> Flyline의 핵심은 '예쁜 프롬프트'가 아니라 Bash 입력 루프 자체를 확장 가능한 UI 플랫폼처럼 바꾸려는 시도임.

## AI 명령 작성과 프롬프트 위젯

- AI 에이전트와 연결해서 자연어를 Bash 명령으로 바꾸는 기능도 들어감
  - 예를 들어 `ai: list files older than three days`처럼 버퍼에 적으면 에이전트가 Bash 명령으로 변환하는 식임
  - Alt+Enter로 현재 버퍼를 에이전트에 넘길 수 있고, 설정이 안 돼 있으면 설정을 도와주는 흐름도 있음
  - 제안된 명령은 syntax highlighting으로 보여주고, markdown 출력도 렌더링한다고 함

- 프롬프트 위젯은 꽤 세세하게 커스터마이즈 가능함
  - animation, mouse-mode, copy-buffer, custom, last-command-duration 타입을 만들 수 있음
  - custom 위젯은 shell command를 실행해서 출력값을 프롬프트에 넣을 수 있고, 기본은 non-blocking으로 이전 값을 보여주며 백그라운드에서 갱신함
  - blocking 모드도 있고, 500ms 같은 timeout을 걸어서 느린 명령이 프롬프트를 영원히 붙잡지 않게 할 수 있음

- 마우스 지원은 편하지만 터미널 세계답게 트레이드오프가 있음
  - disabled, simple, smart 세 가지 모드를 제공함
  - smart가 기본값이고, 스크롤하거나 viewport 위쪽을 클릭하면 마우스 캡처를 끄고 키 입력이나 포커스 복귀 때 다시 켬
  - 작성자는 마우스 캡처가 켜져 있는지 알 수 있게 mouse mode 위젯을 설정하라고 권장함

## 탭 완성과 히스토리도 꽤 공격적으로 건드림

- Bash 탭 완성을 단순 목록 표시보다 훨씬 풍부하게 만들려는 쪽임
  - 제안 목록에서 바로 fuzzy search를 할 수 있음
  - alias를 확장한 뒤 completion을 시도해서 `gc`가 `git commit` alias일 때도 `gc --verbo<Tab>`이 기대대로 동작하게 함
  - subshell, command substitution, process substitution 안에서도 completion을 지원한다고 설명함

- completion description도 터미널 UI답게 꾸밀 수 있음
  - 제안에 tab 문자가 들어 있으면 tab 뒤쪽을 설명으로 표시함
  - tab이 여러 개면 24fps로 frame을 애니메이션처럼 돌릴 수 있음
  - ANSI style도 description에 적용되고, 파일 completion 결과는 `$LS_COLORS`를 따른다고 함

- 히스토리 검색은 fzf나 skim 느낌을 Bash 안에 넣는 방향임
  - Ctrl+R로 fuzzy history search를 열 수 있음
  - 입력 중에는 최근 매칭 히스토리를 inline suggestion으로 보여주고, 커서가 끝에 있을 때 Right 또는 End로 수락함
  - Up 키로 현재 입력 prefix와 맞는 히스토리를 순회할 수 있고, Zsh history도 선택적으로 읽을 수 있음

## 터미널 호환성은 재미와 고통이 같이 온다

- VS Code 터미널 설정까지 따로 안내하는 걸 보면 키 입력 호환성이 중요한 프로젝트임
  - `terminal.integrated.macOptionIsMeta`로 Option 키를 Meta로 넘기라고 권장함
  - Kitty keyboard protocol 전달을 켜야 Flyline이 더 많은 키 이벤트를 받을 수 있음
  - cursor 아래 foreground 색이 바뀌는 걸 막기 위해 minimum contrast ratio 설정도 언급함

- Copilot이나 터미널 에뮬레이터와의 충돌 가능성도 직접 언급됨
  - 특정 설정에서는 Copilot이 터미널과 상호작용하지 못할 수 있다고 함
  - Command+키 조합은 터미널 에뮬레이터가 가로채는 경우가 많아서, Control+키로 매핑하거나 Kitty 확장 키보드 프로토콜을 지원하는 터미널을 쓰라는 식의 우회책을 제시함
  - OSC 133, OSC 633 escape code를 출력해 shell integration도 제공하며, 필요하면 끌 수 있음

---

## 기술 맥락

- Flyline이 readline을 건드리는 이유는 Bash의 기본 입력 경험이 요즘 개발자 기대치와 꽤 멀어졌기 때문이에요. undo/redo, fuzzy search, inline suggestion, 마우스 선택 같은 기능은 IDE나 Zsh 플러그인 환경에서는 익숙한데, 순정 Bash에서는 여러 도구를 붙여야 하거든요.

- Rust와 ratatui를 고른 건 단순 성능보다 UI 복잡도 때문으로 보여요. 프롬프트 안에서 목록, 설명, 애니메이션, 툴팁, 마우스 이벤트를 다루려면 문자열 치환만으로는 한계가 빨리 오거든요. 그래서 터미널을 작은 애플리케이션 화면처럼 다루는 TUI 라이브러리가 필요해져요.

- Bash 안에 `libflyline.so`를 로드하는 구조는 강력하지만 부담도 있어요. 같은 프로세스 안에서 동작하니 입력 루프를 깊게 바꿀 수 있지만, 충돌이 나면 그냥 외부 명령 하나가 죽는 게 아니라 쉘 경험 전체가 흔들릴 수 있거든요.

- 마우스 캡처와 Kitty 키보드 프로토콜을 다루는 것도 같은 맥락이에요. 더 많은 입력 이벤트를 받으면 기능은 좋아지지만, 터미널 에뮬레이터마다 지원 수준이 달라서 설정과 호환성 문제가 따라와요. Flyline이 VS Code 터미널 설정까지 길게 적어둔 이유가 여기에 있어요.

## 핵심 포인트

- Flyline은 Bash와 같은 프로세스 안에서 동작하는 readline 대체 플러그인이다
- Rust와 ratatui.rs로 복잡한 터미널 UI를 그린다
- AI 에이전트에 자연어 명령을 넘겨 Bash 명령으로 바꾸는 기능을 지원한다
- Bash 탭 완성, fuzzy history, inline suggestion, 마우스 이벤트, Kitty 키보드 프로토콜까지 다룬다

## 인사이트

쉘 커스터마이징을 여러 플러그인으로 이어 붙이는 대신, Bash 입력 경험 자체를 현대적인 TUI 앱처럼 바꾸려는 시도다. 다만 터미널 키 이벤트, 마우스 캡처, Copilot 같은 도구와의 충돌 가능성이 있어서 파워유저용 장난감이자 실험장에 가깝다.
