福居です。
In <yosuhfneotfz.fsf(a)jpl.org>
Katsumi Yamaoka <yamaoka(a)jpl.org> wrote:
山岡さん> >>>>> In <yosuiu7uxuba.fsf(a)jpl.org>
山岡さん> >>>>> Katsumi Yamaoka <yamaoka(a)jpl.org> wrote:
山岡さん> (let ((start (copy-marker egg:*region-start*))
山岡さん> (end (copy-marker egg:*region-end*)))
山岡さん> (henkan-quit)
山岡さん> (setq egg:*region-start* start
山岡さん> egg:*region-end* end))
山岡さん> この方法で egg:*region-start* と egg:*region-end* の値を復活させた場合
山岡さん> は、boiled-egg でも問題が起きる、と言うかこういう対策が不要だった従来
山岡さん> の egg-wnn と併用する場合でも、問題が起きるのではないでしょうか?
山岡さん> 福居さん、確認してみていただけませんか?
まず、 (set-marker-insertion-type end t) が必要だと思ったので、
それを (henkan-quit) の前に挿入して試してみました。
;; copy-marker は (marker-insertion-type) の返す情報はコピーして
;; くれないようです。
egg-its-1.17-199907090120.patch を当てる前、後ともにうまく動きま
せんでした。
(fence-cancel-input) が egg:*region-start* と egg:*region-end* の
領域の外側に フェンス('|')があることを仮定しているけど、前者は
領域の内側にフェンスがあり、後者はそもそもフェンスを残さないので、
(fence-cancel-input) が領域外側の文字を一文字ずつ食べてしまって、
表示がおかしくなってしまいます。
山岡さん> もしこれで問題があるようなら、
山岡さん> (defun rK-cancel-trans()
山岡さん> "cancel KANJI transformation (KANJI -> roman(hankaku) or
hiragana/ktakana)."
山岡さん> (interactive)
山岡さん> (let ((start (copy-marker egg:*region-start*))
山岡さん> (end (copy-marker egg:*region-end*)))
山岡さん> (henkan-quit)
山岡さん> (if (not (eq be-trans-mode 'K)) nil
山岡さん> (delete-region start end)
山岡さん> (fence-exit-internal)
山岡さん> (insert be-trans-src)
山岡さん> (setq be-trans-mode 'x)
山岡さん> (setq disable-undo nil))))
山岡さん> とでもした方が良いように思います。
こちらも試してみました。
(fence-exit-internal) の中で、egg:*region-start* と egg:*region-end*
を参照しているようなのでうまく動きませんでした。
結局、こんな風にして回避することにしました。
(defun rK-cancel-trans()
"cancel KANJI transformation (KANJI -> roman(hankaku) or
hiragana/ktakana)."
(interactive)
(let ((start (copy-marker egg:*region-start*))
(end (copy-marker egg:*region-end*)))
(set-marker-insertion-type end t)
(henkan-quit)
(if (not (eq be-trans-mode 'K)) nil
(if (and (marker-position egg:*region-start*)
(marker-position egg:*region-end*))
(fence-cancel-input) ; when traditional egg-wnn.el
(delete-region start end)) ; when egg-its-1.17-199907090120.patch
(insert be-trans-src)
(setq be-trans-mode 'x)
(setq disable-undo nil))))
patch があたったものかどうか判定するという、
とても対処療法的な解決法です:-)
たぶん、これでうまくいったと思います。
これらの対処をした boiled-egg の patch を以下の場所に置きました。
http://www.page.sannet.ne.jp/hfukui/emacs/boiled-egg-patch.html
minor mode 化したり、SKK みたいに mode で cursor の色を変えたりも
しています。興味があったら使ってください。
山岡さん> ;; それにしても boiled-egg はすごいことをやっているんですね。:-p
それはやっぱり、すごいことをしているからだと思います:-)
私もだんだん気付いてきました。
henkan-quit で、 昔の egg-wnn.el は、henkan-mode からは
fence-mode を通さないと元の状態に戻れなかったのを、
むりやり henkan-region で入った henkan-mode から元の状態に
戻ろうというすごいことをしていたからですね。
今回のパッチで、fence-mode を経由して henkan-mode に入ったか、
それとも直接 henkan-mode に入ったのかを henkan-quit が自動判別
して元の状態に戻すようになりました。
そこで、henkan-quit を呼び出したときに fence-mode になることを期待して
いた boiled-egg が困ってしまって、今回の問題が起きたのですね。
村田さん> しかし,このエラーが回避できるなら他の方法でもよいと思います。
山岡さん> うう〜む、ぼくはもう降りたいです。(^^;;)
私は boiled-egg が何とか動くようになったので、これで満足しています。
どうも、いろいろとして頂いてありがとうございました。
--
福居宏和 (Hirokazu FUKUI)
E-mail: fukui(a)atesoft.advantest.co.jp, hfukui(a)sannet.ne.jp