如果我想在终端上显示已输入默认值的提示,我该怎么做?
Ruby 的标准Readline.readline()
允许我设置历史记录但不填写默认值(至少据我所知)
我想要这样的东西:
代码:
input = Readline.readline_with_default('>', 'default_text')
安慰:
> default_text|
如果我想在终端上显示已输入默认值的提示,我该怎么做?
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并没有完全按照你的描述做,但也许它已经足够接近了。
旧问题的新答案,但添加是因为我发现这是在寻找同一问题的答案。
tty-prompt看起来就像您正在寻找的那样 - 要求输入具有可编辑的默认值。这是我发现的唯一可以为我提供可编辑默认值的宝石(但可能还有其他宝石)
完整的代码如下所示:
require "tty-prompt"
prompt = TTY::Prompt.new
input = prompt.ask('What is your name?', value: 'Bob')