sonomemo 0.1.1

A context logging terminal app designed for ADHD brains.
# sonomemo (์†Œ๋…ธ๋ฉ”๋ชจ) ๐Ÿง 


**sonomemo**๋Š” **ADHD๋ฅผ ์œ„ํ•œ ๋ฌธ๋งฅ ๊ธฐ๋ก์šฉ ํ„ฐ๋ฏธ๋„ ์•ฑ**์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ํ•„์š”ํ•ด์„œ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์„œ๋ธŒ๋ผ์ž„ ํ…์ŠคํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š”๊ฑด ์งˆ๋ ธ์Šต๋‹ˆ๋‹ค. ํด๋กœ๋“œ ์ฝ”๋“œ์—์„œ ์ผ ์‹œํ‚ค๋‹ค๊ฐ€ ์•ŒํŠธ ํƒญ์„ ๋ˆ„๋ฅด๋Š”๊ฒƒ๋„ ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๋ฏธ๋‚˜์ด์˜ ๋„์›€์„ ์ข€ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งŽ์ด ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

<img width="1510" height="704" alt="image" src="https://github.com/user-attachments/assets/ed5b56fd-57bb-4958-a17c-2853ed7c8d2b" />

## โœจ ์™œ ๊ตณ์ด ์ด๋Ÿฐ๊ฑธ?


- **๐Ÿง  ๋งŒ๋“  ์‚ฌ๋žŒ ๊ธฐ์–ต๋ ฅ์ด ๋ชจ์ž๋ž๋‹ˆ๋‹ค.**: ๋ฉ”๋ชจ๋ฅผ ์•ˆํ•˜๋ฉด ๋ณดํ†ต ๊นŒ๋จน์Šต๋‹ˆ๋‹ค. ์•ˆ๊นŒ๋จน๋Š”๋‹ค๊ตฌ์š”? ์ข€ ๋” ์ค‘์š”ํ•œ๊ฑธ ๊ธฐ์–ตํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ผํ•˜๋ฉด์„œ ๋ช‡์‹œ์ฏค์— ์ด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ตฌ๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”์ง€๊นŒ์ง€ ๊ธฐ์–ตํ•ด์•ผํ•  ํ•„์š”๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
- **๐Ÿ… ๊ฐ•์ œ ํ™˜๊ธฐ (๋ฝ€๋ชจ๋„๋กœ)**: ๊ธฐ๋Šฅ์ด ๋ญ๊ฐ€ ๋” ํ•„์š”ํ•˜์ง€ ์‹ถ์–ด์„œ ์ œ๋ฏธ๋‚˜์ดํ•œํ…Œ ๋ฌผ์–ด๋ดค๋”๋‹ˆ ์ด๋Ÿฐ๊ฑธ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๊ทธ๋ƒฅ ์žฅ๋‚œ๊ฐ ์šฉ๋„๊ฐ™๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
- **๐ŸŒฑ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ**: ๊นƒํ—ˆ๋ธŒ์˜ ์ž”๋””๋ฐญ ๋น„์Šทํ•œ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- **๐Ÿ“ ๋งˆํฌ๋‹ค์šด ๊ธฐ๋ฐ˜**: ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” `YYYY-MM-DD.md` ํ˜•์‹์˜ ๋กœ์ปฌ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งˆํฌ๋‹ค์šด์ผ ํ•„์š”๊ฐ€ ์žˆ๋Š”์ง„ ๋ชจ๋ฅด๊ฒ ์–ด์š”. ์ œ๋ฏธ๋‚˜์ด๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์งœ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.
- **โœ… ํ•  ์ผ ๋ฐ ํƒœ๊ทธ**: `- [ ]` ๋ฌธ๋ฒ•์œผ๋กœ ํ•  ์ผ ์ž๋™ ์ธ์‹, `#ํƒœ๊ทธ`๋กœ ๋ถ„๋ฅ˜. ํ•„์š”ํ•˜๋ฉด ์ ๋‹นํžˆ ๊ฒ€์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒŒ ์ œ์ผ ์ข‹์€๋“ฏ.

์ดํ•˜ ๋‚ด์šฉ์€ ์ „๋ถ€ ์ œ๋ฏธ๋‚˜์ด๊ฐ€ ์ ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์Šฅ ๋ณด๊ณ  ์ž˜ ์ผ๋„ค ์‹ถ์–ด์„œ ๋„ฃ์–ด๋†จ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์ด ๋ถ€์กฑํ•˜๋‹ค๋ฉด ์ด์Šˆ๋กœ ์˜ฌ๋ ค์ฃผ์„ธ์š”. ๊ทธ๋Œ€๋กœ ์ œ๋ฏธ๋‚˜์ด์— ๋„˜๊ธฐ๊ฒ ์Šต๋‹ˆ๋‹ค.

## ๐Ÿ—บ๏ธ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ (App Flow)


Sonomemo๋Š” ํ‚ค๋ณด๋“œ ์ค‘์‹ฌ์˜ 3๊ฐ€์ง€ ํ•ต์‹ฌ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

```mermaid
graph TD
    Start((Start)) --> Editing["๐Ÿ“ Editing Mode<br/>(์ž…๋ ฅ ๋ชจ๋“œ)"]
    
    subgraph Main Loop
        Navigate["๐Ÿงญ Navigate Mode<br/>(ํƒ์ƒ‰ & ๊ธฐ๋Šฅ ๋ชจ๋“œ)"]
        Editing
        Search["๐Ÿ” Search Mode<br/>(๊ฒ€์ƒ‰ ๋ชจ๋“œ)"]
    end

    subgraph Popups
        Pomodoro["๐Ÿ… Pomodoro"]
        Graph["๐Ÿ“Š Activity Graph"]
        Tag["๐Ÿท๏ธ Tag Filter"]
        Mood["๐ŸŽญ Mood Tracker"]
    end

    %% Transitions
    Editing -->|Esc| Navigate
    Navigate -->|i| Editing
    Navigate -->|?| Search
    
    Search -->|Enter| SearchResult["Result View"]
    SearchResult -->|Esc| Search
    Search -->|Esc| Navigate
    
    %% Popup Triggers
    Navigate -->|p| Pomodoro
    Navigate -->|g| Graph
    Navigate -->|t| Tag
    
    %% Popup Exits
    Pomodoro -->|Esc/Enter| Navigate
    Graph -->|Any Key| Navigate
    Tag -->|Esc/Enter| Navigate
    Mood -->|Enter| Navigate
    
    %% Initial Flow
    Start -.-> Mood
```

### 1. ๐Ÿ“ Editing Mode (์ž…๋ ฅ ๋ชจ๋“œ)

> **"์ƒ๊ฐ๋‚˜๋Š” ๊ฒƒ์„ ๋ฐ”๋กœ ์ ์œผ์„ธ์š”"**
- ์•ฑ์„ ์ผœ์ž๋งˆ์ž ๋งŒ๋‚˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.
- **Enter**: ๋ฉ”๋ชจ ์ €์žฅ
- **Shift + Enter**: ์ค„๋ฐ”๊ฟˆ (๋ฉ€ํ‹ฐ๋ผ์ธ ์ž…๋ ฅ)
- **Esc**: Navigate ๋ชจ๋“œ๋กœ ์ „ํ™˜

### 2. ๐Ÿงญ Navigate Mode (ํƒ์ƒ‰ ๋ชจ๋“œ)

> **"๊ธฐ๋ก์„ ํ›‘์–ด๋ณด๊ณ  ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜์„ธ์š”"**
- ํ™”์‚ดํ‘œ ํ‚ค(`โ†‘`, `โ†“`)๋กœ ์ด์ „ ๊ธฐ๋ก์„ ์Šคํฌ๋กคํ•ฉ๋‹ˆ๋‹ค.
- `i`: ๋‹ค์‹œ ์ž…๋ ฅ ๋ชจ๋“œ๋กœ ์ „ํ™˜
- `?`: ๊ฒ€์ƒ‰ ๋ชจ๋“œ ์ง„์ž…
- `t`: ํƒœ๊ทธ๋ณ„๋กœ ๋ชจ์•„๋ณด๊ธฐ
- `p`: ๋ฝ€๋ชจ๋„๋กœ ํƒ€์ด๋จธ ์„ค์ • (25๋ถ„ ๋“ฑ)
- `g`: ํ™œ๋™ ๊ทธ๋ž˜ํ”„ ํ™•์ธ

### 3. ๐Ÿ” Search Mode (๊ฒ€์ƒ‰ ๋ชจ๋“œ)

- ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๋ฉ”๋ชจ๋งŒ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
- `Esc`: ๊ฒ€์ƒ‰ ์ทจ์†Œ ๋ฐ Navigate ๋ชจ๋“œ ๋ณต๊ท€

## ๐Ÿš€ ์„ค์น˜ ๋ฐฉ๋ฒ•


### Crates.io๋ฅผ ํ†ตํ•œ ์„ค์น˜ (์ถ”์ฒœ)

Rust๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
```bash
cargo install sonomemo
```

### ์ง์ ‘ ๋นŒ๋“œ

```bash
git clone https://github.com/sonohoshi/sonomemo.git
cd sonomemo
cargo install --path .
```

## โŒจ๏ธ ๋‹จ์ถ•ํ‚ค ์š”์•ฝ


| ํ‚ค | ๋™์ž‘ (Navigate ๋ชจ๋“œ ๊ธฐ์ค€) |
|:--- |:--- |
| `i` | ์ž…๋ ฅ ๋ชจ๋“œ ์ „ํ™˜ (๋ฉ”๋ชจ ์ž‘์„ฑ) |
| `?` | ๊ฒ€์ƒ‰ ๋ชจ๋“œ ์ง„์ž… |
| `t` | ํƒœ๊ทธ ํ•„ํ„ฐ๋ง |
| `p` | ๋ฝ€๋ชจ๋„๋กœ ํƒ€์ด๋จธ ์„ค์ •/ํ•ด์ œ |
| `g` | ํ™œ๋™ ๊ทธ๋ž˜ํ”„(์ž”๋””) ํ™•์ธ |
| `q` | ์•ฑ ์ข…๋ฃŒ |

## โš™๏ธ ์„ค์ • (Configuration) (Optional)


Sonomemo๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ…์ŠคํŠธ ์„ค์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์‹คํ–‰ ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ์— `config.toml` ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์•ˆ๋‚ด ๋ฌธ๊ตฌ(Placeholder)์™€ ๋„์›€๋ง์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

**`config.toml` ์˜ˆ์‹œ:**
```toml
# Sonomemo Configuration


[placeholders]
navigate = "ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฐ์ข… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์„ธ์š”..."
editing = "์—ฌ๊ธฐ์— ๋ฉ”๋ชจ๋ฅผ ์ž…๋ ฅํ• ๊นŒ๋ง๊นŒ"
search = "๊ฒ€์ƒ‰ํ•˜๊ธฐ << ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด์ƒˆ์š”"

[help]
navigate = " [i] ์ž…๋ ฅ [t] ํƒœ๊ทธ [p] ๋ฝ€๋ชจ๋„๋กœ [g] ๊ทธ๋ž˜ํ”„ [q] ์ข…๋ฃŒ "
editing = " [Esc] ๋‚˜๊ฐ€๊ธฐ [Enter] ์ €์žฅ [Shift+Enter] ์ค„๋ฐ”๊ฟˆ "
search = " [Esc] ์ทจ์†Œ [Enter] ํ•„ํ„ฐ ์ ์šฉ "
```

## ๐Ÿ› ๏ธ ๊ธฐ์—ฌํ•˜๊ธฐ (Contributing)

์•Œ์•„์„œ ์ž˜ ํ•ด์ฃผ์‹œ๋ฉด ์ œ๋ฏธ๋‚˜์ดํ•œํ…Œ ๋„˜๊ธฐ๊ฒ ์Šต๋‹ˆ๋‹ค.

## ๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License (LICENSE ํŒŒ์ผ์„ ํ™•์ธํ•˜์„ธ์š”)