Emacsにmigemoをインストール
空き時間にmigemoをインストールしようとしたら色々ハマったので、インストール手順をメモしておきます。
migemoって何?
Migemo はローマ字のまま日本語をインクリメンタル検索するため のツールです。かな漢字変換をすることなく日本語のインクリメン タル検索を快適に行うことができます。
http://0xcc.net/migemo/
Emacsに限った話ではないけれど、日本語の文章をインクリメンタル検索する場合、
- 日本語IMEを有効化(Macなら「かな」キーを押す)
- 検索ワードをローマ字で入力
- 漢字/カタカナ等に変換
という手順を踏まねばならず、地味にストレスが溜まる。Migemoはこの手順を省略し、ローマ字を入力するだけで変換後の漢字/カナを予測し検索をかけてくれる優れモノ。
インストールの準備
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って何て読むの?みげも?みじぇも?