Emacs23.2.91のパッチ(初回IME変換時の表示フォントと日本語isearchの改修)

初回の IME変換時のフォントがデフォルトにならないように改修しました.あと,isearchで日本語検索するときに変換中の文字列をミニバッファに表示するパッチ(isearchで日本語入力をやりやすくするパッチ)を見つけたので取り込んでみました.最新のパッチとバイナリは以下で配布しています.

パッチの作り直しにあわせ,自分への備忘録のためにパッチの内容について少し整理します.流用させていただいたパッチと,独自に追加したパッチは以下のとおりです.

Emacs-23.1用 IMEパッチ
関連サイト:NTEmacs JP Project
パッチ:http://sourceforge.jp/projects/ntemacsjp/downloads/42999/Emacs-23.1-IME.patch.gz/
 NTEmacs JP Projectで公開されているパッチです.nt/configure.batで追加される checkversionロジックについては取り込んでいません *1.
*1 checkversionでは VCのビルドで参照される WINVERを定義していますが,近年 VCでのビルドが成功した話も聞かないし,Windows 7の情報が追加されていないので削除しました.

Emacs-23.1用 IME追加パッチ
関連サイト:2ch (NTEmacs スレッド 2 >>470)
パッチ:http://sourceforge.jp/projects/gnupack/downloads/46325/emacs-23.1-ime-mod.patch.gz/
 2chの有志の方が作成されたパッチです.NTEmacs JP Projectの IMEパッチに対し以下の改修がされているとのことです *2.lisp/files.elabbreviate-file-nameに追加される regexp-quoteについては取り込んでいません *3.
  • IME確定undoで文字が消えすぎないように対策
  • -D_UNICODEでビルドしたとき user-real-login-nameが正しく取得できない対策
  • -D_UNICODE無しでビルドしても動くように対策
  • normal-top-levelからの abbreviate-file-name呼び出し1回目に %HOME%の日本語を認識させる
  • abbreviate-file-nameで %HOME%を regexp-quote
  • ntemacsjp22 にあった ime-font設定の追加
    → -D_UNICODEだと効かなかったのを修正
  • サロゲート入力パッチ [NTEmacsjp-users 99]
  • Windows 7 パッチ
  • IMEで落ちる対策。再変換の del_rangeを w32_read_socketに移動
  • IMEで落ちる対策。フォント設定の elisp呼び出しを w32_read_socketに移動
    → 実はちゃんと働いていなかったのを修正
    → このせいで delete-frameで emacsが落ちていたのを修正
  • IMEで落ちる対策。再変換で elispの利用を減らした (-D_UNICODEのみ)
  • VistaMS-IMEで -D_UNICODEビルドで再変換できるように修正
    w32_get_ime_reconversion_string() の戻り値を常に 0にした
  • _UNICODEIME_UNICODEに変更
    -D_UNICODE付きだと何故かオリジナル Emacs 23.1のビルドに失敗したので念のため
*2 一次配布のパッチに添付されていた about.txtからの引用です.
*3 emacs-23.2.91のソースで該当箇所が変更されていたので,本家のソースを優先しています.

デフォルトフォント変更パッチ
 起動時の英字のデフォルトフォントを Courier New-10から MS Gothic-12に変更しています.src/w32fns.cに赤字部分を追加しています.
static char *names[]
  = { "MS Gothic-12",
      "Courier New-10",
      "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1",
      "-*-Fixedsys-normal-r-*-*-12-*-*-*-c-*-iso8859-1",
      "Fixedsys",
      NULL };

IME変換中フォントの修正パッチ
 Emacs-23.1-IME.patch.gzemacs-23.1-ime-mod.patch.gzだけでは,初回の IME変換時のフォントがデフォルトになってしまいます.src/w32fns.cに以下のロジック(赤字部分)を追加して初回の IME変換時も正しいフォントで表示されるようにします.
/* Flag to selectively ignore WM_IME_CHAR messages.  */
static int ignore_ime_char = 0;

static int ignore_mule_ime_set_conv_win = 0;

<省略>

case WM_MULE_IMM_SET_CONVERSION_WINDOW:
  if(ignore_mule_ime_set_conv_win == 0) {
    w32_set_ime_font (hwnd, &ime_logfont);
    ignore_mule_ime_set_conv_win = 1;
  }
  w32_set_ime_conv_window (hwnd, (struct frame *) wParam);
  break;

isearchで日本語入力をやりやすくするパッチ
関連サイト:日々の反省1
 isearch-mode に入ったときに IMEの変換ウィンドウがミニバッファに出るようにするパッチです.使用するには以下の設定を追加してください.
(defun w32-isearch-update ()
  (interactive)
  (isearch-update))
(define-key isearch-mode-map [compend] 'w32-isearch-update)
(define-key isearch-mode-map [kanji] 'isearch-toggle-input-method)

(add-hook 'isearch-mode-hook
          (lambda () (setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook
          (lambda () (setq w32-ime-composition-window nil)))


おまけ:ビルド手順(抜粋)


[/tmp]# tar zxf emacs-23.2.91.tar.gz
[/tmp]# tar zxf emacs-23.2.91-ime-2011-01-03.patch.tar.gz
[/tmp]# cd emacs-23.2.91
[/tmp/emacs-23.2.91]# patch -p1 < ../emacs-23.2.91-ime-2011-01-03.patch
[/tmp/emacs-23.2.91]# cd nt
[/tmp/emacs-23.2.91/nt]# ./configure.bat --prefix "C:\/emacs-23.2.91-20110103" --no-debug --with-gcc --no-cygwin --enable-w32-ime --cflags -O3 --cflags -fno-tree-vectorize --cflags -funsigned-char --cflags -mthreads --cflags -pipe --cflags -DRECONVERSION --cflags -DIME_UNICODE --cflags -IC:/gnupack_devel-5.01/app/gnuwin32/include --ldflags -LC:/gnupack_devel-5.01/app/gnuwin32/lib
[/tmp/emacs-23.2.91/nt]# mingw32-make ARCH_CFLAGS="-c -march=pentium-m -msse4.1 -mfpmath=sse -pipe" bootstrap
[/tmp/emacs-23.2.91/nt]# mingw32-make install