0

コマンド補完でreadlineを使用するRubyアプリがあります。

最初の文字列 (コマンド) が入力された後、その引数を完了できるようにしたいと考えています。引数リストは、選択したコマンドに基づいている必要があります。

誰かが簡単な例を持っていますか?

コマンドは次のとおりです。

COMMANDS = [
  'collect', 'watch'
].sort

COLLECT = [
  'stuff', 'otherstuff'
].sort

comp = proc do |s| 
  COMMANDS.grep( /^#{Regexp.escape(s)}/ )        
end

Readline.completion_proc = comp

を押すたびにTAB、proc ブロックが実行され、COMMANDS配列からのコマンドが照合されます。COLLECTコマンドの 1 つが完全に一致した後、配列内でのみ引数の検索を開始したいと思います。

4

2 に答える 2

2

しばらく考えた後、解決策は非常に簡単でした。

comp = proc do |s| 
  if Readline.line_buffer =~ /^.* /
    COLLECT.grep( /^#{Regexp.escape(s)}/ ) 
  else
    COMMANDS.grep( /^#{Regexp.escape(s)}/ ) 
  end
end

今、私はそれをより柔軟で使いやすいものに変える必要があります。

于 2012-05-30T21:09:55.333 に答える