# 通知設計書 7-doom-quit確認ダイアログ

## 概要

本ドキュメントは、Doom Emacsにおける`doom-quit`確認ダイアログ機能の設計を記載する。この機能は、Emacs終了時にユーザーにユーモラスな確認メッセージを表示する機能である。

### 本通知の処理概要

doom-quit確認ダイアログは、ユーザーがEmacsを終了しようとした際に、確認プロンプトを表示する機能である。Doom EmacsのUIモジュール（ui/doom-quit）として実装されている。

**業務上の目的・背景**：誤ってEmacsを終了してしまうことを防ぎ、特に未保存のバッファがある場合にユーザーに再確認を促す。Doom Emacsでは、DoomゲームやPortalなどからの引用を含むユーモラスなメッセージでこの確認を行い、ユーザー体験に遊び心を加えている。

**通知の送信タイミング**：`C-x C-c`（save-buffers-kill-terminal）や`M-x kill-emacs`などでEmacsを終了しようとした時点で確認ダイアログが表示される。

**通知の受信者**：Emacsを操作している現在のユーザー。ミニバッファでのy/n確認プロンプトとして表示される。

**通知内容の概要**：ランダムに選択されたユーモラスなメッセージと「Really quit Emacs?」という確認テキスト。例：「Please don't leave, there's more demons to toast! Really quit Emacs?」

**期待されるアクション**：ユーザーは`y`で終了を確認、`n`で終了をキャンセルする。

## 通知種別

アプリ内通知（確認ダイアログ / ミニバッファプロンプト）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（ブロッキング） |
| 優先度 | 高 |
| リトライ | 無 |

### 送信先決定ロジック

ミニバッファに確認プロンプトを表示。ユーザーの応答を待機する。

## 通知テンプレート

### 確認ダイアログの場合

| 項目 | 内容 |
|-----|------|
| 表示先 | ミニバッファ |
| 形式 | y-or-n-pプロンプト |

### 本文テンプレート

```
%s  Really quit Emacs?
```

例：
```
Please don't leave, there's more demons to toast!  Really quit Emacs?
```

### 添付ファイル

該当なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| quit-message | ランダム選択されたメッセージ | +doom-quit-messages変数 | Yes |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| コマンド実行 | kill-emacs | confirm-kill-emacs設定時 | Emacs終了コマンド |
| コマンド実行 | save-buffers-kill-terminal | confirm-kill-emacs設定時 | C-x C-c実行 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| ui/doom-quitモジュール無効 | モジュール未読み込み時は標準確認 |
| noninteractive | バッチモード時は抑止 |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[Emacs終了コマンド] --> B{confirm-kill-emacs設定?}
    B -->|No| C[即座に終了]
    B -->|Yes| D[+doom-quit-fn呼び出し]
    D --> E[ランダムメッセージ選択]
    E --> F[doom-quit-p呼び出し]
    F --> G[y-or-n-pプロンプト表示]
    G --> H{ユーザー応答}
    H -->|y| I[終了続行]
    H -->|n| J[終了キャンセル]
    C --> K[Emacs終了]
    I --> K
    J --> L[通常操作継続]
```

## データベース参照・更新仕様

### 参照テーブル一覧

該当なし（Emacs Lisp変数のみ使用）

### 変数参照詳細

| 変数名 | 用途 | 取得条件 |
|--------|------|---------|
| +doom-quit-messages | 終了メッセージリスト | ui/doom-quitモジュール読み込み時 |
| confirm-kill-emacs | 確認関数設定 | 常時参照可能 |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| なし | - | y-or-n-pは常に成功 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 該当なし |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 制限なし | 終了コマンドごとに1回表示 |

### 配信時間帯

制限なし

## セキュリティ考慮事項

- ユーザー確認のみで、機密情報は含まれない
- ローカル表示のみで外部送信はない

## 備考

- メッセージはDoomゲーム、Portal、およびカスタムメッセージから引用
- `+doom-quit-messages`変数でメッセージリストをカスタマイズ可能
- `confirm-kill-emacs`に`+doom-quit-fn`が設定される

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

終了メッセージリストを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/doom-quit/config.el` | +doom-quit-messages変数定義（3-30行目）を確認 |

**読解のコツ**: `+doom-quit-messages`はメッセージ文字列のリスト。ランダムに1つが選択される。

#### Step 2: エントリーポイントを理解する

+doom-quit-fn関数を確認。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/ui/doom-quit/config.el` | +doom-quit-fn関数定義（32-38行目）を確認 |
| 2-2 | config.el | `modules/ui/doom-quit/config.el` | confirm-kill-emacs設定（41行目）を確認 |

**主要処理フロー**:
1. **32行目**: `+doom-quit-fn`関数定義開始
2. **33-37行目**: `doom-quit-p`を呼び出し、メッセージをフォーマット
3. **35-36行目**: ランダムメッセージ選択とスタイル適用
4. **41行目**: `confirm-kill-emacs`に`+doom-quit-fn`を設定

#### Step 3: 確認処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | doom-ui.el | `lisp/doom-ui.el` | doom-quit-p関数の参照（161行目）を確認 |

**主要処理フロー**:
- **161行目**: `confirm-kill-emacs`に`doom-quit-p`を設定（デフォルト）
- ui/doom-quitモジュールでこれが`+doom-quit-fn`に上書きされる

### プログラム呼び出し階層図

```
save-buffers-kill-terminal / kill-emacs
    |
    +-- confirm-kill-emacs (#'+doom-quit-fn)
            |
            +-- +doom-quit-fn
                    |
                    +-- random (メッセージ選択)
                    |
                    +-- nth (メッセージ取得)
                    |
                    +-- doom-quit-p
                            |
                            +-- y-or-n-p (ユーザー確認)
```

### データフロー図

```
[入力]                    [処理]                          [出力]

終了コマンド ───────▶ confirm-kill-emacs判定
                              │
                              ▼
+doom-quit-messages ──▶ ランダム選択
                              │
                              ▼
                        +doom-quit-fn
                              │
                              ▼
                        doom-quit-p ──▶ ミニバッファプロンプト
                              │
                              ▼
                        ユーザー応答 ──▶ 終了/継続
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/doom-quit/config.el` | ソース | +doom-quit-messages/+doom-quit-fnの定義 |
| doom-ui.el | `lisp/doom-ui.el` | ソース | confirm-kill-emacsのデフォルト設定 |
