auto-complete-etags の例のバグとか。

どもです。


とりあえず,現時点でお手上げ。色々なバグが見つかる。
というか,overlay というものを全くわかってないのが痛い。
というか,overlay って Emacs 標準の機能なのね。
それすら知らなかったよ。
で,その overlay を知らないと解消できないバグだと判断したので,
overlay について Emacs Lisp Manual でお勉強します。
表示が崩れるのも,謎の空白が挿入されるのも,
また,新たに見つかった,謎の改行が overlay のサイズ分くらい
挿入されるのも,全部,overlay の表示中に,カレントバッファを
別のバッファにするのが原因だと思う。
なので,タグジャンプ先に行って帰ってくるまではブロックしてもらう
みたいな機能を見つけないと無理っぽい。
無理っぽいと書いていて気がついたが,auto-complete の標準機能で,
elisp のドキュメントをクイックヘルプで表示する機能があったなぁと。
そのソースを見てみればわかるかも。
凡夫のワタシにとっては,活路はパクリにあり! が真理なのでしょう。
よっしゃよっしゃ。


あー,ちなみに,auto-complete-etags ですが,
デフォルトでクイックヘルプを表示しないようにしたので,
補完目的のみに使う場合は,そこそこ問題なく使えると思いますし,
問題があっても,直ちに影響はないと思います。えっ。

2011/04/14 (Thu) 21:08 追記

overlay について読んでみたが,全然理解できず。
バッファの一部みたいなことはわかった。


ac-source-functions では,describe-function-1 という C で書かれた
関数を使っているということがわかり,ショック。
何故ショックかはパクレないから。
atomic-change-group とか,タイマーとか,色々ためしたけど,
だめだった。find-tag-noselect が marker をごにょごにょしている,
というのが表示が崩れる原因だと思う。
あと,空白改行挿入の件は,バッファを切り替えるのが原因だが,
ac-source-functions では,with-temp-buffer を使っているので
実質切り替えているのと同じなのではと思うがどうなのだろう。
そもそも何故,set-buffer なりで切り替えて処理しているのに,
途中で auto-complete の方のコードが実行されるのだろう。
Emacs がどういう風に elisp を実行させているのかがわからないので,
それはわからないだろう。とオレの言っていることもわからなくなってきた。
C なりなんなりで作って,call-process すればいけるだろうと思うけど,
それはやりたくないにょろよ。elisp で書いて Emacs 自体を call-process する
とかできるんだろうか。


なんにせよ万策尽きた感が,んぱなかったので,ふて寝した。
そしたら,夢を見た。
夢の中でも,同じ事をやろうとしていてできずに苦しんだ。
なので,回復に失敗した。
ふて寝の意味ねーじゃん。
ちくしょうめっ。

2011/04/14 (Thu) 21:54 追記

オートミール食ってちょっと元気がでたので,再チャレンジ。
適当なファイルを用意してそれに set-buffer して,
文字列を返すみたいなことをやってみた。
・・・。
おかしい。
なんの問題もない。
そんな馬鹿な。
いやまさか。
まさかかささかさま。
おれが馬鹿か。
諸悪の根源は,find-tag-noselect にありと見た!
いやまだわからんけど。ちょっと find-tag-noselect 見てくる。

2011/04/14 (Thu) 23:55 追記

ごめんなさい。うそでした。
自前で,タグファイルを調べてからソースを開いて,シグニチャを取ってくる
みたいなの書いて試してみたら,やっぱりソースが変更された。
タフファイルにたいして,set-buffer, ソースに対して,set-buffer の計2回,
set-buffer しているけど,タグファイルは変更されない。
これは,タグファイルのバッファでは,auto-complete が無効になっている,
そして,ソースのバッファでは,auto-complete が有効になっていることが
原因ではないかと予想。
もうさすがに無理だ。
おしまい!!
・・・。
・・・。
きっと。
またまた書いていて気がついたが,
というか書いているとひらめくことがあるから書いているわけですが,
モードを指定してファイルを開く。みたいな関数あるんけ?
いや,いいかげん,Emacs だけでやるのはやめたほうがいいのかな。
色々と,一喜一憂したせいか,疲れた。

2011/04/15 (Fri) 00:19 キタかも!!

with-temp-buffer で,定義元のバッファを insert-substring-no-properties
で,ごっそりコピーしてシグニチャを取得 --> 失敗に終わる。
with-temp-buffer のモードはどうなるのかわからん。
find-file-noselect しただけなのに何故か,定義先のソースが変更されてしまう。
find-file-noselect を使ってソースのバッファを取得したからか?
少なくともそっちのバッファに注目してないのに。
やはり詰むのか。
そもそも上の予想は,あっているのか?
ほいでと,なんとなく,elisp info を with-temp-buffer でインクリメンタルサーチしてみる。
すると,なぜか目にとまったのが,
insert-file-contents-literally という関数。なんじゃらほい? 見たことないなぁ。
これはどうやら windows 上の Emacs で用意された関数。
しかし,insert-file-contents という関数は,Emacs 標準であった。
なにこのドキドキ,ワクワク感。
南無三!! と,こいつを使ってみたら,あらいやだ。
なんかできちゃったっぽい,あたし。どうしよ。
えぇ,わかってますとも。大丈夫。
これまでの流れから言って,またオチがどっかにあるはず。
とりあえず,オレはもう疲れたよ。