Emacsでリアルタイム編集反映と差分表示

最近はWSL + OpenCodeでソフトウェア実装するときの環境について試行錯誤してます。

要件としては

  • CUIでエージェントに指令
  • 分割した別エリアでエディタを表示(できたら差分が分かる形で)

みたいにしたい。

現状の構成

まあVSCodeで良さそうなもんだけど、個人的な好みでCUIでやりたい。
で、とりあえず今は以下の構成

  • WezTerm(マルチプラットフォーム向けのRust製ターミナルソフト。画面分割表示ができる)
  • Emacs(WSLにインストール。CUI版をWezTerm内で使っている)

4ca4d3d8-9cd0-43f8-973f-4202eb30f07f
4ca4d3d8-9cd0-43f8-973f-4202eb30f07f

Emacsは私が使い慣れてるから使ってるだけです。久しぶりに使ったけど以外に指が覚えていた。
で、Emacsに diff-hl-modeを入れて差分表示され、ファイルの変更がリアルタイムに反映されるようにしている。
これによって、AIエージェントがファイルを変更するとリアルタイムに追加した行/削除した行がわかるというわけです。

WezTermの各窓での実行内容

  • 左: sbx run opencode
  • 右上: watch -n 1 --color 'git -c color.status=always status'
  • 右下: emacs -new <ファイル名>

Emacsの設定


;; Git差分を表示
(global-diff-hl-mode 1)

(unless (display-graphic-p)
  (diff-hl-margin-mode 1))

;; ファイルが書き換えられたらバッファを自動更新
(global-auto-revert-mode 1)
(setq auto-revert-use-notify t)

(diff-hl-flydiff-mode 1)

;; 新規ファイルも差分表示をさせる
(defun my-diff-hl-intent-to-add-untracked ()
  "Make an untracked visited file visible to Git diff."
  (when-let* ((file buffer-file-name)
              (root (locate-dominating-file file ".git")))
    (let ((default-directory root))
      (unless (= 0 (call-process
                    "git" nil nil nil
                    "ls-files" "--error-unmatch" "--" file))
        (call-process "git" nil nil nil
                      "add" "-N" "--" file)

        (when (bound-and-true-p diff-hl-mode)
          (diff-hl-update))))))

(add-hook 'find-file-hook #'my-diff-hl-intent-to-add-untracked)
(add-hook 'after-revert-hook #'my-diff-hl-intent-to-add-untracked)

WezTermの使い方

といっても私もあんまりわかってない。
とりあえず

  • 画面横分割は Ctrl-Alt-Shift-% 同時押し
  • コピー:Ctrl-Shift-C
  • ペースト: Ctrl-Shift-V
© 2025 Hiroe Tech Notes. All rights reserved.

コメント

まだコメントはありません。