What will give me something like ruby readline with a default value?

。_饼干妹妹 提交于 2019-12-17 12:36:25

问题


If I want to have a prompt on the terminal with a default value already typed in, how can I do that?

Ruby's standard Readline.readline() lets me set the history but not fill in a default value (as far as I can tell, at least)

I would like something like this:

code:

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

console:

> default_text|

回答1:


What you are asking is possible with Readline. There's a callback where you can get control after the prompt is displayed and insert some text into the read buffer.

This worked for me:

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}"

BTW, I fairly tried to use HighLine, but it appeared to be a no-alternative to me. One of the disappointing reasons was the fact that HighLine#ask reads cursor movement keys as regular input. I stopped looking in that direction after that sort of discovery.




回答2:


+1 to highline

try with something like:

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



回答3:


Sounds like a job for ncurses. Seems like rbcurse (http://rbcurse.rubyforge.org/) is the best maintained API at the moment.




回答4:


I'm struggling with the same thing.

The way I'm doing it right now is:

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

yes, it's silly, but it has been the only way I've found to do it.

did anybody find any solution to this?




回答5:


Highline doesn't do exactly what you describe, but maybe it's close enough.



来源:https://stackoverflow.com/questions/2314105/what-will-give-me-something-like-ruby-readline-with-a-default-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!