Skip to content
2009/03/08 / highmt

Cygwinとopendir()

Meadowのshell-modeでTABキーを押してファイルパスを補完するときに
Cygwinのパスを意識してもらえない問題を追っていて
file-name-completionまで辿りついた。

file-name-completionで使用しているヘルパ関数file_name_completion()はCで実装されていて、
opendir()/readdir()を使って補完候補を検索している。
ここで、opendir()がCygwinのパスを受け付けるかどうかがポイントになる。

結論としては、

  • Cygwinのgccではcygwinのパスを受け付ける。
  • ただし、-mno-cygwinではCygwinのパスを受け付けない。

Netinstallerで配布されているMeadowは何でビルドされているかというと、
http://www.meadowy.org/meadow/wiki/コンパイル の情報とPEヘッダから察するに、
どうやらCygwinのgccで-mno-cygwinっぽい。

ということでshell-modeの補完の動作を変更するには

  • file_name_completion()を置き換える
    -> cygwin1.dllに依存しないといけなさそうだけど
       CRTとかバッティングするよねきっと…
  • 素直にcomint-dynamic-complete以下を書き換える
    -> 補完関係の関数っていっぱいあって大変かもね…
       それに、file_name_completion()を使ってるほかのもの挙動は変更されないし。

うーん。得られる内容とコストとの兼ね合いが。

広告
%d人のブロガーが「いいね」をつけました。