GNU Emacs 27.1を、Windows向けに64bitでビルドしたものです。公式のWindowsビルドの同等物に、いわゆるIMEパッチを当てています。よってストレス無く日本語入力できると思いますが、いきなり落ちたりする可能性もありますので、注意してお使いください。
26.3から日本語入力時に未確定文字のインライン表示ができるようになったので、ただ日本語が入力したいというだけであればパッチあては必要なくなったのですが、依然としてw32-ime.elは含まれていませんので一応バイナリを提供します。今後はtr-emacs-ime-moduleなどが進むべき道かもしれません…。
ダウンロードはこちらから。
Table of Contents
ダウンロードしたzipアーカイヴを展開し、emacs-27.1\bin\runemacs.exe
を実行してください。
私は以下の設定で使っています。
;; Windows IME
(setq default-input-method "W32-IME")
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
(w32-ime-initialize)
;; 日本語入力時にカーソルの色を変える設定
(add-hook 'w32-ime-on-hook '(lambda () (set-cursor-color "coral4")))
(add-hook 'w32-ime-off-hook '(lambda () (set-cursor-color "black")))
;; ミニバッファに移動した際は最初に日本語入力が無効な状態にする
(add-hook 'minibuffer-setup-hook 'deactivate-input-method)
;; isearch に移行した際に日本語入力を無効にする
(add-hook 'isearch-mode-hook '(lambda ()
(deactivate-input-method)
(setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook '(lambda () (setq w32-ime-composition-window nil)))
;; helm 使用中に日本語入力を無効にする
(advice-add 'helm :around '(lambda (orig-fun &rest args)
(let ((select-window-functions nil)
(w32-ime-composition-window (minibuffer-window)))
(deactivate-input-method)
(apply orig-fun args))))
ビルド方法は基本的にhttps://github.com/chuntaro/NTEmacs64を踏襲しています。大体一式で3~4GB程度の空き容量が必要のようです。なお、当方は64bit版の Windows 10 Pro 1909(Build 18363.1082)上でビルドしています。
なお、画像に関してはGIF, JPEG, PNG, SVG, TIFF, XPMに対応しています(後述しますが、ImageMagickは組み込んでいません)。27.1からはImageMagickに頼らない画像の操作に対応したようです。また、GNUTLSにも対応していますので、Emacs Lispで書かれたウェブブラウザewwも動作します。
Windows向けUnix開発環境のMSYS2が必要です。MSYS2 homepageからmsys2-x86_64-(日付).exe
をダウンロードしてインストールしてください。64bit用ですので、i686ではなくx86_64のほうです。
スタートメニューから「MSYS2 64bit」→「MSYS2 MinGW 64-bit」、あるいはc:\msys64\mingw64.exe
を実行してMSYS2のシェルを起動します。MSYS2はArch LinuxのパッケージマネージャであるPacmanを採用していますので、すでにインストールされているパッケージを$ pacman -Syu
でアップデートした上で、
$ pacman -S --needed 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-lcms2 \
mingw-w64-x86_64-jansson \
mingw-w64-x86_64-libxml2 \
mingw-w64-x86_64-gnutls \
mingw-w64-x86_64-zlib
を実行して開発に必要なパッケージを追加インストールします。Emacsのバージョンが上がるとたまに必要なパッケージが増えるので(たとえば26.1ではlcms2が追加された)、公式のINSTALL.W64を適宜参照したほうがよいでしょう。
MSYS2のシェルから$ wget http://ftpmirror.gnu.org/emacs/emacs-27.1.tar.xz
を実行してEmacsのソースコードをダウンロードし、$ tar xvf emacs-27.1.tar.xz
で展開します。c:\
の直下に展開(c:\emacs-27.1
のように)するのがよいでしょう。
本レポジトリからemacs-27.1-windows-ime-(日付).patch
をダウンロードし、
$ cd /c/emacs-27.1
$ patch -p1 < /path/to/emacs-27.1-windows-ime-(日付).patch
でパッチを当てます。その上で、$ ./autogen.sh
を実行してconfigure
スクリプトを更新してください。なお、このパッチはrzl24oziさんが整理してくださったものをベースにしています。
configure
を実行します。
$ CFLAGS='-O2 -march=x86-64 -mtune=generic -static -s -g0' LDFLAGS='-s' ./configure --prefix=/c/emacs-27.1 --without-dbus --without-compress-install
chuntaroさんのビルドではCFLAGSに-Ofast -march=x86-64 -mtune=corei7
を与えてコンパイルしていますが、このあたりの議論を見るとEmacsの場合は-O2
のほうがパフォーマンスが良いらしいので、-O2
に戻しました。なお、27.1からダイナミック・モジュールはデフォルトでサポートされるようになったので、--with-modules
は不要です。
configure
が終わったら、
$ make bootstrap; make install-strip
でc:\emacs-27.1
以下にインストールされます。
ビルドしたバイナリをMSYS2がインストールされていないマシンで使うには、MSYS2から必要なDLLをc:\emacs-27.1\bin
以下にコピーして持っていく必要があります。このレポジトリにある msys2-dll-copy.sh
を使うと良いでしょう。配付しているzipアーカイヴには必要なDLLを入れたつもりですが、抜けがあるかもしれませんので、その場合は自分でコピーしてください。DLLの依存関係に関しては、Dependency Walkerを使うと分かります。
ローマ字で日本語のインクリメンタル検索ができるC/Migemoは大変便利なツールですが、GitHubにある最新版の64bit Windows用バイナリがないようなので用意しました。ダウンロードはこちらから。適当なところ(たとえばC:\
)に展開した上で、C:\cmigemo-mingw64\bin
にPATHを通し、MELPAからmigemo(-el)
をインストールした上で、
(require 'migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "-e"))
(setq migemo-coding-system 'utf-8-unix)
(setq migemo-dictionary "C:/cmigemo-mingw64/share/migemo/utf-8/migemo-dict")
などと設定してやれば使えます。
このビルドに関して何かお気づきの点があれば、issuesで報告してください。
configure
でemacs does not support 'x86_64-pc-msys' systems
というようなエラーが出てビルドできない場合、WindowsのPATHがMSYS2に引き継がれておかしくなっている可能性があります。Windowsの環境変数でMSYS2_PATH_TYPE=inherit
を指定している場合は、一時的にinheritではなくstrictやnone(inherit以外なら何でもよい)にしておくと良いでしょう。
エラーや警告は出ないのにビルドが途中でフリーズしてしまう場合、アンチウイルスやランサムウェア対策のソフトウェアが悪さをしていることがあります。私の場合、Acronis Active Protectionが原因でした。Org-modeやAUC-TeXのような大規模なEmacs Lispパッケージをコンパイルする時も、一時的に膨大なファイルの書き込み、読み込みが行われるせいか、ランサムウェアと勘違いされて止められてしまうことがあるようです。これらはEmacsのビルドやパッケージのインストールの際には停止しておいたほうがよいでしょう。
以前のWindows 10の更新(1803?)で何かおかしくなったらしく、半角/全角キー等を押してIMEをオンにしようとしても日本語入力が有効にならないという問題が発生していました。一度マウスでEmacsのウィンドウを移動したり、リサイズすると直るようです。ここでの議論を参照してください。
どうやらWindowsのほうで何か直したらしく、1909以降ではこの問題は発生していません。
現在でも、Google日本語入力を使うと、日本語入力は普通にできるのですがウィンドウを動かしたりしないとサジェスト等が表示されないという問題があるようです(Microsoft IMEやATOK 2017では起こらない)。そもそも根本原因がよく分かりません…。
GNUTLS(libgnutls-30.dll)が3.6.3以降だと、ewwでhttpsなサイトが開けないようです。MSYS2のGNUTLSは2019年5月現在すでに3.6.7.1になっているので、GitlabのGNUTLSのサイトから落とした3.6.3のDLLに入れ替えてあります。
26.3以降ではMSYS2最新のGNUTLSのままでも動くようなので、入れ替えていません。
Emacsは26.3の時点でもImageMagick6までの対応で、バージョン7には対応していません。よってこのビルドにもImageMagickは組み込んでいません。
一応ImageMagick7に対応させるパッチは用意しましたが、思ったように動かないので、パッチのみの提供とします。興味のある方は試してみてください。
ちなみに、問題はEmacsではなく、MSYS2のImageMagick7がまともに動作していないことにあるようです。このあたりの議論を参照してください。なお、pdf-toolsを使うのにEmacs側のImageMagickサポートは必要ありません。