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

后端 未结 5 636
孤街浪徒
孤街浪徒 2020-12-03 15:11

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 th

相关标签:
5条回答
  • 2020-12-03 15:32

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

    0 讨论(0)
  • 2020-12-03 15:35

    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.

    0 讨论(0)
  • 2020-12-03 15:36

    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?

    0 讨论(0)
  • 2020-12-03 15:37

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

    0 讨论(0)
  • 2020-12-03 15:46

    +1 to highline

    try with something like:

    require 'highline/import'
    input = ask('> ') {|q| q.default = 'default_text'} # > |default_text|
    
    0 讨论(0)
提交回复
热议问题