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

blechmusikの日記

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

gnupack に Emacs 24.4 (NTEmacs64) を導入することができた

Emacs

はじめに

 今月の初めに、gnupack に Emacs 24.4 の所謂 NTEmacs バージョンを導入しようとしたが、失敗に終わった。このことは以下のエントリーでまとめた。

 その後、 gnupack に Emacs 24.4 (NTEmacs64) を無事導入することができた。もっとも、様々なエラーに取り組みながら作業を進めざるをえず、すぐに Emacs 24.4 を利用できたわけではなかった。

 このエントリーではまず IMEパッチが適用された NTEmacs 64 を紹介し、それから gnupack を新規に導入したうえでに Emacs 24.4 (NTEmacs64) をインストールする手順を解説したい。

IMEパッチ適用済み NTEmacs 64 の公開

 今月になり、Emacs 24.4 向けのIME パッチがrzl24oziさんによって公開された。rzl24oziさんはEmacs 24.4 向けの IME パッチを以前から公開していたのだが、2ちゃんねるNTEmacsスレッドでのやりとりを受けて、改良したIME パッチを公開したのだ*1

 rzl24oziさんがEmacs 24.4 向けのIME パッチを公開すると、64bit 向けの NTEmacs 実行バイナリを配布してきた chuntaro · GitHub さんが、IMEパッチを適用した NTEmacs を公開し始めた。chuntaroさんは今ではAMD向けにビルドした NTEmacs と それ以外の CPU 向けにビルドした NTEmacs の両方を公開している。

 これから説明する手順では、chuntaroさんがビルドし配布している NTEmacs64 を gnupack に導入する。

gnupack の導入とconfig.ini の書き換え、そして NTEmacs 64 の設置

 gnupack を新たに導入し、その gnupack に NTEmacs 64 を導入してみよう。gnupack のプログラムである "gnupack_basic-11.00.exe" は ダウンロードファイル一覧 - gnupack (cygwn + emacs package) - SourceForge.JP から入手可能である。 以下ではgnupack の設置場所を gnupack/ として説明しよう。

 Emacs24.4フォルダから Emacs の実行プログラムを動作するように設定するよう、gunpack/config.ini を編集する。

[SetEnv]
;    EMACS_DIR      = %INST_DIR%\app\emacs\emacs
    EMACS_DIR      = %INST_DIR%\app\emacs\emacs-24.4

 そして、 chuntaro/NTEmacs64 · GitHub の "emacs-24.4-IME-patched.zip" を入手し、展開したファイルを gnupack/app/emacs/emacs-24.4 に置く。

gnupack/home/.emacs.d/init.el の更新 (1回目)

 gnupack/emacs.exe を実行すると間違いなくエラーメッセージが表示される。

Warning (initialization): An error occurred while loading `gnupack/home/.emacs.d/init.el':

File error: Cannot open load file, no such file or directory, cp5022x

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

f:id:blechmusik2:20141114001701p:plain

 このエラーは、gnupack/home/app/emacs/site-lisp/cp5022x/cp5022x.el にあるファイルを読む込むように load-path が正しく設定されていないことを知らせるものだ。
 そこで、NTEmacs @ ウィキ - gnupack の環境で NTEmacs64 を利用するための設定 にあるとおり、Emacs が gnupack/home/app/emacs/site-lisp 以下のファイルをロードできるようにするために、gnupack/home/.emacs.d/init.el を更新する。

cygwin1.dll の更新 (Windows 8.1向け)

Windows 8.1 の環境で gnupack/emacs.exe を実行すると、以下のエラーメッセージが表示されることになる。

Warning (initialization): An error occurred while loading `gnupack/home/.emacs.d/init.el':

error: Cannot parse output from `mount':       1 [main] mount 2160 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer.  Please report this problem to

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

f:id:blechmusik2:20141114001800p:plain

 インターネット上には同様の症状に出くわしたという発言がみられる。

 どちらの場合も、cygwinのセットアッププログラム (setup-x86_64.exe) を導入し、cygwin全体を再インストールすることで問題の症状が解消されたようだ。
 私はcygwin全体を再インストールせずに対処しうる方法を見つけた。それは gnupack/app/cygwin/cygwin/bin/cygwin1.dll を最新の cygwin1.dll に置き換えるというものである。最新の cygwin1.dll は Cygwin Snapshots から入手できる。cygwin1.dll は "x86/cygwin1-20141107.dll.xz" のように.xz拡張子のファイルとして配布されているから、 そのファイルを入手して展開し、cygwin1.dll にリネームすればよい。

find ./ -name "cygwin1*dll.xz" | xargs  xz -dv; find ./ -name "cygwin1*dll" | xargs -i mv {} cygwin1.dll

 このコマンド入力によって生成した cygwin1.dll を gnupack/app/cygwin/cygwin/bin/cygwin1.dll に上書き保存すること。
 これで Windows 8.1 の環境で Emacs 24.4 が gnupack 経由で起動できるようになった。

gnupack/home/.emacs.d/init.el の更新 (2回目)

 gnupack/emacs.exe を実行すると、今度は次のようなエラーメッセージが表示されるようになる。

Warning (initialization): An error occurred while loading `gnupack/home/.emacs.d/init.el':

error: Attempt to modify read-only object, (Visit New File... find-file :enable (menu-bar-non-minibuffer-window-p) :help Specify a new file's name, to edit the file)

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

f:id:blechmusik2:20141114001810p:plain

 これを解消するには、gnupack/home/.emacs.d/init.el の設定中の (require 'menu-tree) をコメントアウトすればよい。

;   (require 'menu-tree)

 この作業を経て NTEmacs64 が無事起動する。日本語入力は正常に動作しているようだ。

f:id:blechmusik2:20141114001833p:plain


おわりに

 gnupack_basic-11.00 に収録されている Emacs と今回新たに導入した Emacs 24.4 の起動時間を調べてみた。

(emacs-version)
"GNU Emacs 24.2.1 (i386-mingw-nt6.2.9200)
 of 2012-12-08 on GNUPACK"

(emacs-init-time)
"0.7 seconds"
(emacs-version)
"GNU Emacs 24.4.1 (x86_64-pc-mingw32)
 of 2014-11-10 on NTEMACS64"

(emacs-init-time)
"0.7 seconds"

 gnupack の初期設定のままなら、 Emacs 24.2 と Emacs 24.4 では起動時間にさほど違いがないらしい。