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

Re: emacsでのバッファ名の文字列による取得について



井上です。

なんとなくわかりました。

Koichi INOUE <inoue@...> writes:

> killしているのはおそらくその前にTABが押されたときの状態が保存されている
> と都合が悪いのだと「思います」。

completionバッファが表示された状態でTABを押して候補を読み上げさせ、もう
一度聞こうとしてTABを押してもなにも読まないという問題を回避しているよう
です。
Emacspeakはcompletion操作が行われると
1.  completionバッファを消す。
2.  実際のcompletion動作を実行する。
3.  もしcompletionバッファが表示されていたら、「先頭から3行消去し、」残
りの部分を読み上げる。
4.  次にTABが押されたら同じことをする。

という動作をします。ここで1.がないと、なにも文字を追加しないでもう一度
TABを押したとき、completionバッファがそのままであるのに、またそこから3
行消去しようとします。その結果補完候補まで削除され、どんどん候補が減って
いくということになります。
きっと昔はこれで問題なかったのだと思いますが、completionバッファの表示タ
イミングがEmacsのバージョンで変わったためなのか、今はcompletionバッファ
が見えなくなるようになっています。(Emacs 20.7)

なんだかお粗末なのでなんとでも変更できそうなのですが、変更はBEP 1.0にタ
グを打ってから(ブランチタグしか打ったことがない(^^;))にしたいので、もう
ちょっとだけ待ってください。
# 要するにcvs tagコマンドを使ったことがない(^^;)

とりあえず簡単な回避方法ですが、emacspeak-speak.elに
emacspeak-kill-buffer-carefully というdefsubstがあるので、この中の
(kill-buffer)をしないようにしてください。後ろに閉じ括弧があるので注意で
す。
そして、make clean; make emacspeakしてください。defsubstなので、この部分
のコードをelcに反映するには全部コンパイルしなおす必要があります。
副作用としてTABによる補完をなにも文字を追加せずに2度以上行うと
completion候補が減ります。(^^;)

考えている改善策としては、先頭3行削除するのはやめて、補完候補の先頭から
最後までをbuffer-substringして読ませればいいじゃないかと思っています。きっ
とこれならTABを押しても画面上のcompletionリストがスクロールしないという
問題もなくなるのではないかと勝手に思っているのですが、ダメかな。

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