Emacsにmigemoをインストール

空き時間にmigemoをインストールしようとしたら色々ハマったので、インストール手順をメモしておきます。

migemoって何?

Migemo はローマ字のまま日本語をインクリメンタル検索するため のツールです。かな漢字変換をすることなく日本語のインクリメン タル検索を快適に行うことができます。

http://0xcc.net/migemo/

Emacsに限った話ではないけれど、日本語の文章をインクリメンタル検索する場合、

  1. 日本語IMEを有効化(Macなら「かな」キーを押す)
  2. 検索ワードをローマ字で入力
  3. 漢字/カタカナ等に変換

という手順を踏まねばならず、地味にストレスが溜まる。Migemoはこの手順を省略し、ローマ字を入力するだけで変換後の漢字/カナを予測し検索をかけてくれる優れモノ。

環境

  • Mac OSX Lion
  • Cocoa Emacs 23.3.1
  • Ruby 1.9.2, 1.8.7 (Rubyのバージョンはrvmで管理)

インストールの準備

APELのインストール

APELはA Portable Emacs Libraryの略称で、バージョンの異なるEmacs間で移植性を簡単にするためのライブラリであるらしい(あんまりよく分かってない)。
APELは以前elscreenを導入した際に既にインストールしていたので今回は何もしなかった。その時参考にさせて頂いたエントリはこちら:Emacs For Mac OS X に ElScreen と APEL をインストールする方法 / マスタカの ChangeLog メモ

必要なファイルのダウンロード

migemo本体の他、RomkanとBsearchというRubyライブラリが必要なので落としてくる:

$ mkdir work
$ cd work
$ wget http://0xcc.net/ruby-romkan/ruby-romkan-0.4.tar.gz
$ wget http://0xcc.net/ruby-bsearch/ruby-bsearch-1.5.tar.gz
$ wget http://0xcc.net/migemo/migemo-0.40.tar.gz
$ tar xzvf ruby-romkan-0.4.tar.gz 
$ tar xzvf ruby-bsearch-1.5.tar.gz 
$ tar xzvf migemo-0.40.tar.gz 

romkanとbsearchのrubyスクリプトはどこに置いたらいいのか少し悩んだ。結局ホームディレクトリ下にsite-rubyというディレクトリを作ってここに置くことに。

$ cd
$ mkdir site-ruby
$ cp work/ruby-romkan-0.4/romkan.rb site-ruby/.
$ cp work/ruby-bsearch-1.5/bsearch.rb site-ruby/.

Rubyがこのディレクトリを認識するように、別途ロードパスを通してやる必要がある。

migemoのコンパイル & インストール

Rubyのバージョンはrvmで管理しており、デフォルトは1.9.2に設定してあるのだけれど、configureスクリプトを実行したところこれが原因でコケた:

$ ./configure --with-emacs=/Applications/Emacs.app/Contents/MacOS/Emacs  --with-lispdir=~/.emacs.d/site-lisp --with-rubydir=~/site-ruby
loading cache ./config.cache
checking for a BSD compatible install... (cached) /usr/bin//install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... (cached) yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking for ruby... (cached) /usr/bin//ruby
checking where emacs files are in... $(datadir)/emacs
checking where .elc files should go... ~/.emacs.d/site-lisp
checking where emacs files are in... 
checking where .rb files should go... ~/site-ruby
-n checking Ruby/Bsearch... 
found
-n checking Ruby/Romkan... 
<internal:lib/rubygems/custom_require>:29:in `require': /Users/hashy/site-ruby/romkan.rb:29: invalid multibyte char (US-ASCII) (SyntaxError)
/Users/hashy/site-ruby/romkan.rb:28: invalid multibyte char (US-ASCII)
/Users/hashy/site-ruby/romkan.rb:28: syntax error, unexpected $end, expecting keyword_end

ググったところmigemoはRuby 1.9では動作しないらしい。仕方ないので一旦Rubyのバージョンをデフォルトの1.8.7に切り替えることにする:

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.2.0]
$ rvm use system --default
Now using system ruby.
Now using system ruby.
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

Rubyを1.8.7に切り替えたらエラーが出なくなった:

$ ./configure --with-emacs=/Applications/Emacs.app/Contents/MacOS/Emacs  --with-lispdir=~/.emacs.d/site-lisp --with-rubydir=~/site-ruby
loading cache ./config.cache
checking for a BSD compatible install... (cached) /usr/bin//install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... (cached) yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking for ruby... (cached) /usr/bin//ruby
checking where emacs files are in... $(datadir)/emacs
checking where .elc files should go... ~/.emacs.d/site-lisp
checking where emacs files are in... 
checking where .rb files should go... ~/site-ruby
-n checking Ruby/Bsearch... 
found
-n checking Ruby/Romkan... 
found
creating ./config.status
creating Makefile
creating tests/Makefile
creating migemo.rb

あとはmake, make installでインストールが完了。

make && make install

さてこのままだとrvmでRubyのバージョンを1.9に戻した時にmigemoが動かない。
悩んだ末、/usr/local/bin/以下にインストールされたmigemo, migemo-grep, migemo-client, migemo-serverのshebangを次のように書き換え、rvmのRubyは使わないように修正した:

#! /usr/bin/ruby

emacs側の設定

~/.emacs.d/init.elに次の記述を加えてやると、migemoが動いた。

(setenv "RUBYLIB" "~/site-ruby")
(require 'migemo)
(setq migemo-command "migemo")
(setq migemo-options '("-t" "emacs"))

backward-searchの不具合を直す

めでたくmigemoのインストールが完了したので喜んでいたのも束の間、C-rで後方検索を実行したところ "wrong-type-argument ..." というエラーメッセージがミニバッファに表示されて涙目になった。
ただこれは既知のバグであるらしく、下記ページで対応方法が公開されていた:
[migemo] Fix error with isearch-backward

lisp用ディレクトリにインストールされたmigemo.elを開き、該当する関数定義を書き換えて再度バイトコンパイルすると正常に動作するようになった。ああ大変だった...

疑問

migemoって何て読むの?みげも?みじぇも?