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

时间:2010-02-22 20:55:45

标签: ruby command-line console command-line-interface readline

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

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

我想要这样的事情:

代码:

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

控制台:

> default_text|

5 个答案:

答案 0 :(得分:8)

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 :(得分:5)

+1到高线

尝试使用类似的东西:

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

我现在正在做的方式是:

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
是的,这很愚蠢,但这是我发现的唯一方法。

有人找到了解决方法吗?

答案 4 :(得分:1)

Highline并没有完全按照你描述的那样做,但也许它足够接近。