# Doom Emacs 画面遷移図

Doom EmacsはEmacs Lispベースのテキストエディタフレームワークであり、従来のGUIアプリケーションとは異なる画面構造を持っています。「画面」はEmacsの「バッファ」「ウィンドウ」「モード」に相当し、これらは柔軟に組み合わせて使用されます。

## 全体遷移図

```mermaid
flowchart TB
    subgraph startup["起動フロー"]
        LAUNCH[Emacs起動] --> DASHBOARD[Doom Dashboard]
    end

    subgraph main_screens["メイン画面群"]
        DASHBOARD --> |ファイルを開く| BUFFER[バッファ/編集画面]
        DASHBOARD --> |プロジェクト選択| PROJECT_SELECT[プロジェクト選択]
        DASHBOARD --> |最近のファイル| RECENT_FILES[最近のファイル一覧]
        DASHBOARD --> |ブックマーク| BOOKMARKS[ブックマーク一覧]
        DASHBOARD --> |設定を開く| CONFIG[設定ファイル編集]

        PROJECT_SELECT --> BUFFER
        RECENT_FILES --> BUFFER
        BOOKMARKS --> BUFFER
    end

    subgraph file_navigation["ファイルナビゲーション"]
        BUFFER <--> |トグル| TREEMACS[Treemacs<br/>ファイルツリー]
        BUFFER <--> |トグル| NEOTREE[Neotree<br/>ファイルツリー]
    end

    subgraph completion_search["補完・検索"]
        BUFFER --> |M-x, C-x C-f等| VERTICO[Vertico<br/>ミニバッファ補完]
        BUFFER --> |M-x, C-x C-f等| IVY[Ivy<br/>ミニバッファ補完]
        BUFFER --> |M-x, C-x C-f等| HELM[Helm<br/>ミニバッファ補完]
        VERTICO --> |選択確定| BUFFER
        IVY --> |選択確定| BUFFER
        HELM --> |選択確定| BUFFER

        BUFFER --> |コード補完| CORFU[Corfu<br/>インライン補完]
        BUFFER --> |コード補完| COMPANY[Company<br/>ドロップダウン補完]
        CORFU --> |選択確定| BUFFER
        COMPANY --> |選択確定| BUFFER
    end

    subgraph workspace_management["ワークスペース管理"]
        BUFFER <--> |ワークスペース切替| WORKSPACES[Workspaces<br/>ワークスペース管理]
        WORKSPACES --> BUFFER
    end

    subgraph popup_windows["ポップアップウィンドウ"]
        BUFFER --> |ヘルプ表示| POPUP_HELP[ヘルプ<br/>ポップアップ]
        BUFFER --> |コンパイル| POPUP_COMPILE[コンパイル結果<br/>ポップアップ]
        BUFFER --> |ターミナル| POPUP_TERM[ターミナル<br/>ポップアップ]
        POPUP_HELP --> |閉じる| BUFFER
        POPUP_COMPILE --> |閉じる| BUFFER
        POPUP_TERM --> |閉じる| BUFFER
    end

    subgraph applications["アプリケーション"]
        BUFFER --> |カレンダー起動| CALENDAR[Calendar<br/>カレンダー表示]
        BUFFER --> |IRC起動| IRC[IRC Client<br/>チャット]
        BUFFER --> |RSS起動| RSS[RSS Reader<br/>フィード閲覧]
        BUFFER --> |音楽プレイヤー| EMMS[Music Player<br/>EMMS]

        CALENDAR --> |閉じる| BUFFER
        IRC --> |閉じる| BUFFER
        RSS --> |閉じる| BUFFER
        EMMS --> |閉じる| BUFFER
    end

    subgraph focus_mode["フォーカスモード"]
        BUFFER <--> |トグル| ZEN[Zen Mode<br/>集中モード]
    end

    subgraph exit_flow["終了フロー"]
        BUFFER --> |終了コマンド| QUIT[Doom Quit<br/>終了確認]
        QUIT --> |キャンセル| BUFFER
        QUIT --> |確定| EXIT[Emacs終了]
    end
```

## 画面カテゴリ別遷移詳細

### 1. ダッシュボード遷移

```mermaid
flowchart LR
    subgraph dashboard["Doom Dashboard"]
        BANNER[バナー表示]
        MENU[メニュー]
        FOOTER[フッター]
    end

    MENU --> |"Recent files"| RECENT[最近のファイル選択<br/>Vertico/Ivy/Helm]
    MENU --> |"Reload session"| SESSION[前回セッション復元]
    MENU --> |"Open project"| PROJECT[プロジェクト選択<br/>Projectile]
    MENU --> |"Open agenda"| AGENDA[Org Agenda]
    MENU --> |"Bookmarks"| BOOKMARKS[ブックマーク選択]
    MENU --> |"Private config"| CONFIG[ユーザー設定編集]
    MENU --> |"Documentation"| DOCS[ドキュメント表示]

    RECENT --> BUFFER[編集バッファ]
    SESSION --> BUFFER
    PROJECT --> BUFFER
    BOOKMARKS --> BUFFER
    CONFIG --> BUFFER
```

### 2. ファイルツリー遷移

```mermaid
flowchart TB
    subgraph file_tree["ファイルツリー"]
        direction TB
        TREEMACS[Treemacs]
        NEOTREE[Neotree]
    end

    BUFFER[編集バッファ] <--> |SPC o p| TREEMACS
    BUFFER <--> |SPC o n| NEOTREE

    TREEMACS --> |ファイル選択| BUFFER
    TREEMACS --> |水平分割で開く| BUFFER_H[バッファ<br/>水平分割]
    TREEMACS --> |垂直分割で開く| BUFFER_V[バッファ<br/>垂直分割]

    NEOTREE --> |ファイル選択| BUFFER
    NEOTREE --> |分割で開く| BUFFER_H
    NEOTREE --> |分割で開く| BUFFER_V
```

### 3. 補完システム遷移

```mermaid
flowchart TB
    BUFFER[編集バッファ] --> |M-x| COMMAND[コマンド入力]
    BUFFER --> |C-x C-f| FILE[ファイル選択]
    BUFFER --> |C-x b| BUF_SWITCH[バッファ切替]
    BUFFER --> |入力中| INLINE[インライン補完]

    subgraph minibuffer["ミニバッファ補完"]
        VERTICO[Vertico]
        IVY[Ivy]
        HELM[Helm]
    end

    subgraph inline_completion["インライン補完"]
        CORFU[Corfu]
        COMPANY[Company]
    end

    COMMAND --> VERTICO
    COMMAND --> IVY
    COMMAND --> HELM
    FILE --> VERTICO
    FILE --> IVY
    FILE --> HELM
    BUF_SWITCH --> VERTICO
    BUF_SWITCH --> IVY
    BUF_SWITCH --> HELM

    INLINE --> CORFU
    INLINE --> COMPANY

    VERTICO --> |選択/キャンセル| BUFFER
    IVY --> |選択/キャンセル| BUFFER
    HELM --> |選択/キャンセル| BUFFER
    CORFU --> |選択/キャンセル| BUFFER
    COMPANY --> |選択/キャンセル| BUFFER
```

### 4. ワークスペース遷移

```mermaid
flowchart TB
    subgraph workspaces["ワークスペース"]
        WS_MAIN[main<br/>メインワークスペース]
        WS_PROJECT1[Project A<br/>ワークスペース]
        WS_PROJECT2[Project B<br/>ワークスペース]
    end

    WS_MAIN <--> |切替| WS_PROJECT1
    WS_MAIN <--> |切替| WS_PROJECT2
    WS_PROJECT1 <--> |切替| WS_PROJECT2

    subgraph ws_main_buffers["main のバッファ群"]
        BUFFER_M1[バッファ1]
        BUFFER_M2[バッファ2]
    end

    subgraph ws_p1_buffers["Project A のバッファ群"]
        BUFFER_P1_1[バッファ1]
        BUFFER_P1_2[バッファ2]
    end

    WS_MAIN --- ws_main_buffers
    WS_PROJECT1 --- ws_p1_buffers
```

### 5. ポップアップウィンドウ遷移

```mermaid
flowchart TB
    BUFFER[編集バッファ]

    BUFFER --> |K or describe-key| HELP[*Help*<br/>ヘルプポップアップ]
    BUFFER --> |compile| COMPILE[*compilation*<br/>コンパイル結果]
    BUFFER --> |SPC o t| TERM[*doom:vterm*<br/>ターミナル]
    BUFFER --> |messages| MESSAGES[*Messages*<br/>メッセージログ]
    BUFFER --> |warnings| WARNINGS[*Warnings*<br/>警告]

    HELP --> |q or ESC| BUFFER
    COMPILE --> |q| BUFFER
    TERM --> |C-c C-k| BUFFER
    MESSAGES --> |q| BUFFER
    WARNINGS --> |q| BUFFER
```

### 6. アプリケーション画面遷移

```mermaid
flowchart TB
    BUFFER[編集バッファ]

    subgraph calendar_app["カレンダーアプリ"]
        CAL_MONTH[月表示]
        CAL_WEEK[週表示]
        CAL_DAY[日表示]
        CAL_DETAIL[詳細ポップアップ]

        CAL_MONTH <--> |M| CAL_WEEK
        CAL_WEEK <--> |W| CAL_DAY
        CAL_MONTH --> |RET| CAL_DETAIL
        CAL_WEEK --> |RET| CAL_DETAIL
        CAL_DAY --> |RET| CAL_DETAIL
    end

    subgraph rss_app["RSSリーダー"]
        RSS_LIST[記事一覧]
        RSS_ENTRY[記事詳細]

        RSS_LIST --> |RET| RSS_ENTRY
        RSS_ENTRY --> |q| RSS_LIST
    end

    subgraph irc_app["IRCクライアント"]
        IRC_SERVER[サーバーバッファ]
        IRC_CHANNEL[チャンネルバッファ]

        IRC_SERVER --> |JOIN| IRC_CHANNEL
        IRC_CHANNEL --> |PART| IRC_SERVER
    end

    BUFFER --> |calendar| CAL_MONTH
    BUFFER --> |elfeed| RSS_LIST
    BUFFER --> |circe| IRC_SERVER

    CAL_MONTH --> |q| BUFFER
    RSS_LIST --> |q| BUFFER
    IRC_SERVER --> |Q| BUFFER
```

## 視覚支援機能の状態遷移

```mermaid
stateDiagram-v2
    [*] --> Normal: バッファ表示

    state "通常表示" as Normal
    state "Zen Mode" as Zen
    state "インデントガイド表示" as Indent
    state "Gitガター表示" as Gutter
    state "ミニマップ表示" as Minimap

    Normal --> Zen: writeroom-mode
    Zen --> Normal: writeroom-mode OFF

    Normal --> Indent: indent-guides-mode
    Indent --> Normal: indent-guides-mode OFF

    Normal --> Gutter: diff-hl-mode
    Gutter --> Normal: diff-hl-mode OFF

    Normal --> Minimap: minimap-mode
    Minimap --> Normal: minimap-mode OFF

    note right of Zen
        集中執筆モード
        余計なUI要素を非表示
    end note

    note right of Gutter
        Git差分を行横に表示
        変更/追加/削除を色分け
    end note
```

## タブ・ウィンドウ管理

```mermaid
flowchart LR
    subgraph tab_bar["タブバー (centaur-tabs)"]
        TAB1[Tab: file1.el]
        TAB2[Tab: file2.el]
        TAB3[Tab: file3.el]
    end

    subgraph window_layout["ウィンドウレイアウト"]
        WIN_LEFT[左ウィンドウ]
        WIN_RIGHT[右ウィンドウ]
        WIN_BOTTOM[下ウィンドウ]
    end

    TAB1 --> WIN_LEFT
    TAB2 --> WIN_RIGHT

    WIN_LEFT <--> |C-w hjkl| WIN_RIGHT
    WIN_LEFT <--> |C-w hjkl| WIN_BOTTOM
    WIN_RIGHT <--> |C-w hjkl| WIN_BOTTOM

    WINDOW_SELECT[Window Select<br/>ace-window] --> WIN_LEFT
    WINDOW_SELECT --> WIN_RIGHT
    WINDOW_SELECT --> WIN_BOTTOM
```

## 備考

- Doom Emacsはモジュラー設計のため、使用するモジュールによって利用可能な画面が異なります
- 各画面（バッファ/モード）は独立しており、同時に複数のウィンドウで表示可能です
- 補完システム（Vertico/Ivy/Helm）は排他的であり、設定で1つを選択します
- ポップアップウィンドウは一時的な表示であり、主にESCキーまたはqキーで閉じます
