[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] ファイルを結合するマクロ <Re: ミューをダウンロードしましたが・・・。



井上です。

Reiko TAKAHASHI <HFC03614@...> (高橋玲子) writes:

>  r高橋です。
> 
> Reply Mitsugu SAKAMOTO <mitsugu@...>'s message:
> 
> } (defadvice apend-buffer-to-filename (after emacspeak pre act)
> } 	"speak the current line" 
> } 	(emacspeak-speak-line))
> } 
> } かなあ。
> 
>  おお! やっぱり裏技があるんですね! ありがとうございます。
> これって、既存のコマンドとかでしゃべらせたいものが出てきたら、自分で勝手
> に加えてしまっても大丈夫ですか?

いいのですが、実はこれでは今回やってほしいことを果たしてくれません。
(pが一つ足りないのは別として)上の意味は、
append-buffer-to-fileが実行されて、それが終わったら(after)現在のカーソ
ル行を読む
です。
もしやるとしたら、

(defadvice apend-buffer-to-filename (before emacspeak pre act)
	"speak the current line" 
	(dtk-speak "append-to-file: "))
とかすると、一応実行前に「append-to-file:」としゃべります。
でもデフォルト値はしゃべってくれませんね。
defadviceは既存のコマンドの前、後、あるいはそれを包むような(around)形
	で動作を変更したり機能を追加したりするのですが、中に立ち入るこ
	とはできないので、ある程度限界があります。
でもかなりのEmacspeakの動作はこれを使って実現されています。どの関数に
	adviceするかが考えどころになってきます。
# 引数については実はあまりちゃんと説明できるほど分かってません。

> あと、万が一実際に (goto-char ...) していたとしても、(let ...) の中でやっ
> ていれば自然に (save-excursion ...) される……というのはありますか? 
> 「副作用」は (let ...) の外まで残るんでしたっけ?(そうじゃないと意味がな
> い……?)

ないです。
letはあくまで一時的なバインド指定の部分に書いた変数を保存して置いて後
で戻してくれるだけで、内側は外とは完全に別世界というわけではありません。
だって、内側でやった副作用を全部戻されたら困るじゃないですか?

> BEPだと、C-h Cのプロンプトもしゃべらないんですね。もしかして、他のよく使
> うものは、しゃべるように、一つ一つ坂本さんが書いてくださったおまじないを
> 加えているんですか?

それに近いです。
ほんと、C-h Cはしゃべりませんね。他のC-h f とかとは中で使っているプロ
ンプト表示の仕方が違っていて、そこにEmacspeakがadviceできてないのでしょ
う。
あ、今手元に最新版がないのですが、C-x c-m cもしゃべらなくなってたりし
ませんか?coding-systemを尋ねてくるものは、Ramanは英語しか使わないので
オリジナルではしゃべらないのです。BEPでは対策しているのですが、もしか
するとこのあいだのマージで落ちてる可能性がなくはないです。

> それから、ひとまず坂本さんのやり方で append-buffer-to-file をしゃべらせる
> ……というのは、最初から自分で作る関数ではやはり反則っぽいのでしょうか?

できれば避ける方がいいと私は思います。上に書いたように完全にはうまくしゃ
べらせられない場合もあるので。

-- 
                    Koichi Inoue, ARGV
                    E-Mail: inoue@...
                    ICQ UIN: 74900690