2008年4月16日の日記の1番目の記事へのコメント
■uim.el
何か複数フレーム開いて使ってたら突然バッファの中身が消失しました.しかもundo効かないし ((((;゜Д゜))) ガクガクブルブル.どうやら複数フレームで異なるバッファを開いて,それぞれでプリエディットを出した状態でフレームを切り替えると,プリエディットを消す際の範囲がおかしくなって大変なところまで消してしまう模様.
この前の commit でエンバグしたかなぁとちょっとバージョンを落としてみるも全然状況は改善せず.環境がおかしい? いや別の環境でも再現するなぁ.じゃあEmacs 22なのがまずいのかな? ぬ,Emacs21でも出るし,XEmacsでもおかしくなるぞ・・・(XEmacsはちょっと症状違うけど).・・・こ,これは・・・(ゴクリ)
ひょ,ひょっとして・・・と1.4.2 を入れてみたんですが,これが見事に再現 _|‾|○.一体いつからあるんだこのバグ.ひょっとして最初からずっとあるのかな・・・.C-x 5 2 とか昔から大好きで使いまくりなので,今までこれを踏んでなかったのが奇跡という感じなんですが・・・.本気で悪い夢でも見てるんじゃないかと疑いましたがどうやら現実のようですね (;´Д`)
原因を探ってみたところ,プリエディット表示前の位置を記憶するのに「uim-point」とかいう point 関数の代わりと思しき謎の関数 (といっても書いたのは多分自分なんですが) を使っているのが悪いっぽい.・・・ここで二つの疑問が.一つは,なぜこの関数がうまく機能していないのか.もう一つは,なぜ素直にpoint関数を利用していないのか・・・.
(defun uim-point () (window-point (get-buffer-window (current-buffer))))
で,とりあえずpoint関数に置き換えてみたところGNU Emacsでは問題が出なくなりました.F9 を押すと変換候補がメニューっぽく出てくる超かっこいい Byeoru も大丈夫そう.こうなると,uim-point がますます謎.何がしたくてこうなったんだろうなぁ・・・.
ちなみに,XEmacsの方は,フォーカスするフレームを切り替えると,フォーカスが外れた方のプリエディットが消えちゃったりする問題があったんですが,既にフォーカスから外れたコンテキストに対して UNFOCUSED コマンドが送られていて,その際エラーを返してしまっていたのがまずかった模様.uim-el-agent側を「何度もフォーカスから外れてもいいじゃない」という風にしたら直りました.
しかし,これ,やっぱ最初からずっとあったのかなぁ.調べるのが怖い・・・(;´Д`)
2008年4月16日の日記の1番目の記事へのコメント
[コメントを書く]