Pythonのヘルプをポップアップしてくれるelisp、py-doc-popupができるまで

秋の夜長、いかがお過ごしでしょうか。こんばんわ、myuhe a.k.a デスマ中にも関わらず、いつの間にかelispをいぢってたりするたわけ者 です。
さて、そのきっかけは、@kozo2さんのたわいもない一言
emacsのPython modeでcompletion-at-pointやった時にvimみたいにdocstringの表示できないんだろうか。
これをほけーっと見てて、あー確かにポップアップできるようになったら便利だなーとか思っていたのでした。
んで、お仕事でPython書いてたら、いつの間にかelisp書いてました。
python.elに使えそうな関数があったのでそんなに手間をかけずにできてきたのですが、バッファにPythonのヘルプを実行した結果がなぜか入りません。結局、原因がわからずTL上のelisperのみなさんに助けをこうことに
pythonのドックストリングをカーソル位置でポップアップするelisp書いたんだけど、なせか2回評価しないとポップアップしないとゆーとんでもない粗悪品。。。
というわけでハックしてくださる方、募集中です!! RT @myuhe: 先ほどのPythonのドックストリングをポップアップするelisp。 なぜか2回評価しないとポップアップしないんだけど。。。 “gist: 602537” – http://j.mp/aJ005y
すると、ありがたいことに@mori_devさんと@kiwanamiさんからコメントが。
@myuhe 整理するとけっこういいせんまでいけたのですが、comint.. の戻り値を取得できないところで諦めました! http://j.mp/cpU6xG
@myuhe comint-redirect〜が非同期の関数のようです。 comint-redirect-filter-functions で表示のイベントを取ってくるか、地味にタイマーでポーリングとかでしょうか。
@myuhe gistでforkして100msec待つ簡単な修正をしてみました。ちゃんとするなら、中身が入るまでループして待つとか、filterでイベント拾ってdeferred開始という感じかなと思います。
本当にありがとうございます。elispは 1割の括弧と9割の優しさでできているというのは本当なんですね!!
お二人のコードを拝借しながら、どうにか形になりました。kiwanamiさんからはdeferred.el使う必要はないかも、とのことでしたが、せっかく書いていただいたし、deferred.elの使用例としてそのままにしてます。
python.elで定義されている関数を使っているので、Emacs22以降推奨。そうでない場合は自前でインストールする必要があります。
当然deferred.elが必要です。
kiwanami’s emacs-deferred at master – GitHub
ポップアップにはpopup.elを使っているので、こちらも必要です。
m2ym’s auto-complete at master – GitHub
kozo2さんが希望されていたものと、ちょっと(かなり?)違う気もしますが、auto-complete.elに組みこむのだったら、たいした手間はかからないかも。
余裕がでてきたらやってみます。
20101001 20:41追記
deferred.elをdeffered.elとtypoしていたのを修正しました。
kiwanamiさん、ご指摘ありがとうございます。
-
前の記事
今週の気になるアレSeptember 29th 2010.09.29
-
次の記事
Emacs上でgistを操作するanything-gist.elをアップデートしました。 2010.10.03