11

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

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

我想要这样的东西:

代码:

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

安慰:

> default_text|
4

6 回答 6

9

你所问的是可能的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令人失望的原因之一是将光标移动键读取为常规输入这一事实。在那种发现之后,我不再朝那个方向看。

于 2015-04-20T08:49:17.380 回答
5

+1 高线

尝试类似的东西:

require 'highline/import'
input = ask('> ') {|q| q.default = 'default_text'} # > |default_text|
于 2011-04-27T22:32:02.127 回答
3

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

于 2010-02-22T23:55:16.443 回答
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

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

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

于 2010-11-03T03:04:51.740 回答
1

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

于 2010-02-23T00:09:30.170 回答
0

旧问题的新答案,但添加是因为我发现这是在寻找同一问题的答案。

tty-prompt看起来就像您正在寻找的那样 - 要求输入具有可编辑的默认值。这是我发现的唯一可以为我提供可编辑默认值的宝石(但可能还有其他宝石)

完整的代码如下所示:

require "tty-prompt"
prompt = TTY::Prompt.new
input = prompt.ask('What is your name?', value: 'Bob')
于 2022-02-05T13:14:37.450 回答