什么会给我一些像ruby readline的默认值?

如果我想在终端上输入一个已输入默认值的提示,我该怎么做?

Ruby的标准Readline.readline()允许我设置历史记录但不填写默认值(据我所知,至少)

我想要这样的东西:

码:

 input = Readline.readline_with_default('>', 'default_text') 

安慰:

 > default_text| 

您可以通过Readline所要求的内容。 有一个回调,您可以在显示提示后获得控制权并将一些文本插入读取缓冲区。

这对我有用:

 Readline.pre_input_hook = -> do Readline.insert_text "hello.txt" Readline.redisplay # Remove the hook right away. Readline.pre_input_hook = nil end input = Readline.readline("Filename: ", false) puts "-- input:#{input.inspect}" 

顺便说一句,我相当尝试使用HighLine,但它似乎是我无法替代的。 其中一个令人失望的原因是HighLine#ask将光标移动键作为常规输入读取。 在那种发现之后,我不再朝那个方向看。

+1到高线

尝试使用类似的东西:

 require 'highline/import' input = ask('> ') {|q| q.default = 'default_text'} # > |default_text| 

听起来像ncurses的工作。 似乎rbcurse( http://rbcurse.rubyforge.org/ )是目前维护得最好的API。

我正在努力做同样的事情。

我现在这样做的方式是:

 options = ["the_text_you_want"] question = "use TAB or up arrow to show the text > " Readline.completion_append_character = " " Readline::HISTORY.push options.first Readline.completion_proc = proc { |s| options.grep( /^#{Regexp.escape(s)}/ ) } while value = Readline.readline(question, true) exit if value == 'q' puts value.chomp.strip #do something with the value here end 

是的,这很愚蠢,但这是我发现的唯一方法。

有没有人找到任何解决方案?

Highline并不完全符合你的描述,但也许它足够接近。