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

command-line, command-line-interface, console, readline, ruby

Solution

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.

Problem

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

Original source