# 機能設計書 26-終了時の確認ダイアログ

## 概要

本ドキュメントは、Doom Emacsにおける終了時の確認ダイアログ機能の設計を記述する。この機能は、ユーザーがEmacsを終了しようとした際に、ゲーム「DOOM」シリーズや「Portal」シリーズからインスピレーションを得たユーモラスなメッセージを表示し、誤操作による意図しない終了を防止する。

### 本機能の処理概要

**業務上の目的・背景**：Emacsを長時間使用する開発者にとって、誤ってEmacsを終了してしまうことは大きな作業ロスにつながる。本機能は、終了確認ダイアログを表示することで、意図しない終了を防止する。また、DOOMシリーズの終了メッセージを再現することで、Doom Emacsのブランドアイデンティティを強化し、ユーザーに楽しい体験を提供する。

**機能の利用シーン**：`C-x C-c`（save-buffers-kill-terminal）、`M-x kill-emacs`、フレームの閉じるボタンクリックなど、Emacsを終了しようとするすべての操作時。

**主要な処理内容**：
1. `confirm-kill-emacs`フックへの登録
2. 終了メッセージリストからのランダム選択
3. `doom-quit-p`関数による確認ダイアログ表示
4. ユーザーの確認（y/n）に基づく終了処理の続行または中断

**関連システム・外部連携**：Emacsの終了フック（confirm-kill-emacs）との連携。

**権限による制御**：本機能は全ユーザーが利用可能であり、権限による制御は行わない。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 28 | Doom Quit | 主機能 | 終了確認メッセージ表示 |

## 機能種別

UI確認ダイアログ / 終了処理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| +doom-quit-messages | list | No | 終了時に表示するメッセージのリスト | 文字列のリスト |

### 入力データソース

- ユーザーの終了操作（C-x C-c、M-x kill-emacs等）
- +doom-quit-messagesリスト

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 確認メッセージ | string | ランダムに選択された終了メッセージ + "Really quit Emacs?" |
| ユーザー応答 | boolean | y（終了続行）またはn（終了中断） |

### 出力先

- ミニバッファ（確認ダイアログ）

## 処理フロー

### 処理シーケンス

```
1. ユーザーが終了操作を実行
   └─ C-x C-c、M-x kill-emacs等
2. confirm-kill-emacsフックが呼び出される
   └─ +doom-quit-fn関数の実行
3. メッセージのランダム選択
   └─ +doom-quit-messagesからの選択
4. doom-quit-pによる確認ダイアログ表示
   └─ メッセージ + "Really quit Emacs?"
5. ユーザー応答の処理
   └─ y: 終了続行、n: 終了中断
```

### フローチャート

```mermaid
flowchart TD
    A[ユーザーが終了操作] --> B[confirm-kill-emacs]
    B --> C[+doom-quit-fn呼び出し]
    C --> D[メッセージランダム選択]
    D --> E[doom-quit-p呼び出し]
    E --> F{ユーザー応答}
    F -->|y| G[終了続行]
    F -->|n| H[終了中断]
    G --> I[Emacs終了]
    H --> J[操作キャンセル]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-26-01 | ランダムメッセージ | +doom-quit-messagesからランダムにメッセージを選択 | 常時 |
| BR-26-02 | イタリック表示 | メッセージはイタリック体で表示 | 常時 |
| BR-26-03 | OS別メッセージ | Windowsの場合は"DOS"、それ以外は"UNIX"を表示 | メッセージ内のOS参照時 |

### 計算ロジック

- ランダム選択: `(nth (random (length +doom-quit-messages)) +doom-quit-messages)`

## データベース操作仕様

本機能はデータベース操作を行わない。

## エラー処理

### エラーケース一覧

エラーケースは特になし（シンプルな確認ダイアログのため）

### リトライ仕様

リトライ処理は実装されていない

## トランザクション仕様

該当なし

## パフォーマンス要件

- メッセージ選択は単純なランダム処理であり、パフォーマンス影響なし

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

- 終了確認により、意図しない終了によるデータロスを防止

## 備考

- メッセージはDOOMシリーズ、Portalシリーズ、その他のゲーム・文化からの引用を含む
- confirm-kill-emacsにnilを設定することで機能を無効化可能

---

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

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

### 推奨読解順序

#### Step 1: 設定全体を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/doom-quit/config.el` | メッセージリスト定義、終了確認関数、フック登録 |

**読解のコツ**: ファイルは42行と短いため、全体を一度に読むことが可能。`defvar`でメッセージリストを、`defun`で確認関数を、`setq`でフック登録を行っている。

**主要処理フロー**:
- **3-30行目**: `+doom-quit-messages` - 終了メッセージリストの定義
  - **4-11行目**: DOOM 1からの引用
  - **13-19行目**: Portalからの引用
  - **21-28行目**: カスタムメッセージ
- **32-38行目**: `+doom-quit-fn` - 確認ダイアログ関数
  - **33-34行目**: doom-quit-pによる確認ダイアログ表示
  - **35-36行目**: ランダムメッセージ選択とフォーマット
- **41行目**: confirm-kill-emacsへのフック登録

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

```
save-buffers-kill-terminal / kill-emacs
    │
    └─ confirm-kill-emacs
           │
           └─ +doom-quit-fn
                  │
                  ├─ random (メッセージ選択)
                  │
                  └─ doom-quit-p
                         │
                         └─ y-or-n-p (確認入力)
```

### データフロー図

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

終了操作 ───▶ confirm-kill-emacs ───▶ +doom-quit-fn
                                            │
+doom-quit-messages ───▶ random ───▶ メッセージ選択
                                            │
                                            ▼
                                      doom-quit-p
                                            │
                                            ▼
                                      ミニバッファ表示
                                            │
                                            ▼
ユーザー入力 ───────────────────────▶ 終了/継続判定
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/doom-quit/config.el` | ソース | メイン実装ファイル（全機能をこのファイルに含む） |
