Bubble Tea κΈ°λ° TUIμ Immutable ν¨ν΄μ νμ©ν μ€μκ° νν°λ§ μμ€ν μ€κ³
peektea narrows its gaze π filter-as-you-type and hidden files
AI μμ½
Context
ν°λ―Έλ μ¬μ©μ μΈν°νμ΄μ€(TUI) νκ²½μμ λλμ νμΌ λ¦¬μ€νΈλ₯Ό ν¨μ¨μ μΌλ‘ νμνκΈ° μν μ€μκ° νν°λ§ κΈ°λ₯μ νμμ± λλ. λ¨μν ν μ€νΈ μ λ ₯μ λμ΄ μ¨κΉ νμΌ ν κΈκ³Ό κ²μμ΄κ° κ²°ν©λ λ³΅ν© νν°λ§ μν κ΄λ¦¬ μ²΄κ³ κ΅¬μΆμ΄ μꡬλ¨.
Technical Solution
charmbracelet/bubblesλΌμ΄λΈλ¬λ¦¬μtextinputμ»΄ν¬λνΈλ₯Ό λμ νμ¬ Vim μ€νμΌμ νλ¨ μ»€λ§¨λ λΌμΈ μΈν°νμ΄μ€ ꡬνallEntriesμentriesλ‘ λ°μ΄ν° μ¬λΌμ΄μ€λ₯Ό μ΄μννμ¬ μλ³Έ λ°μ΄ν° 보쑴 λ° νν°λ§λ λ·°μ λΉ λ₯Έ λ λλ§ λ¬μ±withFilters()ν¨μλ₯Ό ν΅ν Composable Filter ꡬ쑰 μ€κ³λ‘ μ¨κΉ νμΌ μ¬λΆμ κ²μμ΄ μΌμΉ μ¬λΆλ₯Ό λ¨μΌ μ§μ μ μμ ν΅ν© μ²λ¦¬- Bubble Teaμ Immutable-update ν¨ν΄μ μ€μνμ¬ μν λ³κ²½ μλ§λ€ μλ‘μ΄ λͺ¨λΈ κ°μ λ°ννλ μμ ν¨μν μ λ°μ΄νΈ λ‘μ§ μ μ©
textinput.Blink컀맨λμ μ§μμ μΈ λ°ν λ° μ λ¬μ ν΅ν΄ TUI 컀μ μ λλ©μ΄μ μ μ€λ¨ μλ λ λλ§ λ³΄μ₯max(0, len(entries) - 1)μ°μ°μ ν΅ν νν°λ§ ν 컀μ μΈλ±μ€ λ²μ μ΄κ³Ό λ°©μ§ λ° UX μμ μ± ν보
μ€μ² ν¬μΈνΈ
1. μλ³Έ λ°μ΄ν°μ λ·° λ°μ΄ν°λ₯Ό λΆλ¦¬νμ¬ νν°λ§ μ°μ° μ μλ³Έ νΌμ λ°©μ§ λ° μ¬κ³μ° ν¨μ¨μ± κ²ν
2. λ€μ€ νν° μ‘°κ±΄ μ μ© μ κ°λ³ ν¨μλ³΄λ€ λ¨μΌ ν΅ν© νν° ν¨μ(`withFilters` λ°©μ)λ₯Ό ν΅ν μν μΌκ΄μ± μ μ§
3. TUI κ°λ° μ νλ μμν¬μ μ λ°μ΄νΈ μ¬μ΄ν΄(Cmd λ°ν λ±)μ μ νν μ΄ν΄νμ¬ μ λλ©μ΄μ λκΉ νμ λ°©μ§
4. μ¬μ©μ μ΅μν¨μ κ³ λ €ν Vim μ€νμΌμ λ¨μΆν€ λ° λ μ΄μμ λ°°μΉλ‘ νμ΅ κ³‘μ μ΅μν