Binary 2.0 カンファレンス

もう、すっかり時代遅れの感がありますが、素晴しいイベントだった模様です。
カンファレンスの開催がアナウンスされたときから、当日は現世と途絶された空間に居ることが確定していたので、MM/Memo に行きたい〜と書くくらいしか抵抗できずにいたものですが、本当にこんな機会がまたあったら良いなあ。
何せ、素晴しい speakers で、昔から様々な局面で助けて頂いた方ばかり。と言ってもどなたとも一切面識は無い訳ですが、だからこそ、皆さん、以前から様々な形でノウハウを公開されてきている方々ということであり、皆さんの活動で救われている民がここにも居ますということは一言申し上げておきたいところです。

Binary 2.0カンファレンス 2005 発表資料とレポートでまとめられている情報を見られるだけでも、十分過ぎる程の有用な情報が得られるので、すっかり舞い上がり掛けている程。
しかし、これらの情報に目を通す間もなく (まだ現世には僅かにしか戻って来られず、戻って来られたときには膨大な feed を追い掛けるのが関の山という状況)、すっかり置いてけぼり状態です。
バイナリアン初心者としては、壁が高いのは勿論判っていますが、何とか登っていきたいところ (高ければ高い壁の方が、登ったとき気持ち良いもんな♪ by Mr. Children) です。
時間は掛かりますが、まあ、ぼちぼち勉強させて貰います。

それにしても、いやー、本当に皆さん濃いですなあ。そして本当に楽しそうで羨ましい限りです。

ミニバッファでの補完

忙しいとか言いながら、Emacsen と聞いて黙っていられなくなってしまいました。

凹 [Emacsen] TAB派が多いのね

というファイル名補完の話で、一昨日、無理矢理に comment していました。
但し、最初に書いておきますと、私の環境は Emacsen とは言っても XEmacs 系統 (XEmacs, SXEmacs) ばかりでして、FSF Emacs では挙動が異なるのかもしれません。

コメントの流れを見ると、C-i (TAB) で補完する派と、SPC で補完する派が居られる様です。(何とか派とか言っても、別に対立とかはしてません ;-p)
私は、基本的には C-i 補完派で、殆んど C-i している訳ですが、時に SPC 打鍵で補完する場合があります。
それは、`-' を特別扱いしたい場合で、それを含めて http://kitaj.no-ip.com/tdiary/20051208.html#c01 なんてコメントをしました。
このコメントに対して、

凹 [Emacsen] 状況によって補完のやりかた使い分け

なんて器用な.多分頭がついていかない…

という応答が。(多分これは私のコメントに対する応答と思ったのですが、違っていたらごめんなさい)
元々の私のコメントは、別にそんなに大したことを言ってる訳ではなくて、多分、私にとって `-' を打鍵するのが SPC に比べてとても注意が必要だということから来ているだけな気がします。まあ、`-' が語の区切りという性質がある程度影響している部分もあるとは思いますが。

そして、ふと、補完関数の挙動の違いについて考えてみると、ちょっとおかしな事に気付きました。
ここまでコメントされている皆さん、概ね、感覚とか慣れで違うという具合の認識でしかない様でして、私も特に意識してなかったのでしたが、どうもおかしいと思い出したのです。
それは minibuffer-complete と minibuffer-complete-word の挙動の違いから来るもので、結論から書いてしまうと、

SPC (minibuffer-complete-word) だけでの補完だと、補完されない対象が存在してしまうのではないか。

というものです。
Info では、

-- コマンド: minibuffer-complete-word
    この関数は、ミニバッファの内容を多くても1単語分補完する。ミニバッファ
    の内容に対応する補完がたった1つであっても、単語構成文字ではない文字
    以降は補充しない。*Note Syntax Tables::。

-- コマンド: minibuffer-complete
    この関数は、ミニバッファの内容を可能な限り補完する。

と書かれていて、補完する範囲の違いだけしかない様に記述されていますが、実際には、 minibuffer-complete-word では、単語単位の補完のためと思われる特別な挙動があります。それは、

空白が打鍵されたときに、空白や `-' (ハイフン) を優先して補完する。

という挙動です。
時間が無くて中身まではちゃんと追ってないんですが、どうやら、空白や `-' が補完候補の次のキャラクタとなる候補が存在する場合には、それらを優先して補完している模様で、経験からこの様な挙動をすることに気付いた私が採っていた方法が、上でコメントしていた話でした。
そして、これは実は、

空白や `-' が含まれていると、そちらが優先されて補完されるために、それ以外の候補は補完対象から除外され切り捨てられてしまう。

ということになっている様です。
つまり、

  test/abc-efg
  test/abc_efg
  test/abcdefg

といったディレクトリがあるとき、

  C-x C-f test/a [SPC]

とすると、

  test/abcdefg
  test/abc_efg

は候補とせず、

  test/abc-efg

を補完して選択してしまうということになります。
実際には、SPC を打鍵するごとに、

  "test/abc" -> "test/abc-" -> "test/abc-efg"

と補完されて行くのですが、その間、他の候補は全くリストアップされません。
これでは、沢山の似た名前のファイルがある場合には、埋もれたまま候補として上げられないファイルが存在することになってしまいます。
また、これを Emacs のコマンド補完で考えてみると、

  M-x c [SPC]

とした場合、いきなり `c-' が確定してしまい その後、何度 SPC を打鍵しようとも `c-*' なコマンドしか候補にならず、c++-mode, calc, calendar ... などに関連する沢山のコマンドは選択される機会すらありません。

私の環境 (先にも書きました様に XEmacs 系統だけなのですが) では、この様な状況なのですが、SPC 補完派の方々はどの様に対応しておられるのでしょうか。
それともやはり、これは XEmacs 系統の Emacsen だけにある話で、FSF Emacs ではこの様な挙動とはならないのでしょうか。