3

実行可能なスクリプト ( rubygems 用語ではアプリケーション ファイル)を含む gem を開発しました。呼び出すとき、次のように、特定のディレクトリ (現在の作業ディレクトリではない) でファイル名を完成させたいと思います。

foo edit my<tab>

次のように拡張されます。

foo edit myfile

私ができることは、シェル補完をインストールするスクリプトを含めることです。それが唯一の解決策である場合は、問題ありません。しかし、追加のステップからユーザーを解放し、宝石に補完を直接含める方法があるかどうか疑問に思っていました。

では、gem が独自のタブ補完を行う方法はありますか?

4

3 に答える 3

1

スクリプトを開始するコマンドを入力している間は、スクリプトはまだ実行されていません。引数がまだ入力されている間は、引数の処理に介入することはできません。可能であれば、gemファイルに bash 完了ファイルをインストールさせ、ユーザーの~/.bashrcファイルを変更してインストール プロセスの一部としてロードすることができます。

于 2012-07-24T12:56:10.763 に答える
0

Ruby のAbbrevモジュールを見てください。(About.com にも役立つ情報がいくつかあります。)

ドキュメントから:

指定された一連の文字列の一意の略語のセットを計算します。

「略語」が必要
「pp」が必要

pp Abbrev::abbrev(['ruby', 'rules']).sort
生成:

[[「こする」、「ルビー」]、
 [「ルビ」、「ルビ」]、
 [「ルール」、「ルール」]、
 [「ルール」、「ルール」]、
 [「ルール」、「ルール」]]
また、abbrev メソッドをクラス Array に追加します。

ディレクトリを読み取り、ファイルとサブディレクトリを Abbrev に渡し、結果をハッシュに変換します。ユーザーの入力を監視します。押すTabと、入力した内容がハッシュのキーと一致するかどうかを確認します。入力した内容が一意であり、その要素の値に解決できる場合。

これは、Abbrev の出力をハッシュに変換する方法です。

irb(main):009:0> hash = Hash[%w[ruby rules].abbrev]
=> {"rub"=>"ruby", "rule"=>"rules", "rul"=>"rules", "ruby"=>"ruby", "rules"=>"rules"}
于 2012-07-24T09:28:20.620 に答える