2011-08-10 14 views
1

私はミニバッファを使用する関数を作成していますが、いくつかの文字を削除する必要のある多少の補完方法が必要です。たとえば:別の種類の補完を行う

ar<tab> -> artist: 
artist:ba<tab> -> artist:'Johann Sebastian Bach' 
artist:'Johann Sebastian Bach'<tab> -> artist:'Bela Bartók' 
artist:'Bela Bartók' and album:<tab> 
etc... 

私はすでに、現在の入力の可能な文字列のリストを生成補完機能を、書いて、まだ唯一の選択肢は、削除を必要としないので、私は、completing-readcompletion-table-dynamicでそれを使用することはできませんが表示されます。この場合、最初のステップは、からからアーティストまでです。

この作業を行うには、下位レベルの(read-from-minibuffer)をカスタムキーマップで使用して、補完を行い、代替案を表示することを検討しています。よりシンプルなソリューションはありますか?そうでない場合は、表示され、処理される機能はどれですか?完了バッファ?

ありがとうございます!


EDIT:最後に、私は自分自身をロールバックされます。誰でも興味があればHere is the code

答えて

1

はい、icicleは、あなたが欲しいものを与えるはずです、IIUC。

「アーティスト」や「アルバム」のようなものをどのように処理しているのかよく分かりませんが、いくつかの方法があります。痕跡が役立ちます。

  1. 完了候補の部分は、任意の順序で一致させることができます。したがって、 'foo'と 'bar'が同じ候補の一部である場合、両方の候補をどちらの順序でも一致させることができます。これは「プログレッシブ・コンプリート」です。パターンを追加して選択肢を絞り込むことができます。パターンはANDされます。また、パターンに一致する候補を減算することもできます。

  2. "マルチ補完"の候補を持つことができます。これらは、構成可能な文字列で区切られた部分で構成されています。一部またはすべての部分と照合することができます。例えば、候補者はアルバム名とアーティスト名の組み合わせかもしれません。

  3. を使用している場合は、+をブックマークして、la deliciousmailタグにタグを付けることができます。タグを付けるためにファイルを訪問する必要はありません。タグは一般に文字列(望むなら改行を含む)ですが、関連するLisp値を持つこともできます。ここでは、それぞれのアルバムとタグのアルバムと説明とさまざまなアーティストのファイルがあります。次に、名前やアーティストの一部に一致させて、特定のアルバムファイルを見つけることができます。すべてつらら完了するために

、あなたは進歩的な補完を使用して(#1)を補完することができます。プログレッションの各部分について、部分文字列または正規表現のマッチング(またはさまざまな種類のファジーマッチング)を使用することができます。役立つかもしれない

いくつかのリンク:

1

Iciclesライブラリのメリットがあります。ミニバッファの補完を強化するための多くの機能が含まれています。