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

好久不见. 提交于 2019-11-27 14:47:43

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.

+1 to highline

try with something like:

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

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

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?

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

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