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|
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.