Tuesday, June 19, 2012

emacs-w3m 実行時に Wrong type argument: arrayp, nil のエラー

突然ですが emacs-w3m をインストールすることにした。

まずは、いつものように環境から。

環境

  • Mac OS X Version 10.6.8
  • GNU Emacs 24.1.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-06-10 on bob.porkrind.org
  • emacs-w3m-1.4.4

インストール

こちらのページを参考にして、emacs-w3m をインストールした。

【参考】EmacsでWebページをみる。(Emacs-w3m) - redtower's memo
$ wget http://emacs-w3m.namazu.org/emacs-w3m-1.4.4.tar.gz
$ tar zxvf emacs-w3m-1.4.4.tar.gz
$ cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co emacs-w3m
$ cp -pr emacs-w3m/* emacs-w3m-1.4.4
$ cd emacs-w3m-1.4.4
$ ./configure --prefix=~/.emacs.d/elisp/emacs-w3m
$ make
$ make install

~/.emacs に以下の内容を記述。

(add-to-list 'load-path "~/.emacs.d/emacs-w3m/share/emacs/site-lisp/w3m")
(add-to-list 'Info-additional-directory-list "~/.emacs.d/elisp/emacs-w3m/share/info")
(require 'w3m-load)

エラーへの対応

M-x w3m として w3m を起動する。しかし、起動時に以下のエラーが表示され、起動に失敗する。

Wrong type argument: arrayp, nil

以下のページを参照すると、Emacs 22 未満でバイトコンパイルした *.elc を Emacs 23 でロードしているのが原因とのこと。

【参考】Re: (wrong-type-argument arrayp nil) in w3m-ems

「*.elc を直接開いてみると、先頭の方にバイトコンパイルした Emacs のバージョンが記載されている」とのことなので、インストールされた w3m.elc の先頭を確認してみると Emacs 22.1.1 でバイトコンパイルされていた。

「おかしい。。。自分の使っている Emacs は 24.1.1 だぞ。。。」と思い、コマンドプロンプトにて Emacs のバージョンを確認してみた。

$ which emacs
/usr/bin/emacs
$ emacs --version
GNU Emacs 22.1.1

ということで、Emacs 22.1.1 がバイトコンパイルに使われていることが判明した。これは、GUI で使っている Emacs と CUI で使っている Emacs が別のバージョンの Emacs であったことに原因がある。

  • CUI - /usr/bin/emacs
  • GUI - /Applications/Emacs.app/Contents/MacOS/Emacs

それぞれ CUI は 22.1.1、GUI は 24.1.1 であった。

よって、GUI の Emacs で w3m.el を開き、M-x byte-compile-file で w3m.el をバイトコンパイル。するとコンパイルエラー。先ほどのページのスレッドを辿ると「w3m-ems.el でエラーになる」とのことだったので、w3m-ems.el をコンパイルした後に、w3m.el をバイトコンパイル。

【参考】Re: (wrong-type-argument arrayp nil) in w3m-ems

すると今度は、バイトコンパイルに成功!!

そして、M-x w3m をするとエコーエリアに以下のエラー。

Searching for program: No such file or directory, /usr/bin/w3m

/usr/bin/w3m にシムリンクを貼る。

$ which w3m
/usr/local/bin/w3m
$ sudo ln -s /usr/local/bin/w3m /usr/bin/w3m

をして、M-x w3m をしたところ、無事に emacs-w3m を起動することが出来ました!!

しかし、よくよく先ほどのスレッドのページを見なおしてみると「EMACS を指定するようにして解決しました。」とのこと。以下のように make 実行時に EMACS を指定してインストールすると、無事に emacs-w3m をインストールすることが出来た。。。手動で w3m.el や w3m-ems.el をバイトコンパイルする必要なんてなかった。。。

$ ./configure --prefix=~/.emacs.d/elisp/emacs-w3m
$ make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
$ make install

何はともあれ、emacs-w3m が動いて良かった!!これで次のステップに進めるょっ!!

(・∀・)

No comments:

Post a Comment