読者です 読者をやめる 読者になる 読者になる

blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

msys2 を使用して Windows 10 に Emacs 25.0.94.2 (IMEパッチ適用) を導入した

Emacs

はじめに

 これまでは gnupack に Emacs 24.5 (NTEmacs) を導入し、利用してきた。これらはインストールのためにコマンド入力をする必要がなく、導入が比較的手軽なので、 Emacs を利用してみようという人にはおすすめしたい。

 とはいうものの、「Emacs 25.0」のアーカイブ | るびきち「日刊Emacs」 の記事に接するたび、Emacs 25 を利用してみたいと思っていた。そこで見つけたのが、Windows(MSYS2 MinGW64)でEmacs25+IMEパッチをビルド | Misohena Blogのページだ。このページの説明に従えば、Emacs 25 を動かすことができそうだと考えた。
 結果として Emacs 25 の導入に成功し、快適な開発環境を整えることができた。AutoHotkeyスクリプトを利用して、あたかも emacsclient を使っているかのような使い勝手を実現し、また日本語入力を有効にするためのウィンドウ操作処理も改善できた。
 今回は Emacs 25.0.94.2 のインストールの手順を詳しく説明する。

 

msys2 のインストール・更新

 Emacs 25.0.94.2 の導入は msys2 を利用して行う。そこで、msys2 のインストールと更新をまず行う。
 msys2 の公式サイトである MSYS2 installer にアクセスすると、インストーラーを入手できる。ここでは 64bit バージョンのインストーラーを利用することにしよう。このインストーラーを使ってインストールすると、 c:\msys64 にプログラム一式が設置される。
 次に msys2 自体を更新する。2016/07/24 現在では、MSYS2における正しいパッケージの更新方法 - Qiita の "2. pacman 4.2.1.6187以降がインストールされている場合" が妥当するので、プログラムメニューから "MSYS2 Shell" を選択し

update-core

を実行後、メッセージに従って Alt-F4 でプログラムを終了する。
 
改めて "MSYS2 Shell" を起動し、

pacman -Su

を実行すると、今度はプログラムを起動するためのショートカットの内容を書き換えるよう指示される。そこで、MSYS2の更新に伴う起動用ショートカットの修正 - Qiita の説明を参考にしながら、ショートカット3種類

のリンク先情報を改変する。

ショートカットの名称 改変後のリンク先
MSYS2 Shell C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\msys2_shell.bat
MinGW-w64 Win64 Shell C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\mingw64_shell.bat
MinGW-w64 Win32 Shell C:\Windows\System32\cmd.exe /A /Q /K C:\msys64\mingw32_shell.bat

これで msys2 の基本的な環境設定が終わった。

Emacs 25.0.94.2 インストールのためのパッケージをインストール

MSYS2 Shellを起動し

pacman -Sy
pacman -S base-devel \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-xpm-nox \
mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-giflib \
mingw-w64-x86_64-libpng \
mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-librsvg \
mingw-w64-x86_64-libxml2 \
mingw-w64-x86_64-gnutls

を実行する。

cmigemo をインストール

 about patches and how to build emacs on Windows. (Japanese) · GitHub の [cmigemo組み込み] の説明を参考にし、インストールする。cmigemoをインストールする場所を /usr/local とするならば、その説明を参考にし、

https://osdn.jp/projects/nkf/downloads/64158/nkf-2.1.4.tar.gz/
から nkf のソースを取得して

make
make install

http://www.kaoriya.net/software/cmigemo (https://github.com/koron/cmigemo)
から C/Migemoソースコードを取得して展開
ソーストップディレクトリに移動して

./configure --prefix=/usr/local
 make mingw-install

 このようにする。これで cmigemo のインストールが完了する。
cmigemo を Emacs に組み込むためには、後述するとおり、Emacs の configure 実行時にオプションを設定することになる。

Emacs 25.0.94.2 のインストール

Emacs ソースコードの入手とパッチ適用

 EmacsATOKgoogle 日本語入力を利用しようとするなら、IME パッチのバージョンに注目し、それに応じた Emacs を導入すること。導入しようとする Emacs のバージョンに対応する IME パッチが存在しない場合、任意の IME を使うことが難しくなるかもしれない。
 現在のところ、about patches and how to build emacs on Windows. (Japanese) · GitHubによれば、emacs-25.0.94 に対応する emacs-25.0.94-*.diff が IME パッチの最新バージョンだから、このバージョンを導入することにした。
 最初に、このパッチを任意の場所に保存しておく。
 emacs-25.0.94 (Emacs 25.1 のpretestバージョン)のソースコードのありかは、今月5月の Emacs 開発版向けメーリングリストに記載されているので、そこから入手する。

 圧縮ファイルを展開するには

tar Jxf emacs-25.0.94.tar.xz

と入力する。ここではCドライブの下のフォルダに Emacsのソースをおくとしよう。

展開後のトップディレクトリに上記のパッチを移し、

patch -b -p0 < emacs-25.0.94-x64.diff

と入力すれば、パッチが適用される。

MinGW64環境への切り替え

"MSYS2 Shell" を終了し、スタートメニューから "MinGW-w64 Win64 Shell" を起動する。

Emacs のインストール

/usr/local/bin に Emacs の実行バイナリを設置するには

./autogen.sh
  PKG_CONFIG_PATH=/mingw64/lib/pkgconfig \
  CFLAGS='-Ofast -march=corei7 -mtune=corei7' \
  ./configure --prefix=/C/**パッチ適用済みのemacsソースディレクトリ** CPPFLAGS=-I/usr/local/include --without-imagemagick
make -j8
make install prefix=/c/msys64/usr/local

このあと

/usr/local/bin/runemacs

と入力し emacs 25 が起動すればインストールは成功だ。 /usr/local/bin には初期設定では パスが通っているので、

runemacs

でも問題なく起動するはずである。

*.dllや*.exe等のコピー

about patches and how to build emacs on Windows. (Japanese) · GitHubの [DLLなどのコピー] の説明にならい、 /mingw64/bin/ 以下の*.dllと*.exeを /usr/local/bin 以下にコピーする(もちろんシンボリックリンクでもかまわない)。これで、"MSYS2 Shell" を経由しなくとも Emacs が起動可能になる(msys2 で emacs 25 をビルドして runemacs から起動しようとするけど起動しないのは dll 不足 (環境のせい) - あじーん-0.0.2-SNAPSHOT)。

cmigemo 関連ファイルのコピーと読み込みの設定


about patches and how to build emacs on Windows. (Japanese) · GitHubの [DLLなどのコピー] の説明にならい、

/usr/local//share/migemo/utf-8/

以下のファイルを

/usr/local/share/emacs/25.0.94/etc/migemo/utf-8/

にコピーする。

 いったんEmacsを起動しているならば、 ~/home/ユーザーディレクトリ/に .emacs.d ディレクトリが作成されているので(一度も起動していなければ、.emacs.d ディレクトリを作成すること)、IMEパッチ適用後のEmacsソースディレクトリ/site-lisp にある cmigemo.el をそこに移動する。
 そのうえで .emacs.d に init.el を作成し、そのinit.el に

(require 'migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs" "-i" "\a"))

;; Set your installed path
(setq migemo-dictionary
      (file-truename "~/../../usr/local/share/migemo/utf-8/migemo-dict"))

(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init)

 と書けば、migemo を使うことができる。

"MSYS2 Shell" を経由しない Emacs の起動

 この段階で、 c:/msys64/usr/local/bin/runemacs.exe を実行すれば、なるほどたしかに Emacs は起動する。だがしかし、msys2 にインストールしたプログラムを呼び出すことはできない。また、"MSYS2 Shell"経由で Emacs を起動すれば ~/.emacs.d/init.el を読み込む一方で、"MSYS2 Shell"を経由しなければ、c:/Users/以下の init.el を探そうとしてしまう。これは、 "MSYS2 Shell" 用の環境変数を利用できないために生じる問題である。
 この問題を解消するには、"MSYS2 Shell" 実行時と同様の環境変数を設定し、そのうえでrunemacs.exe を実行すればよい。私はバッチファイルを作成することにした。

@echo off 

setlocal
set msys64_directory=C:\msys64

set RUNEMACS=%msys64_directory%\usr\local\bin\runemacs.exe
set HOME=%msys64_directory%\home\%USERNAME%

set PATH=%msys64_directory%\usr\bin\core_perl;%PATH%
set PATH=%msys64_directory%\usr\bin\vendor_perl;%PATH%
set PATH=%msys64_directory%\usr\bin\site_perl;%PATH%

set PATH=%msys64_directory%\mingw64\bin;%PATH%

set PATH=%msys64_directory%\opt\bin;%PATH%
set PATH=%msys64_directory%\usr\local\bin;%PATH%
set PATH=%msys64_directory%\usr\bin;%PATH%

%RUNEMACS%

 このバッチファイルを実行すれば、"MSYS2 Shell" 経由の Emacs の起動と同様の環境が整う。

残された問題

 これで Windows 10Emacs 25 を導入することが一応はできた。だが、Emacs 25 を常用するには不十分な環境のままだ。ウィンドウを揺らしたりサイズを変更しなければ、IME を有効にできないし(スレッド gnupackフォーラム:windows 8での日本語入力について - gnupack - OSDNで触れられている問題がここでも生じている)、そして残念なことに、上記のバッチファイルのみでは、Emacs に外部からファイルのパスを渡してそれを編集させることは全くできない。
 次は、IME有効化のためのウィンドウ操作プログラムの導入手順を説明しよう。 emacsclient のような機能の設定、つまりファイル編集のたびに Emacs を新たに起動しないようにする設定の手順はその後で説明するつもりだ。