Skip to content

Emacs27 for Windows, 64bit build w/ Japanese IME support improvement

Notifications You must be signed in to change notification settings

mhatta/emacs-27-x86_64-win-ime

Repository files navigation

64bit版 GNU Emacs 27.1 for Windows(w/ IMEパッチ)

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 を実行してください。

init.elの設定

私は以下の設定で使っています。

  ;; 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も動作します。

MSYS2のインストール

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を適宜参照したほうがよいでしょう。

Emacsのソースコードをダウンロード

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 のように)するのがよいでしょう。

IMEパッチを当てる

本レポジトリから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とmake

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以下にインストールされます。

DLLのコピー

ビルドしたバイナリをMSYS2がインストールされていないマシンで使うには、MSYS2から必要なDLLをc:\emacs-27.1\bin以下にコピーして持っていく必要があります。このレポジトリにある msys2-dll-copy.sh を使うと良いでしょう。配付しているzipアーカイヴには必要なDLLを入れたつもりですが、抜けがあるかもしれませんので、その場合は自分でコピーしてください。DLLの依存関係に関しては、Dependency Walkerを使うと分かります。

おまけ C/Migemo

ローマ字で日本語のインクリメンタル検索ができる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のエラーでビルドできない

configureemacs 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では起こらない)。そもそも根本原因がよく分かりません…。

ewwでhttpsなサイトが開けない

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のままでも動くようなので、入れ替えていません。

ImageMagick7への対応

Emacsは26.3の時点でもImageMagick6までの対応で、バージョン7には対応していません。よってこのビルドにもImageMagickは組み込んでいません。

一応ImageMagick7に対応させるパッチは用意しましたが、思ったように動かないので、パッチのみの提供とします。興味のある方は試してみてください。

ちなみに、問題はEmacsではなく、MSYS2のImageMagick7がまともに動作していないことにあるようです。このあたりの議論を参照してください。なお、pdf-toolsを使うのにEmacs側のImageMagickサポートは必要ありません。

About

Emacs27 for Windows, 64bit build w/ Japanese IME support improvement

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages