WindowsでEmacsを使おうと思い、入れたは良いものの、試行錯誤があったので私なりのEmacsの事始めとしてまとめておきます。
私の環境
まずはハードウェア
- Processor AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz
- Installed RAM 40.0 GB (39.4 GB usable)
- System type 64-bit operating system, x64-based processor
OS
- Edition Windows 11 Pro
- Version 22H2
- Installed on 01/07/2023
- OS build 22621.1992
- Experience Windows Feature Experience Pack 1000.22644.1000.0
導入方法
3つの入れ方があると思います。
- WSLの中に入れる方法
- Windowsに直接インストールする方法
- MSYS2を介して入れる方法
WSLを使う
Good: Linuxの環境を使える
Bad: ATOK(あるいはその他のWindowsのIME)を使えない
WSLの中に入れる方法では完全なLinax環境を用意することができるので、完全にEmacsの期待した動作をしてくれます。デメリットは、WindowsのIMEを使うことができません。Google日本語入力以外のIMEになれてきた人は乗り換えなければならない。私はATOKを使ってきたのでmozcを入れてGoogle日本語入力を使うことなどできなかった。
Windowsに直接入れる
Good: ATOK(あるいはその他のWindowsのIME)を使える
Bad: プラグインが動かない
WSLを介するのがだめならWindawsに直接入れてしまえばいいという発想。バニラのEmacsを使う分には問題ないがEmacsのプラグインはLinaxのエコシステムを前提にしているため多くのプラグインで問題が発生しました。とくにinit.el
の管理をつかさどるleaf.el
の拡張であるleaf-convert
が使えないのに困ってしまった。ただでさえ敷居の高いエディターに移行したいのに環境設定でやる気をそがれていてはだめだということで今回は見送りました。
MYSYS2の上に構築
Good: ATOK(あるいはその他のWindowsのIME)を使える
Bad: 本物のLinuxの環境ではないため、不具合が出るかもしれない
Windowsの中でLinax
ATOKユーザーがEmacsを使う方法はこれしかないと思います。
結論
ということで結局Windows環境にEmacs公式が推薦しているMYSYS2を使い導入することにしました。
MYSYS2の導入
まずMYSYS2を導入する。
公式のインストールガイドに従うだけです。
- インストーラーをダウンロード
- 自分のマシンがWindows 8.1以上であり、64ビット環境であることを確かめる
- インストーラーを実行
- 何もいじらずNextを押し続ける
- MYSYS2 UCRT64が自動的に開かれる
- 次のコマンドを実行
$ pacman -S mingw-w64-ucrt-x86_64-gcc
:: Proceed with installation? [Y/n]
と聞かれるのでY
を押し、Enter
- 次のコマンドを実行
gcc --version
- エラーが出ず、gccのバージョンが表示されることを確認する
- Gitも導入しておく
$ pacman -S git
- 次のコマンドを実行
git -v
- エラーが出ず、gitのバージョンが表示されることを確認する
- MYSYS2 UCRT64を閉じる
インストールが終わるとWindowsのアプリ一覧に以下のアプリが追加されている。
- MYSYS2 CLANG64
- MYSYS2 CLANGARM64
- MYSYS2 MINGW32
- MYSYS2 MINGW64
- MYSYS2 MSYS
- MYSYS2 UCRT64
それぞれに設定されている環境変数が異なるが、基本的にMYSYS2 MINGW64を使えばよい。あまのじゃくな方は好きなものを使ってください。別に何か問題が起きるわけではないです。
Emacsのインストール
これもインストールガイドに従うだけです。
- MYSYS2 MINGW64を開く
- 以下のコマンドを実行する
pacman -S mingw-w64-x86_64-emacs
- Emacsがインストールされたことを確認する
emacs --version
以上です。
バージョンが正しく表示されなかった場合は、MYSYS2を開き直してください。また、MYSYS2 UCRTなどではEmacsを使えなかったのでご注意ください。私はMYSYS2 MINGW64でしか動作確認を行っていませんので、ほかの動作はわかりません。
これでemacs
コマンドでEmacsを起動できるようになった。
また、ウイルス対策ソフトを入れている方はEmacsを初めて起動するときにファイアウォールに関する警告が表示されますが、通信を許可してください。
Emacs設定ファイルの導入
~/.emacs.d/init.el
のような構造にすることが一般的です。
私の場合はC:\msys64\home\Yasun\.emacs.d
のように配置しました。
私はcanao3さんの作ったleaf.el
に任せている。導入は制作者本人のブログを参考にする。
以下がleaf.el
のGitHubリポジトリである。
canao3さんのブログから以下のコードを転載するが、結論としてはinit.elにこれを貼り付ければよい。
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see http://www.gnu.org/licenses/.
;;; Commentary:
;; My init.el.
;;; Code:
;; this enables this running method
;; emacs -q -l ~/.debug.emacs.d/{{pkg}}/init.el
(eval-and-compile
(when (or load-file-name byte-compile-current-file)
(setq user-emacs-directory
(expand-file-name
(file-name-directory (or load-file-name byte-compile-current-file))))))
(eval-and-compile
(customize-set-variable
'package-archives '(("org" . "https://orgmode.org/elpa/")
("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless (package-installed-p 'leaf)
(package-refresh-contents)
(package-install 'leaf))
(leaf leaf-keywords
:ensure t
:init
;; optional packages if you want to use :hydra, :el-get, :blackout,,,
(leaf hydra :ensure t)
(leaf el-get :ensure t)
(leaf blackout :ensure t):config
;; initialize leaf-keywords.el
(leaf-keywords-init)))
;; ここにいっぱい設定を書く
(leaf leaf
:config
(leaf leaf-convert :ensure t)
(leaf leaf-tree
:ensure t
:custom ((imenu-list-size . 30)
(imenu-list-position . 'left))))
(leaf macrostep
:ensure t
:bind (("C-c e" . macrostep-expand)))
(provide 'init)
;; Local Variables:
;; indent-tabs-mode: nil
;; End:
;;; init.el ends here
"Emacs入門から始めるleaf.el入門", canao3, https://qiita.com/conao3/items/347d7e472afd0c58fbd7, visited on 2023/07/21.
こちらもcanao3さんのブログからの引用です。
init.elのバイトコンパイル
init.elはEmacsの設定ファイルですが、Emacs lisp (Elisp)によって記述します。 Elispはバイトコンパイルすることによってバイナリを得ることができ、これはinit.elについても同様です。
バイトコンパイルによる実行速度への寄与は少ないですが、コンパイラのワーニング(未定義変数の参照、未定義関数の評価など)を受け取るためにもバイトコンパイルを行いましょう。 ただ、バイトコンパイルした.elc
ファイルとバイトコンパイル前の.el
ファイルは.elc
の方が優先度が高いので、init.elを編集した後は必ずバイトコンパイルを行うようにしましょう。
初回にはleaf
やhydra
のインストールが入るのでログが大量に流れます。
コンパイラのワーニングが見辛いようでしたらもう一度実行することをお勧めします。 多くのコンパイラと同じように、出力がなければワーニングやエラーなしで正常にコンパイルできたことを示します。
$ cd ~/.emacs.d
$ emacs --batch -f batch-byte-compile init.el
Importing package-keyring.gpg...
Importing package-keyring.gpg...done
Contacting host: elpa.gnu.org:443
Contacting host: elpa.gnu.org:443
Contacting host: melpa.org:443
Contacting host: orgmode.org:443
Package refresh done
Setting ‘package-selected-packages’ temporarily since "emacs -q" would overwrite customizations
Setting ‘package-selected-packages’ temporarily since "emacs -q" would overwrite customizations
Contacting host: melpa.org:443
INFO Scraping files for leaf-autoloads.el...
INFO Scraping files for leaf-autoloads.el...done
Checking /home/user/.emacs.d/elpa/leaf-20200817.1226...
...
Compiling /home/user/.emacs.d/elpa/blackout-20200404.1550/blackout-pkg.el...
Compiling /home/user/.emacs.d/elpa/blackout-20200404.1550/blackout.el...
Done (Total of 1 file compiled, 2 skipped)
$ emacs --batch -f batch-byte-compile init.el
"2020年代のEmacs入門", canao3, https://emacs-jp.github.io/tips/emacs-in-2020.html, visited on 2023/07/21.
パッケージのインストール
init.el
を開く。
package.el
の登録リストを更新。
M-x package-refresh-contents
leaf.el
でパッケージを管理したいので、;;ここにいっぱい書く
の上で以下のコマンドを実行する。
M-x leaf-convert-insert-template [package name]
バイトコンパイルをし、Emacsを開き直す。
このときパッケージのインストール処理が走るのでEmacsが重くなるが気長に待つ。
e. g. Ayuのインストール
私はエディターのテーマとしてAyuを以前から使っていたのでEmacsにも導入したいと思っていました。ということで、参考までに導入します。
- 誰かがAyuをEmacsに移植していないか調べる
- https://duckduckgo.com/?q=ayu-theme+emacs&atb=v385-4&ia=images
- Emacs用に作ってくれた人を見つけた
Melpa
With use-package macro:
(use-package ayu-theme
:config (load-theme 'ayu-dark t))
とあり、Melpaに登録されていることがわかった。つまり、package.el
のリストに載っているという意味であり、leaf.el
のleaf-convert
を使えば簡単に導入ができる。
- Emacsでinit.elを開く。
M-x package-refresh-contents
M-x leaf-convert-insert-template ayu-theme
- 出てきたコードを眺めて
:config (load-theme 'ayu-dark t)
がなかったので書き込む。括弧の中に書くことに注意。 - 保存した後、Emacsを閉じる。
- 以下のコードを実行してバイトコンパイルする。
- Emacsを開き、数秒間待っているとパッケージがインストールされる。