# 画面設計書 27-Doom Theme

## 概要

本ドキュメントは、Doom EmacsのDoom Theme機能の画面設計について記述します。Doom Themeは、Doom Emacsのビジュアルテーマシステムを提供し、doom-themesパッケージとsolaire-modeを組み合わせて統一感のある外観を実現します。

### 本画面の処理概要

Doom Themeは、Doom Emacsの特徴的なビジュアルスタイルを提供するテーマシステムです。doom-themesパッケージによる豊富なカラーテーマと、solaire-modeによるバッファの視覚的区別（ファイル編集バッファと一時バッファの明度差）を組み合わせて、美しく機能的なUIを実現します。

**業務上の目的・背景**：長時間のコーディング作業では、目に優しく集中しやすい視覚環境が重要です。Doom Themeは、Atom Editorの「One Dark」テーマにインスパイアされた配色を基盤とし、シンタックスハイライト、UI要素、フォント設定を統合的に管理します。また、solaire-modeにより編集中のバッファと補助的なバッファ（ヘルプ、コンパイル結果等）を視覚的に区別し、作業効率を向上させます。

**画面へのアクセス方法**：Doom Themeは自動的に適用されるため、明示的な画面アクセスは不要です。以下の方法でテーマを変更できます：
- `doom-theme` 変数を設定して起動時テーマを指定
- `M-x load-theme` でテーマを動的に切り替え

**主要な操作・処理内容**：
1. Emacs起動時に `doom-theme` 変数に設定されたテーマを読み込み
2. doom-themesパッケージがテーマを適用
3. solaire-modeがファイル編集バッファを明るく表示
4. org-modeなどの特定モードに最適化された設定を適用
5. フォント設定（doom-font、doom-big-font等）を適用

**画面遷移**：Doom Themeは独立した画面ではなく、すべての画面に適用されるビジュアル設定です。

**権限による表示制御**：権限による制御はありません。すべてのユーザーに同一のテーマが適用されます。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 24 | Doomテーマ・視覚スタイル | 主機能 | doom-themesによるテーマ管理 |
| 4 | UI 設定 | 補助機能 | フォント、フレーム設定 |

## 画面種別

テーマ設定（システム設定）

## URL/ルーティング

N/A（Emacsバッファ上で動作するため、URLの概念なし）

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 説明 |
|--------|----------|----------|------|
| doom-theme | 入力 | symbol | 使用するテーマ名（デフォルト: doom-one） |
| doom-font | 入力 | font-spec | デフォルトフォント |
| doom-big-font | 入力 | font-spec | doom-big-font-mode用フォント |
| doom-variable-pitch-font | 入力 | font-spec | variable-pitch-mode用フォント |
| doom-symbol-font | 入力 | font-spec | Unicode記号用フォント |
| pos-tip-internal-border-width | 入力 | integer | ポップアップの内部ボーダー幅 |
| pos-tip-border-width | 入力 | integer | ポップアップのボーダー幅 |

## 表示項目

### 利用可能なテーマ（一部）

| テーマ名 | 説明 |
|----------|------|
| doom-one | フラッグシップテーマ、Atom One Darkベース |
| doom-vibrant | doom-oneの鮮やかバージョン |
| doom-molokai | Textmateのmonokaiベース |
| doom-nova | Novaテーマベース |
| doom-one-light | doom-oneのライトバージョン |
| doom-peacock | Peacockテーマベース |
| doom-tomorrow-night | Tomorrow Nightテーマベース |

### solaire-modeの効果

| バッファ種別 | 表示 |
|-------------|------|
| ファイル編集バッファ | 通常より少し明るい背景 |
| 一時バッファ（ヘルプ、コンパイル等） | 通常の背景 |
| ポップアップバッファ | 通常の背景 |

## イベント仕様

### 1-テーマ読み込み

doom-load-themeフックでテーマが読み込まれます。

**処理フロー**：
1. Emacs起動時に `doom-theme` 変数を参照
2. 対応するテーマファイルを読み込み
3. `doom-load-theme` フックが発火
4. `doom-themes-org-config` でorg-mode統合を設定
5. `solaire-global-mode` を有効化

### 2-solaire-mode有効化

バッファ切り替え時にsolaire-modeがバッファの明度を調整します。

**処理フロー**：
1. バッファを開く/切り替え
2. solaire-modeがバッファ種別を判定
3. ファイル編集バッファの場合、明るい背景を適用
4. ポップアップバッファの場合も適切に処理

## データベース更新仕様

N/A（データベースを使用しない）

## メッセージ仕様

N/A（メッセージ表示なし）

## 例外処理

| 例外条件 | 処理内容 |
|----------|----------|
| TTYフレーム | solaire-modeの背景色調整が機能しない場合がある |
| デーモン経由のTTYフレーム | solaire-modeを無効化することを推奨 |
| nerd-iconsフォント未インストール | 一部アイコンが文字化け |

## 備考

- `nerd-icons-install-fonts` コマンドでアイコンフォントをインストール可能
- TTYユーザーはsolaire-modeを無効化することで表示問題を回避可能
- doom-themesは多数のテーマを提供、全リストはGitHubリポジトリを参照
- pos-tipのボーダー設定はツールチップの外観を調整

---

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

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

### 推奨読解順序

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

テーマとフォントの設定変数が中心です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/doom/config.el` | pos-tip設定とdoom-theme設定（行1-18） |

**読解のコツ**: `doom-theme` はEmacs起動前に `$DOOMDIR/config.el` で設定します。doom-fontsの設定も同様です。

#### Step 2: doom-themesパッケージを理解する

テーマパッケージの設定を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/ui/doom/config.el` | `use-package! doom-themes` ブロック（行8-18） |

**主要処理フロー**:
1. **行10**: `doom-load-theme` フックで `doom-themes-org-config` を実行
2. **行11**: `doom-theme` を `'doom-one` に初期化

#### Step 3: solaire-modeを理解する

ファイルバッファの視覚的区別機能を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | config.el | `modules/ui/doom/config.el` | `use-package! solaire-mode` ブロック（行21-23） |

**主要処理フロー**:
- **行22**: `doom-load-theme` フックで `solaire-global-mode` を有効化
- **行23**: `+popup-buffer-mode` フックで `turn-on-solaire-mode` を実行

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

```
Emacs起動
    │
    └─ doom-theme 読み込み
           │
           └─ doom-load-theme フック
                      │
                      ├─ doom-themes-org-config
                      │         │
                      │         └─ org-mode統合設定
                      │
                      └─ solaire-global-mode
                                │
                                ▼
                        バッファ表示調整
                                │
                    ┌───────────┴───────────┐
                    │                       │
                    ▼                       ▼
            ファイルバッファ          一時バッファ
            （明るい背景）          （通常背景）
```

### データフロー図

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

doom-theme ───▶ load-theme ───▶ テーマ適用
      │
      └─ 'doom-one

doom-font ───▶ set-face-attribute ───▶ フォント適用
      │
      └─ (font-spec :family "Fira Code" :size 12)

solaire-mode ───▶ バッファ判定 ───▶ 背景色調整
                        │
                        ├─ buffer-file-name → 明るい背景
                        └─ temp/special buffer → 通常背景
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/doom/config.el` | ソース | doom-themes、solaire-mode設定 |
| packages.el | `modules/ui/doom/packages.el` | 設定 | doom-themes、solaire-modeパッケージの依存定義 |
| README.org | `modules/ui/doom/README.org` | ドキュメント | モジュール説明書、テーマ/フォント設定例 |
