December 30, 2024

Emacs セットアップ (English)

最近エディターは、Vim と VSCode に乗り換えていたのだが、やはり Emacs が一番使いやすいと思い直し、再度セットアップを行ったのでメモ書き。

Emacs のビルド

Emacs の設定を行う elisp という言語は、後方互換を壊す変更が頻繁に行われる。 なので、自分でビルドする事でバージョンを固定してしまおう。

今回は 29.4 をビルドする。 以下、Debian 12 での手順である。(おそらく Ubuntu 24.04 でも、ほとんど同様にビルドできるはず)

# 必要なパッケージをインストール
$ sudo apt update
$ sudo apt install build-essential pkg-config libgnutls28-dev libtinfo-dev texinfo

# ソースコードを取得
# https://www.gnu.org/software/emacs/download.html の `nearby GNU mirror` から身近なミラーサイトを選ぶ
$ wget https://ftp.gnu.org/gnu/emacs/emacs-29.4.tar.xz
$ tar xvf emacs-29.4.tar.xz
$ cd emacs-29.4
$ ./configure --without-x
$ make
$ sudo make install

straight のセットアップ

Emacs のパッケージ管理は、straight というパッケージ管理システムを使うことにする。

詳細は 公式ドキュメント を参照。

以下の内容を ~/.emacs.d/init.el に追記する。

(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name
        "straight/repos/straight.el/bootstrap.el"
        (or (bound-and-true-p straight-base-dir)
            user-emacs-directory)))
      (bootstrap-version 7))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))
(setq package-enable-at-startup nil)

Copilot のセットアップ

次に、コーディングのためにパッケージ copilot を導入する。 多くのパッケージは straight で管理するだけで十分だが、copilotnodejs を必要としており、 かつ初期実行に色々と行う必要がある。

nodejsnpm のインストール

Debiannodejs はセキュリティーアップデートがされないため nvm でインストールするのが一般的だが、 今回は簡単のため apt でインストールする。

$ sudo apt install nodejs npm

copilot の設定

以下の内容を ~/.emacs.d/init.el に追記する。

(use-package copilot
  :straight (:host github :repo "copilot-emacs/copilot.el" :files ("*.el"))
  :ensure t)
(require 'copilot)

(add-hook 'prog-mode-hook 'copilot-mode)

(define-key copilot-completion-map (kbd "<tab>") 'copilot-accept-completion)
(define-key copilot-completion-map (kbd "TAB") 'copilot-accept-completion)

; (add-to-list 'copilot-major-mode-alist '("enh-ruby" . "ruby"))

最後の行は enh-ruby-modecopilot を有効にするための設定例である。 まあ、こんな設定が無くとも 'prog-mode-hook に追加してあるので大抵の言語で copilot が有効になるだろう。

copilot-server のインストールとログイン

最後に emacs 上で下記の様に実行し copilot-server のインストールとログインを行う。

  1. M-x copilot-install-server

  2. M-x copilot-login

すると emacsminibuffer に以下の様な文言が表示されるはずだ。 (バージョン等により、多少は異なるかもしれない。)

First copy your one-time code: ABCD-1234. Press Enter to continue.

ここで one-time code をコピーし、 Enter キーを押す。

すると、次に minibuffer に以下の様な文言が表示されるはずだ。

Please open https://github.com/login/device in your browser. Press ENTER if you finish authorizing.

上記 URL をブラウザで開き、 one-time code を入力する。 すると、ログインまで完了するだろう。

なお、login の URL は必ずしも emacs 実行中の PC のブラウザーで開く必要はない。 GUI をインストールしていない開発マシンにも、導入することが可能である。